diff --git a/.bandit b/.bandit index cc5017da..dc28620f 100644 --- a/.bandit +++ b/.bandit @@ -1,3 +1,3 @@ [bandit] -skips: B110,B404,B408,B410,B603,B607 +skips: B110,B404,B408,B603,B607,B322 targets: . diff --git a/.gitignore b/.gitignore index 04e92ad6..ce3a0e9a 100644 --- a/.gitignore +++ b/.gitignore @@ -27,7 +27,6 @@ tmp/ /tests/repo/status # files used in manual testing -/config.py /config.yml /tmp/ /logs/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 39ec8223..65510c45 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,22 @@ --- +# Use merge request pipelines when a merge request is open for the branch. +# Use branch pipelines when a merge request is not open for the branch. +# https://docs.gitlab.com/ci/yaml/workflow/#switch-between-branch-pipelines-and-merge-request-pipelines +workflow: + rules: + - if: $CI_PIPELINE_SOURCE == 'merge_request_event' + - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS + when: never + - if: $CI_COMMIT_BRANCH + + +stages: + - lint + - test # default for jobs that do not specify stage: + - deploy + + variables: pip: pip3 --timeout 100 --retries 10 # speed up git checkout phase @@ -50,6 +67,7 @@ metadata_v0: - git checkout $RELEASE_COMMIT_ID - cd .. - git clone --depth 1 https://gitlab.com/fdroid/fdroiddata.git + - rm -f fdroiddata/config.yml # ignore config for this test - cd fdroiddata - ../tests/dump_internal_metadata_format.py - cd .. @@ -59,6 +77,7 @@ metadata_v0: - ../tests/dump_internal_metadata_format.py - sed -i -e '/ArchivePolicy:/d' + -e '/FlattrID:/d' -e '/RequiresRoot:/d' metadata/dump_*/*.yaml - diff -uw metadata/dump_* @@ -79,12 +98,31 @@ metadata_v0: # Ubuntu and other distros often lack https:// support - grep Debian /etc/issue.net && { find /etc/apt/sources.list* -type f | xargs sed -i s,http:,https:, ; } + # The official Debian docker images ship without ca-certificates, + # TLS certificates cannot be verified until that is installed. The + # following code turns off TLS verification, and enables HTTPS, so + # at least unverified TLS is used for apt-get instead of plain + # HTTP. Once ca-certificates is installed, the CA verification is + # enabled by removing this config. This set up makes the initial + # `apt-get update` and `apt-get install` look the same as verified + # TLS to the network observer and hides the metadata. - echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates - apt-get update - apt-get install ca-certificates - rm /etc/apt/apt.conf.d/99nocacertificates - apt-get dist-upgrade +# For jobs that only need to run when there are changes to Python files. +.python-rules-changes: &python-rules-changes + rules: + - changes: + - .gitlab-ci.yml + - fdroid + - makebuildserver + - setup.py + - fdroidserver/*.py + - tests/*.py + # Since F-Droid uses Debian as its default platform, from production # servers to CI to contributor machines, it is important to know when @@ -93,8 +131,8 @@ metadata_v0: debian_testing: image: debian:testing <<: *apt-template - only: - - master@fdroid/fdroidserver + rules: + - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" script: - apt-get install aapt @@ -107,6 +145,7 @@ debian_testing: ipfs-cid python3-biplist python3-defusedxml + python3-libcloud python3-pycountry python3-setuptools sdkmanager @@ -121,8 +160,8 @@ debian_testing: ubuntu_lts_ppa: image: ubuntu:latest <<: *apt-template - only: - - master@fdroid/fdroidserver + rules: + - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" script: - export ANDROID_HOME=/usr/lib/android-sdk - apt-get install gnupg @@ -147,6 +186,46 @@ ubuntu_lts_ppa: - ./run-tests +# Test to see how rclone works with S3 +test_deploy_to_s3_with_rclone: + image: debian:bookworm-slim + <<: *apt-template + tags: + - saas-linux-small-amd64 # the shared runners are known to support Docker. + services: + - name: docker:dind + command: ["--tls=false"] + variables: + DOCKER_HOST: "tcp://docker:2375" + DOCKER_DRIVER: overlay2 + DOCKER_TLS_CERTDIR: "" + before_script: + # ensure minio is up before executing tests + - apt-get update + - apt-get install -y + androguard + apksigner + curl + docker.io + git + python3-venv + rclone + # This job requires working docker but will silently fail if docker is not available + - docker info + - python3 -m venv --system-site-packages test-venv + - . test-venv/bin/activate + - pip install testcontainers[minio] + - pip install . + script: + - python3 -m unittest -k test_update_remote_storage_with_rclone --verbose + rules: + - changes: + - .gitlab-ci.yml + - fdroidserver/deploy.py + - tests/test_deploy.py + - tests/test_integration.py + + # Test using Ubuntu/jammy LTS (supported til April, 2027) with depends # from pypi and sdkmanager. The venv is used to isolate the dist # tarball generation environment from the clean install environment. @@ -166,7 +245,7 @@ ubuntu_jammy_pip: # back to bare machine to act as user's install machine - export ANDROID_HOME=/opt/android-sdk - $pip install sdkmanager - - sdkmanager 'build-tools;33.0.0' + - sdkmanager 'build-tools;35.0.0' # Install extras_require.optional from setup.py - $pip install biplist pycountry @@ -174,46 +253,16 @@ ubuntu_jammy_pip: - $pip install dist/fdroidserver-*.tar.gz - tar xzf dist/fdroidserver-*.tar.gz - cd fdroidserver-* - - export PATH=$PATH:$ANDROID_HOME/build-tools/33.0.0 + - export PATH=$PATH:$ANDROID_HOME/build-tools/35.0.0 - fdroid=`which fdroid` ./tests/run-tests # check localization was properly installed - LANGUAGE='de' fdroid --help | grep 'Gültige Befehle sind' -# test installation process on a bleeding edge distro with pip -arch_pip_install: - image: archlinux - only: - - master@fdroid/fdroidserver - script: - - pacman --sync --sysupgrade --refresh --noconfirm gcc git grep python-pip python-virtualenv python-wheel tar - - python -m venv venv - - source venv/bin/activate - - pip install -e .[test] - - fdroid - - fdroid readmeta - - fdroid update --help - - -# The gradlew-fdroid tests are isolated from the rest of the test -# suite, so they run as their own job. -gradlew-fdroid: - image: debian:bookworm-slim - <<: *apt-template - only: - changes: - - .gitlab-ci.yml - - gradlew-fdroid - - tests/test-gradlew-fdroid - script: - - apt-get install ca-certificates curl default-jdk-headless shellcheck unzip - - shellcheck --severity=error --color gradlew-fdroid tests/test-gradlew-fdroid - - ./tests/test-gradlew-fdroid - - # Run all the various linters and static analysis tools. -lint_format_bandit_checks: +hooks/pre-commit: + stage: lint image: debian:bookworm-slim variables: LANG: C.UTF-8 @@ -228,35 +277,60 @@ lint_format_bandit_checks: make pycodestyle pyflakes3 - pylint python3-dev python3-git python3-nose python3-pip python3-yaml - shellcheck + - ./hooks/pre-commit + +bandit: + image: debian:bookworm-slim + <<: *python-rules-changes + <<: *apt-template + script: + - apt-get install python3-pip - $pip install --break-system-packages bandit - - export EXITVALUE=0 - - function set_error() { export EXITVALUE=1; printf "\x1b[31mERROR `history|tail -2|head -1|cut -b 6-500`\x1b[0m\n"; } - - ./hooks/pre-commit || set_error - - bandit - -r - -ii - --ini .bandit - || set_error - - pylint --output-format=colorized --reports=n + - bandit -r -ii --ini .bandit + +pylint: + stage: lint + image: debian:bookworm-slim + <<: *python-rules-changes + <<: *apt-template + script: + - apt-get install pylint python3-pip + - $pip install --break-system-packages pylint-gitlab + - pylint --output-format=colorized,pylint_gitlab.GitlabCodeClimateReporter:pylint-report.json fdroid makebuildserver setup.py fdroidserver/*.py tests/*.py - tests/*.TestCase - || set_error - - shellcheck --exclude SC2046,SC2090 --severity=warning --color tests/run-tests - || set_error - - exit $EXITVALUE + artifacts: + reports: + codequality: pylint-report.json + when: always +shellcheck: + stage: lint + image: debian:bookworm-slim + rules: + - changes: + - .gitlab-ci.yml + - hooks/install-hooks.sh + - hooks/pre-commit + - tests/run-tests + <<: *apt-template + script: + - apt-get install shellcheck + # TODO GitLab Code Quality report https://github.com/koalaman/shellcheck/issues/3155 + - shellcheck --exclude SC2046,SC2090 --severity=warning --color + hooks/install-hooks.sh + hooks/pre-commit + tests/run-tests + # Check all the dependencies in Debian to mirror production. CVEs are # generally fixed in the latest versions in pip/pypi.org, so it isn't # so important to scan that kind of install in CI. @@ -264,10 +338,7 @@ lint_format_bandit_checks: safety: image: debian:bookworm-slim rules: - # once only:/changes: are ported to rules:, this could be removed: - - if: $CI_PIPELINE_SOURCE == "merge_request_event" - when: never - - if: $CI_PIPELINE_SOURCE == "push" && $SAFETY_API_KEY + - if: $SAFETY_API_KEY changes: - .gitlab-ci.yml - .safety-policy.yml @@ -288,8 +359,34 @@ safety: - python3 -m safety --key "$SAFETY_API_KEY" --stage cicd scan -# Run all the various linters and static analysis tools. +# TODO tests/*/*/*.yaml are not covered +yamllint: + stage: lint + image: debian:bookworm-slim + rules: + - changes: + - .gitlab-ci.yml + - .safety-policy.yml + - .yamllint + - tests/*.yml + - tests/*/*.yml + - tests/*/*/.*.yml + <<: *apt-template + variables: + LANG: C.UTF-8 + script: + - apt-get install yamllint + - yamllint + .gitlab-ci.yml + .safety-policy.yml + .yamllint + tests/*.yml + tests/*/*.yml + tests/*/*/.*.yml + + locales: + stage: lint image: debian:bookworm-slim variables: LANG: C.UTF-8 @@ -308,6 +405,7 @@ locales: black: + stage: lint image: debian:bookworm-slim <<: *apt-template script: @@ -354,14 +452,14 @@ fedora_latest: - chown -R testuser . - cd tests - su testuser --login --command - "cd `pwd`; export ANDROID_HOME=$ANDROID_HOME; fdroid=~testuser/.local/bin/fdroid ./run-tests" + "cd `pwd`; export CI=$CI ANDROID_HOME=$ANDROID_HOME; fdroid=~testuser/.local/bin/fdroid ./run-tests" macOS: tags: - saas-macos-medium-m1 - only: - - master@fdroid/fdroidserver + rules: + - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" script: - export HOMEBREW_CURL_RETRIES=10 - brew update > /dev/null @@ -372,7 +470,7 @@ macOS: - brew install --cask android-commandlinetools temurin # temurin is a JDK # test suite dependencies - - brew install dash bash coreutils gnu-sed + - brew install bash coreutils gnu-sed # TODO port tests/run-tests to POSIX and gsed, it has a couple GNU-isms like du --bytes - export PATH="$(brew --prefix fdroidserver)/libexec/bin:$(brew --prefix coreutils)/libexec/gnubin:$PATH" @@ -389,56 +487,45 @@ macOS: - echo "macOS sticks with bash 3.x because of licenses, so avoid new bash syntax" - /bin/bash --version - - /bin/bash -n gradlew-fdroid tests/run-tests - - # TODO remove the packages below once they are included in the Homebrew package - - $(brew --prefix fdroidserver)/libexec/bin/python3 -m pip install biplist oscrypto pycountry + - /bin/bash -n tests/run-tests # test fdroidserver from git with current package's dependencies - fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests gradle: - image: debian:bookworm-slim + image: debian:trixie-slim <<: *apt-template - variables: - GIT_DEPTH: 1000 + rules: + - changes: + - .gitlab-ci.yml + - makebuildserver script: - apt-get install ca-certificates git - openssh-client - python3-bs4 python3-colorama - python3-git - python3-gitlab python3-packaging python3-requests - # if this is a merge request fork, then only check if relevant files changed - - if [ "$CI_PROJECT_NAMESPACE" != "fdroid" ]; then - git fetch https://gitlab.com/fdroid/fdroidserver.git; - for f in `git diff --name-only --diff-filter=d FETCH_HEAD...HEAD`; do - test "$f" == "makebuildserver" && export CHANGED="yes"; - test "$f" == "gradlew-fdroid" && export CHANGED="yes"; - done; - test -z "$CHANGED" && exit; - fi - ./tests/gradle-release-checksums.py # Run an actual build in a simple, faked version of the buildserver guest VM. fdroid build: image: registry.gitlab.com/fdroid/fdroidserver:buildserver - only: - changes: - - .gitlab-ci.yml - - fdroidserver/build.py - - fdroidserver/common.py - - fdroidserver/exception.py - - fdroidserver/metadata.py - - fdroidserver/net.py - - fdroidserver/scanner.py - - fdroidserver/vmtools.py + rules: + - changes: + - .gitlab-ci.yml + - fdroidserver/build.py + - fdroidserver/common.py + - fdroidserver/exception.py + - fdroidserver/metadata.py + - fdroidserver/net.py + - fdroidserver/scanner.py + - fdroidserver/vmtools.py + # for the docker: job which depends on this one + - makebuildserver + - buildserver/* cache: key: "$CI_JOB_NAME" paths: @@ -474,6 +561,8 @@ fdroid build: env HOME=$home_vagrant fdroid" + - git -C $home_vagrant/gradlew-fdroid pull + - chown -R vagrant $home_vagrant - chown -R vagrant $fdroidserver/.git - chown vagrant $fdroidserver/ @@ -499,11 +588,11 @@ fdroid build: plugin_fetchsrclibs: image: debian:bookworm-slim <<: *apt-template - only: - changes: - - .gitlab-ci.yml - - examples/fdroid_fetchsrclibs.py - - fdroidserver/__main__.py + rules: + - changes: + - .gitlab-ci.yml + - examples/fdroid_fetchsrclibs.py + - fdroidserver/__main__.py script: - apt-get install curl @@ -543,8 +632,8 @@ plugin_fetchsrclibs: servergitmirrors: image: debian:bookworm-slim <<: *apt-template - only: - - master@fdroid/fdroidserver + rules: + - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" script: - apt-get install default-jdk-headless @@ -572,11 +661,11 @@ servergitmirrors: - ./tests/key-tricks.py - ssh-keyscan gitlab.com >> /root/.ssh/known_hosts - test -d /tmp/fdroid/repo || mkdir -p /tmp/fdroid/repo - - cp tests/config.py tests/keystore.jks /tmp/fdroid/ + - cp tests/config.yml tests/keystore.jks /tmp/fdroid/ - cp tests/repo/com.politedroid_6.apk /tmp/fdroid/repo/ - cd /tmp/fdroid - touch fdroid-icon.png - - printf "\nservergitmirrors = 'git@gitlab.com:fdroid/ci-test-servergitmirrors-repo.git'\n" >> config.py + - printf "\nservergitmirrors\x3a 'git@gitlab.com:fdroid/ci-test-servergitmirrors-repo.git'\n" >> config.yml - $PYTHONPATH/fdroid update --verbose --create-metadata - $PYTHONPATH/fdroid deploy --verbose - export DLURL=`grep -Eo 'https://gitlab.com/fdroid/ci-test-servergitmirrors-repo[^"]+' repo/index-v1.json` @@ -586,6 +675,7 @@ servergitmirrors: Build documentation: image: debian:bookworm-slim + <<: *python-rules-changes <<: *apt-template script: - apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver @@ -605,8 +695,8 @@ Build documentation: Windows: tags: - windows - only: - - windows + rules: + - if: $CI_COMMIT_BRANCH == "windows" script: - Import-Module "$env:ChocolateyInstall\helpers\chocolateyProfile.psm1" - choco install --no-progress -y git --force --params "/GitAndUnixToolsOnPath" @@ -617,10 +707,10 @@ Windows: - python -m pip install --upgrade babel pip setuptools - python -m pip install -e . - - $files = @(Get-ChildItem tests\*.TestCase) + - $files = @(Get-ChildItem tests\test_*.py) - foreach ($f in $files) { write-output $f; - python $f; + python -m unittest $f; if( $LASTEXITCODE -eq 0 ) { write-output "SUCCESS $f"; } else { @@ -629,15 +719,16 @@ Windows: } # these are the tests that must pass - - python tests\checkupdates.TestCase - - python tests\exception.TestCase - - python tests\import_subcommand.TestCase - - python tests\init.TestCase - - python tests\lint.TestCase - - python tests\main.TestCase - - python tests\metadata.TestCase - - python tests\rewritemeta.TestCase - - python tests\vcs.TestCase + - python -m unittest -k + checkupdates + exception + import_subcommand + test_lint + test_metadata + test_rewritemeta + test_vcs + tests.test_init + tests.test_main after_script: - Copy-Item C:\ProgramData\chocolatey\logs\chocolatey.log artifacts: @@ -656,7 +747,9 @@ pages: artifacts: paths: - public - needs: ["Build documentation"] + needs: + - job: "Build documentation" + optional: true rules: - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' # only publish pages on default (master) branch @@ -668,13 +761,12 @@ pages: docker: dependencies: - fdroid build - only: - changes: - - .gitlab-ci.yml - - makebuildserver - - buildserver/* - variables: - - $CI_COMMIT_BRANCH == "master" || $CI_PROJECT_NAMESPACE != "fdroid" + rules: + - if: $CI_COMMIT_BRANCH == "master" && $CI_PROJECT_PATH == "fdroid/fdroidserver" + changes: + - .gitlab-ci.yml + - makebuildserver + - buildserver/* image: docker:dind services: - docker:dind @@ -697,3 +789,66 @@ docker: fi - docker push $RELEASE_IMAGE - docker push $RELEASE_IMAGE-bookworm + + +# PUBLISH is the signing server. It has a very minimal manual setup. +PUBLISH: + image: debian:bookworm-backports + <<: *python-rules-changes + script: + - apt-get update + - apt-get -qy upgrade + - apt-get -qy install --no-install-recommends -t bookworm-backports + androguard + apksigner + curl + default-jdk-headless + git + gpg + gpg-agent + python3-asn1crypto + python3-defusedxml + python3-git + python3-ruamel.yaml + python3-yaml + rsync + + # Run only relevant parts of the test suite, other parts will fail + # because of this minimal base setup. + - python3 -m unittest + tests/test_gpgsign.py + tests/test_metadata.py + tests/test_publish.py + tests/test_signatures.py + tests/test_signindex.py + + - cd tests + - mkdir archive + - mkdir unsigned + - cp urzip-release-unsigned.apk unsigned/info.guardianproject.urzip_100.apk + - grep '^key.*pass' config.yml | sed 's,\x3a ,=,' > $CI_PROJECT_DIR/variables + - sed -Ei 's,^(key.*pass|keystore)\x3a.*,\1\x3a {env\x3a \1},' config.yml + - printf '\ngpghome\x3a {env\x3a gpghome}\n' >> config.yml + - | + tee --append $CI_PROJECT_DIR/variables <.json files that list all reports + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1632 + +### Fixed + +* deploy: use master branch when working complete git-mirror repo + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1666 +* update: use ctime/mtime to control _strip_and_copy_image runs + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1665 +* update: If categories.yml only has icon:, then add name: + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1659 +* update: fix handling of Triple-T 1.0.0 graphics + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1652 +* update: never execute any VCS e.g. git + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1630 +* config: lazyload environment variables in config.yml + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1645 +* config: make localized name/description/icon optional + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1649 +* lint: add repo_key_sha256 to list of valid config keys + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1643 +* build: calculate all combinations of gradle flavors + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1638 +* build: set SOURCE_DATE_EPOCH from app's git otherwise fdroiddata metadata file + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1653 +* Sync translations for all supported languages: ca cs de fr ga ja pl pt pt_BR + pt_PT ru sq tr uk zh_Hans + +### Removed + +## [2.4.0] - 2025-03-25 + +### Added + +* lint: support the base _config.yml_. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1606 + +### Fixed + +* Expand {env: foo} config syntax to be allowed any place a string is. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1610 +* Only show "unsafe permissions on config.yml" when secrets are present. +* Standardized config files on ruamel.yaml with a YAML 1.2 data format. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1611 +* Brought back error when a package has multiple package types (e.g. xapk and + apk). https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1602 +* Reworked test suite to be entirely based on Python unittest (thanks @mindston). + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1587 +* publish/signindex/gpgsign no longer load the _qrcode_ and _requests_ modules, + and can operate without them installed. +* scanner: add bun.lock as lock file of package.json + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1615 +* index: fail if user sets mirrors:isPrimary wrong + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1617 + https://gitlab.com/fdroid/fdroidserver/-/issues/1125 +* Sync translations for all supported languages: bo ca cs de es fr ga hu it ja + ko nb_NO pl pt pt_BR pt_PT ro ru sq sr sw tr uk zh_Hans zh_Hant + +### Removed + +* checkupdates: remove auto_author: config, it is no longer used. +* Purge support for the long-deprecated _config.py_ config file. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1607 + + +## [2.3.5] - 2025-01-20 + +### Fixed + +* Fix issue where APKs with v1-only signatures and targetSdkVersion < 30 could + be maliciously crafted to bypass AllowedAPKSigningKeys + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1588 +* Ignore apksigner v33.x, it has bugs verifying APKs with v3/v3.1 sigs. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1593 +* Sync translations for: ca cs de es fr ga ja pt_BR pt_PT ru sq sr uk zh_Hans + +## [2.3.4] - 2024-12-12 + +### Fixed + +* Fix localhost network tests on systems with IPv6. +* lint: only error out on missing extlib on versions not archived. + +## [2.3.3] - 2024-12-11 + +### Added + +* verify: `--clean-up-verified` to delete files used when verifying an APK if + the verification was successful. + +### Fixed + +* Support Python 3.13 in the full test suite. +* Sync translations for: ca de fr ja pl ro ru sr ta +* update: only generate _index.png_ when making _index.html_, allowing the repo + operator to set a different repo icon, e.g. not the QR Code. + +## [2.3.2] - 2024-11-26 + +### Fixed + +* install: fix downloading from GitHub Releases and Maven Central. +* Sync translations for: ca fa fr pt ru sr ta zh_Hant + +## [2.3.1] - 2024-11-25 + +### Fixed + +* Sync all translations for: cs de es fr ga pt_BR ru sq zh_Hans. +* Drop use of deprecated imghdr library to support Python 3.13. +* Install biplist and pycountry by default on macOS. +* Fixed running test suite out of dist tarball. + +## [2.3.0] - 2024-11-21 + +### Added + +* YAML 1.2 as native format for all _.yml_ files, including metadata and config. +* install: will now fetch _F-Droid.apk_ and install it via `adb`. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1546 +* scanner: scan APK Signing Block for known block types like Google Play + Signature aka "Frosting". + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1555 +* Support Rclone for deploying to many different cloud services. +* deploy: support deploying to GitHub Releases. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1471 +* scanner: support libs.versions.toml + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1526 +* Consider subdir for triple-t metadata discovery in Flutter apps. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1541 +* deploy: added `index_only:` mode for mirroring the index to small hosting + locations. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1420 +* Support publishing repos in AltStore format. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1465 +* Support indexing iOS IPA app files. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1413 +* deploy: _config/mirrors.yml_ file with support for adding per-mirror metadata, + like `countryCode:`. +* Repo's categories are now set in the config files. +* lint: check syntax of config files. +* publish: `--error-on-failed` to exit when signing/verifying fails. +* scanner: `--refresh` and `refresh_config:` to control triggering a refresh of + the rule sets. +* Terminal output colorization and `--color` argument to control it. +* New languages: Catalan (ca), Irish (ga), Japanese (ja), Serbian (sr), and + Swahili (sw). +* Support donation links from `community_bridge`, `buy_me_a_coffee`. + +### Fixed + +* Use last modified time and file size for caching data about scanned APKs + instead of SHA-256 checksum. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1542 +* `repo_web_base_url:` config for generating per-app URLs for viewing in + browsers. https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1178 +* `fdroid scanner` flags WebAssembly binary _.wasm_ files. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1562 +* Test suite as standard Python `unittest` setup (thanks @ghost.adh). +* scanner: error on dependency files without lock file. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1504 +* nightly: finding APKs in the wrong directory. (thanks @WrenIX) + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1512 +* `AllowedAPKSigningKeys` works with all single-signer APK signatures. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1466 +* Sync all translations for: cs de it ko pl pt pt_BR pt_PT ro ru sq tr uk + zh_Hans zh_Hant. +* Support Androguard 4.x. +* Support Python 3.12. + +### Removed + +* Drop all uses of _stats/known_apks.txt_ and the `update_stats:` config key. + https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1547 * The `maven:` field is now always a string, with `yes` as a legacy special value. It is no longer treated like a boolean in any case. +* scanner: jcenter is no longer an allowed Maven repo. +* build: `--reset-server` removed (thanks @gotmi1k). ## [2.2.2] - 2024-04-24 diff --git a/MANIFEST.in b/MANIFEST.in index 19f9a743..93307ace 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -20,14 +20,17 @@ include examples/template.yml include examples/Vagrantfile.yaml include gradlew-fdroid include LICENSE +include locale/ba/LC_MESSAGES/fdroidserver.po include locale/bo/LC_MESSAGES/fdroidserver.po include locale/ca/LC_MESSAGES/fdroidserver.po include locale/cs/LC_MESSAGES/fdroidserver.po include locale/de/LC_MESSAGES/fdroidserver.po include locale/es/LC_MESSAGES/fdroidserver.po include locale/fr/LC_MESSAGES/fdroidserver.po +include locale/ga/LC_MESSAGES/fdroidserver.po include locale/hu/LC_MESSAGES/fdroidserver.po include locale/it/LC_MESSAGES/fdroidserver.po +include locale/ja/LC_MESSAGES/fdroidserver.po include locale/ko/LC_MESSAGES/fdroidserver.po include locale/nb_NO/LC_MESSAGES/fdroidserver.po include locale/pl/LC_MESSAGES/fdroidserver.po @@ -48,7 +51,6 @@ include README.md include tests/aosp_testkey_debug.keystore include tests/apk.embedded_1.apk include tests/bad-unicode-*.apk -include tests/build.TestCase include tests/build-tools/17.0.0/aapt-output-com.moez.QKSMS_182.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_3.txt include tests/build-tools/17.0.0/aapt-output-com.politedroid_4.txt @@ -58,10 +60,10 @@ include tests/build-tools/17.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/17.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/17.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/17.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/17.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/17.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/17.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/17.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/18.1.1/aapt-output-com.moez.QKSMS_182.txt @@ -73,10 +75,10 @@ include tests/build-tools/18.1.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/18.1.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/18.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/18.1.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/18.1.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/18.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/18.1.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/18.1.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/19.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -88,10 +90,10 @@ include tests/build-tools/19.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/19.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/19.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/19.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/19.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/19.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/19.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/19.1.0/aapt-output-com.moez.QKSMS_182.txt @@ -103,10 +105,10 @@ include tests/build-tools/19.1.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/19.1.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/19.1.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/19.1.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/19.1.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/19.1.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/19.1.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/19.1.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/20.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -118,10 +120,10 @@ include tests/build-tools/20.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/20.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/20.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/20.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/20.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/20.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/20.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/20.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/21.1.1/aapt-output-com.moez.QKSMS_182.txt @@ -133,10 +135,10 @@ include tests/build-tools/21.1.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/21.1.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/21.1.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/21.1.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/21.1.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/21.1.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/21.1.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/21.1.2/aapt-output-com.moez.QKSMS_182.txt @@ -148,10 +150,10 @@ include tests/build-tools/21.1.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/21.1.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/21.1.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/21.1.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/21.1.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/21.1.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/21.1.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/21.1.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/22.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -163,10 +165,10 @@ include tests/build-tools/22.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/22.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/22.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/22.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/22.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/22.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/22.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/22.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -178,10 +180,10 @@ include tests/build-tools/22.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/22.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/22.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/22.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/22.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/22.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/22.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/22.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -193,10 +195,10 @@ include tests/build-tools/23.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -208,10 +210,10 @@ include tests/build-tools/23.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.2/aapt-output-com.moez.QKSMS_182.txt @@ -223,10 +225,10 @@ include tests/build-tools/23.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/23.0.3/aapt-output-com.moez.QKSMS_182.txt @@ -238,10 +240,10 @@ include tests/build-tools/23.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/23.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/23.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/23.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/23.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/23.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/23.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/23.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -253,10 +255,10 @@ include tests/build-tools/24.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -268,10 +270,10 @@ include tests/build-tools/24.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.2/aapt-output-com.moez.QKSMS_182.txt @@ -283,10 +285,10 @@ include tests/build-tools/24.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/24.0.3/aapt-output-com.moez.QKSMS_182.txt @@ -298,10 +300,10 @@ include tests/build-tools/24.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/24.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/24.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/24.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/24.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/24.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/24.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/24.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -313,10 +315,10 @@ include tests/build-tools/25.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -328,10 +330,10 @@ include tests/build-tools/25.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.2/aapt-output-com.moez.QKSMS_182.txt @@ -343,10 +345,10 @@ include tests/build-tools/25.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/25.0.3/aapt-output-com.moez.QKSMS_182.txt @@ -358,10 +360,10 @@ include tests/build-tools/25.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/25.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/25.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/25.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/25.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/25.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/25.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/25.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -373,10 +375,10 @@ include tests/build-tools/26.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -388,10 +390,10 @@ include tests/build-tools/26.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.2/aapt-output-com.moez.QKSMS_182.txt @@ -403,10 +405,10 @@ include tests/build-tools/26.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/26.0.3/aapt-output-com.moez.QKSMS_182.txt @@ -418,10 +420,10 @@ include tests/build-tools/26.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/26.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/26.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/26.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/26.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/26.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/26.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/26.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -433,10 +435,10 @@ include tests/build-tools/27.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -448,10 +450,10 @@ include tests/build-tools/27.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.2/aapt-output-com.moez.QKSMS_182.txt @@ -463,10 +465,10 @@ include tests/build-tools/27.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/27.0.3/aapt-output-com.moez.QKSMS_182.txt @@ -478,10 +480,10 @@ include tests/build-tools/27.0.3/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/27.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/27.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/27.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/27.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/27.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/27.0.3/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/27.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.0/aapt-output-com.moez.QKSMS_182.txt @@ -493,10 +495,10 @@ include tests/build-tools/28.0.0/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.0/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.0/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.0/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.0/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.0/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.0/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.0/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.1/aapt-output-com.moez.QKSMS_182.txt @@ -508,10 +510,10 @@ include tests/build-tools/28.0.1/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.1/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.1/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.1/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.1/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.1/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.1/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.1/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.2/aapt-output-com.politedroid_3.txt @@ -522,10 +524,10 @@ include tests/build-tools/28.0.2/aapt-output-duplicate.permisssions_9999999.txt include tests/build-tools/28.0.2/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.2/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.2/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.2/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.2/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.2/aapt-output-org.droidtr.keyboard_34.txt include tests/build-tools/28.0.2/aapt-output-souch.smsbypass_9.txt include tests/build-tools/28.0.3/aapt-output-com.example.test.helloworld_1.txt @@ -538,17 +540,15 @@ include tests/build-tools/28.0.3/aapt-output-info.guardianproject.urzip_100.txt include tests/build-tools/28.0.3/aapt-output-info.zwanenburg.caffeinetile_4.txt include tests/build-tools/28.0.3/aapt-output-no.min.target.sdk_987.txt include tests/build-tools/28.0.3/aapt-output-obb.main.oldversion_1444412523.txt -include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101613.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101615.txt include tests/build-tools/28.0.3/aapt-output-obb.main.twoversions_1101617.txt +include tests/build-tools/28.0.3/aapt-output-obb.mainpatch.current_1619.txt include tests/build-tools/28.0.3/aapt-output-souch.smsbypass_9.txt include tests/build-tools/generate.sh include tests/check-fdroid-apk -include tests/checkupdates.TestCase include tests/com.fake.IpaApp_1000000000001.ipa -include tests/common.TestCase -include tests/config.py +include tests/config.yml include tests/config/antiFeatures.yml include tests/config/categories.yml include tests/config/de/antiFeatures.yml @@ -567,18 +567,16 @@ include tests/config/ic_antifeature_upstreamnonfree.xml include tests/config/ro/antiFeatures.yml include tests/config/zh-rCN/antiFeatures.yml include tests/corrupt-featureGraphic.png -include tests/deploy.TestCase include tests/dummy-keystore.jks include tests/dump_internal_metadata_format.py -include tests/exception.TestCase include tests/extra/manual-vmtools-test.py include tests/funding-usernames.yaml include tests/get_android_tools_versions/android-ndk-r10e/RELEASE.TXT +include tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml +include tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties include tests/get_android_tools_versions/android-sdk/ndk/11.2.2725575/source.properties include tests/get_android_tools_versions/android-sdk/ndk/17.2.4988734/source.properties include tests/get_android_tools_versions/android-sdk/ndk/21.3.6528147/source.properties -include tests/get_android_tools_versions/android-sdk/ndk-bundle/package.xml -include tests/get_android_tools_versions/android-sdk/ndk-bundle/source.properties include tests/get_android_tools_versions/android-sdk/patcher/v4/source.properties include tests/get_android_tools_versions/android-sdk/platforms/android-30/source.properties include tests/get_android_tools_versions/android-sdk/skiaparser/1/source.properties @@ -589,10 +587,6 @@ include tests/gnupghome/secring.gpg include tests/gnupghome/trustdb.gpg include tests/gradle-maven-blocks.yaml include tests/gradle-release-checksums.py -include tests/import_subcommand.TestCase -include tests/index.TestCase -include tests/init.TestCase -include tests/install.TestCase include tests/IsMD5Disabled.java include tests/issue-1128-min-sdk-30-poc.apk include tests/issue-1128-poc1.apk @@ -600,10 +594,11 @@ include tests/issue-1128-poc2.apk include tests/issue-1128-poc3a.apk include tests/issue-1128-poc3b.apk include tests/janus.apk -include tests/keystore.jks include tests/key-tricks.py -include tests/lint.TestCase -include tests/main.TestCase +include tests/keystore.jks +include tests/metadata-rewrite-yml/app.with.special.build.params.yml +include tests/metadata-rewrite-yml/fake.ota.update.yml +include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml include tests/metadata/apk/info.guardianproject.urzip.yaml include tests/metadata/apk/org.dyndns.fules.ck.yaml include tests/metadata/app.with.special.build.params.yml @@ -621,13 +616,14 @@ include tests/metadata/dump/org.smssecure.smssecure.yaml include tests/metadata/dump/org.videolan.vlc.yaml include tests/metadata/duplicate.permisssions.yml include tests/metadata/fake.ota.update.yml +include tests/metadata/info.guardianproject.checkey.yml include tests/metadata/info.guardianproject.checkey/en-US/description.txt include tests/metadata/info.guardianproject.checkey/en-US/name.txt include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey-phone.png include tests/metadata/info.guardianproject.checkey/en-US/phoneScreenshots/checkey.png include tests/metadata/info.guardianproject.checkey/en-US/summary.txt include tests/metadata/info.guardianproject.checkey/ja-JP/name.txt -include tests/metadata/info.guardianproject.checkey.yml +include tests/metadata/info.guardianproject.urzip.yml include tests/metadata/info.guardianproject.urzip/en-US/changelogs/100.txt include tests/metadata/info.guardianproject.urzip/en-US/changelogs/default.txt include tests/metadata/info.guardianproject.urzip/en-US/full_description.txt @@ -636,31 +632,26 @@ include tests/metadata/info.guardianproject.urzip/en-US/images/icon.png include tests/metadata/info.guardianproject.urzip/en-US/short_description.txt include tests/metadata/info.guardianproject.urzip/en-US/title.txt include tests/metadata/info.guardianproject.urzip/en-US/video.txt -include tests/metadata/info.guardianproject.urzip.yml include tests/metadata/info.zwanenburg.caffeinetile.yml include tests/metadata/no.min.target.sdk.yml include tests/metadata/obb.main.oldversion.yml -include tests/metadata/obb.mainpatch.current.yml include tests/metadata/obb.main.twoversions.yml +include tests/metadata/obb.mainpatch.current.yml include tests/metadata/org.adaway.yml include tests/metadata/org.fdroid.ci.test.app.yml include tests/metadata/org.fdroid.fdroid.yml +include tests/metadata/org.maxsdkversion.yml +include tests/metadata/org.smssecure.smssecure.yml include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.RSA include tests/metadata/org.smssecure.smssecure/signatures/134/28969C09.SF include tests/metadata/org.smssecure.smssecure/signatures/134/MANIFEST.MF include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.RSA include tests/metadata/org.smssecure.smssecure/signatures/135/28969C09.SF include tests/metadata/org.smssecure.smssecure/signatures/135/MANIFEST.MF -include tests/metadata/org.smssecure.smssecure.yml include tests/metadata/org.videolan.vlc.yml include tests/metadata/raw.template.yml -include tests/metadata-rewrite-yml/app.with.special.build.params.yml -include tests/metadata-rewrite-yml/fake.ota.update.yml -include tests/metadata-rewrite-yml/org.fdroid.fdroid.yml include tests/metadata/souch.smsbypass.yml -include tests/metadata.TestCase include tests/minimal_targetsdk_30_unsigned.apk -include tests/nightly.TestCase include tests/Norway_bouvet_europe_2.obf.zip include tests/no_targetsdk_minsdk1_unsigned.apk include tests/no_targetsdk_minsdk30_unsigned.apk @@ -671,7 +662,6 @@ include tests/org.bitbucket.tickytacky.mirrormirror_3.apk include tests/org.bitbucket.tickytacky.mirrormirror_4.apk include tests/org.dyndns.fules.ck_20.apk include tests/org.sajeg.fallingblocks_3.apk -include tests/publish.TestCase include tests/repo/com.example.test.helloworld_1.apk include tests/repo/com.politedroid_3.apk include tests/repo/com.politedroid_4.apk @@ -690,16 +680,17 @@ include tests/repo/main.1434483388.obb.main.oldversion.obb include tests/repo/main.1619.obb.mainpatch.current.obb include tests/repo/no.min.target.sdk_987.apk include tests/repo/obb.main.oldversion_1444412523.apk -include tests/repo/obb.mainpatch.current_1619_another-release-key.apk -include tests/repo/obb.mainpatch.current_1619.apk -include tests/repo/obb.mainpatch.current/en-US/featureGraphic.png -include tests/repo/obb.mainpatch.current/en-US/icon.png -include tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png -include tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png include tests/repo/obb.main.twoversions_1101613.apk include tests/repo/obb.main.twoversions_1101615.apk include tests/repo/obb.main.twoversions_1101617.apk include tests/repo/obb.main.twoversions_1101617_src.tar.gz +include tests/repo/obb.mainpatch.current/en-US/featureGraphic.png +include tests/repo/obb.mainpatch.current/en-US/icon.png +include tests/repo/obb.mainpatch.current/en-US/phoneScreenshots/screenshot-main.png +include tests/repo/obb.mainpatch.current/en-US/sevenInchScreenshots/screenshot-tablet-main.png +include tests/repo/obb.mainpatch.current_1619.apk +include tests/repo/obb.mainpatch.current_1619_another-release-key.apk +include tests/repo/org.maxsdkversion_4.apk include tests/repo/org.videolan.vlc/en-US/icon.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot10.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot12.png @@ -711,16 +702,16 @@ include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot4.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot7.png include tests/repo/org.videolan.vlc/en-US/phoneScreenshots/screenshot9.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot0.png +include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot11.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot13.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot14.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot16.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot17.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot19.png -include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot1.png +include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot21.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot23.png -include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot2.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot3.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot5.png include tests/repo/org.videolan.vlc/en-US/sevenInchScreenshots/screenshot6.png @@ -729,18 +720,25 @@ include tests/repo/patch.1619.obb.mainpatch.current.obb include tests/repo/souch.smsbypass_9.apk include tests/repo/urzip-*.apk include tests/repo/v1.v2.sig_1020.apk -include tests/rewritemeta.TestCase include tests/run-tests include tests/SANAPPSI.RSA include tests/SANAPPSI.SF -include tests/scanner.TestCase -include tests/signatures.TestCase -include tests/signindex.TestCase -include tests/signindex/guardianproject.jar +include tests/shared_test_code.py include tests/signindex/guardianproject-v1.jar +include tests/signindex/guardianproject.jar include tests/signindex/testy.jar include tests/signindex/unsigned.jar include tests/source-files/at.bitfire.davdroid/build.gradle +include tests/source-files/catalog.test/app/build.gradle +include tests/source-files/catalog.test/build.gradle.kts +include tests/source-files/catalog.test/buildSrc/build.gradle.kts +include tests/source-files/catalog.test/buildSrc/settings.gradle.kts +include tests/source-files/catalog.test/buildSrc2/build.gradle.kts +include tests/source-files/catalog.test/buildSrc2/settings.gradle.kts +include tests/source-files/catalog.test/core/build.gradle +include tests/source-files/catalog.test/gradle/libs.versions.toml +include tests/source-files/catalog.test/libs.versions.toml +include tests/source-files/catalog.test/settings.gradle.kts include tests/source-files/cn.wildfirechat.chat/avenginekit/build.gradle include tests/source-files/cn.wildfirechat.chat/build.gradle include tests/source-files/cn.wildfirechat.chat/chat/build.gradle @@ -757,6 +755,11 @@ include tests/source-files/com.anpmech.launcher/app/src/main/AndroidManifest.xml include tests/source-files/com.anpmech.launcher/build.gradle include tests/source-files/com.anpmech.launcher/settings.gradle include tests/source-files/com.github.jameshnsears.quoteunquote/build.gradle +include tests/source-files/com.github.shadowsocks/core/build.gradle.kts +include tests/source-files/com.github.shadowsocks/mobile/build.gradle.kts +include tests/source-files/com.infomaniak.mail/Core/gradle/core.versions.toml +include tests/source-files/com.infomaniak.mail/gradle/libs.versions.toml +include tests/source-files/com.infomaniak.mail/settings.gradle include tests/source-files/com.integreight.onesheeld/build.gradle include tests/source-files/com.integreight.onesheeld/gradle/wrapper/gradle-wrapper.properties include tests/source-files/com.integreight.onesheeld/localeapi/build.gradle @@ -770,16 +773,21 @@ include tests/source-files/com.integreight.onesheeld/pullToRefreshlibrary/src/ma include tests/source-files/com.integreight.onesheeld/quickReturnHeader/build.gradle include tests/source-files/com.integreight.onesheeld/quickReturnHeader/src/main/AndroidManifest.xml include tests/source-files/com.integreight.onesheeld/settings.gradle -include tests/source-files/com.jens.automation2/build.gradle include tests/source-files/com.jens.automation2/app/build.gradle +include tests/source-files/com.jens.automation2/build.gradle include tests/source-files/com.kunzisoft.testcase/build.gradle -include tests/source-files/com.nextcloud.client/build.gradle +include tests/source-files/com.lolo.io.onelist/app/build.gradle.kts +include tests/source-files/com.lolo.io.onelist/build.gradle.kts +include tests/source-files/com.lolo.io.onelist/gradle/libs.versions.toml +include tests/source-files/com.lolo.io.onelist/gradle/wrapper/gradle-wrapper.properties +include tests/source-files/com.lolo.io.onelist/settings.gradle include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client.dev/src/generic/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client.dev/src/versionDev/fastlane/metadata/android/en-US/title.txt +include tests/source-files/com.nextcloud.client/build.gradle include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/full_description.txt include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client/src/generic/fastlane/metadata/android/en-US/title.txt @@ -799,21 +807,26 @@ include tests/source-files/firebase-allowlisted/app/build.gradle include tests/source-files/firebase-allowlisted/build.gradle include tests/source-files/firebase-suspect/app/build.gradle include tests/source-files/firebase-suspect/build.gradle +include tests/source-files/flavor.test/build.gradle include tests/source-files/info.guardianproject.ripple/build.gradle +include tests/source-files/lockfile.test/flutter/.dart_tool/flutter_gen/pubspec.yaml include tests/source-files/lockfile.test/flutter/pubspec.lock include tests/source-files/lockfile.test/flutter/pubspec.yaml include tests/source-files/lockfile.test/javascript/package.json include tests/source-files/lockfile.test/javascript/yarn.lock -include tests/source-files/lockfile.test/rust/subdir2/Cargo.toml include tests/source-files/lockfile.test/rust/subdir/Cargo.lock include tests/source-files/lockfile.test/rust/subdir/Cargo.toml include tests/source-files/lockfile.test/rust/subdir/subdir/subdir/Cargo.toml +include tests/source-files/lockfile.test/rust/subdir2/Cargo.toml include tests/source-files/open-keychain/open-keychain/build.gradle include tests/source-files/open-keychain/open-keychain/OpenKeychain/build.gradle include tests/source-files/org.mozilla.rocket/app/build.gradle include tests/source-files/org.noise_planet.noisecapture/app/build.gradle include tests/source-files/org.noise_planet.noisecapture/settings.gradle include tests/source-files/org.noise_planet.noisecapture/sosfilter/build.gradle +include tests/source-files/org.piepmeyer.gauguin/build.gradle.kts +include tests/source-files/org.piepmeyer.gauguin/libs.versions.toml +include tests/source-files/org.piepmeyer.gauguin/settings.gradle.kts include tests/source-files/org.tasks/app/build.gradle.kts include tests/source-files/org.tasks/build.gradle include tests/source-files/org.tasks/build.gradle.kts @@ -821,6 +834,7 @@ include tests/source-files/org.tasks/buildSrc/build.gradle.kts include tests/source-files/org.tasks/settings.gradle.kts include tests/source-files/osmandapp/osmand/build.gradle include tests/source-files/osmandapp/osmand/gradle/wrapper/gradle-wrapper.properties +include tests/source-files/OtakuWorld/build.gradle include tests/source-files/realm/react-native/android/build.gradle include tests/source-files/se.manyver/android/app/build.gradle include tests/source-files/se.manyver/android/build.gradle @@ -838,11 +852,33 @@ include tests/source-files/ut.ewh.audiometrytest/settings.gradle include tests/source-files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties include tests/source-files/Zillode/syncthing-silk/build.gradle include tests/SpeedoMeterApp.main_1.apk -include tests/stats/known_apks.txt -include tests/testcommon.py -include tests/test-gradlew-fdroid -include tests/triple-t-2/build/org.piwigo.android/app/build.gradle +include tests/test_build.py +include tests/test_checkupdates.py +include tests/test_common.py +include tests/test_deploy.py +include tests/test_exception.py +include tests/test_gradlew-fdroid +include tests/test_import_subcommand.py +include tests/test_index.py +include tests/test_init.py +include tests/test_install.py +include tests/test_lint.py +include tests/test_main.py +include tests/test_metadata.py +include tests/test_nightly.py +include tests/test_publish.py +include tests/test_rewritemeta.py +include tests/test_scanner.py +include tests/test_signatures.py +include tests/test_signindex.py +include tests/test_update.py +include tests/test_vcs.py +include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/featureGraphic/play_store_feature_graphic.png +include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/icon/icon.png +include tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/phoneScreenshots/1.png +include tests/triple-t-1-graphics/metadata/de.wivewa.dialer.yml include tests/triple-t-2/build/org.piwigo.android/app/.gitignore +include tests/triple-t-2/build/org.piwigo.android/app/build.gradle include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/constants.xml include tests/triple-t-2/build/org.piwigo.android/app/src/debug/res/values/strings.xml include tests/triple-t-2/build/org.piwigo.android/app/src/main/java/org/piwigo/PiwigoApplication.java @@ -897,14 +933,13 @@ include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/verif include tests/triple-t-multiple/build/ch.admin.bag.covidcertificate.wallet/wallet/src/main/play/listings/en-US/title.txt include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.verifier.yml include tests/triple-t-multiple/metadata/ch.admin.bag.covidcertificate.wallet.yml -include tests/update.TestCase -include tests/urzip.apk include tests/urzip-badcert.apk include tests/urzip-badsig.apk -include tests/urzip-release.apk include tests/urzip-release-unsigned.apk +include tests/urzip-release.apk +include tests/urzip.apk include tests/v2.only.sig_2.apk include tests/valid-package-names/random-package-names include tests/valid-package-names/RandomPackageNames.java include tests/valid-package-names/test.py -include tests/vcs.TestCase +include tests/__init__.py diff --git a/README.md b/README.md index adc33128..41f725cb 100644 --- a/README.md +++ b/README.md @@ -53,13 +53,13 @@ To run the full test suite: tests/run-tests -To run the tests for individual Python modules, see the _.TestCase_ files, e.g.: +To run the tests for individual Python modules, see the `tests/test_*.py` files, e.g.: - tests/metadata.TestCase + python -m unittest tests/test_metadata.py It is also possible to run individual tests: - tests/metadata.TestCase MetadataTest.test_rewrite_yaml_special_build_params + python -m unittest tests.test_metadata.MetadataTest.test_rewrite_yaml_special_build_params There is a growing test suite that has good coverage on a number of key parts of this code base. It does not yet cover all the code, and there are some parts diff --git a/buildserver/Dockerfile b/buildserver/Dockerfile index 3e863df5..27ada3f8 100644 --- a/buildserver/Dockerfile +++ b/buildserver/Dockerfile @@ -37,11 +37,22 @@ RUN useradd --create-home -s /bin/bash vagrant && echo -n 'vagrant:vagrant' | ch # # Ensure fdroidserver's dependencies are marked manual before purging # unneeded packages, otherwise, all its dependencies get purged. +# +# The official Debian docker images ship without ca-certificates, so +# TLS certificates cannot be verified until that is installed. The +# following code temporarily turns off TLS verification, and enables +# HTTPS, so at least unverified TLS is used for apt-get instead of +# plain HTTP. Once ca-certificates is installed, the CA verification +# is enabled by removing the newly created config file. This set up +# makes the initial `apt-get update` and `apt-get install` look the +# same as verified TLS to the network observer and hides the metadata. RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npath-exclude=/usr/share/doc/*\npath-include=/usr/share/doc/*/copyright\n" >/etc/dpkg/dpkg.cfg.d/01_nodoc \ && mkdir -p /usr/share/man/man1 \ + && echo 'Acquire::https::Verify-Peer "false";' > /etc/apt/apt.conf.d/99nocacertificates \ + && find /etc/apt/sources.list* -type f -exec sed -i s,http:,https:, {} \; \ && apt-get update \ && apt-get install ca-certificates \ - && sed -i 's,http:,https:,' /etc/apt/sources.list.d/debian.sources \ + && rm /etc/apt/apt.conf.d/99nocacertificates \ && apt-get upgrade \ && apt-get dist-upgrade \ && apt-get install openssh-client iproute2 python3 openssh-server sudo \ diff --git a/buildserver/Vagrantfile b/buildserver/Vagrantfile index 682c364c..61e3459a 100644 --- a/buildserver/Vagrantfile +++ b/buildserver/Vagrantfile @@ -14,7 +14,7 @@ configfile = { srvpath = Pathname.new(File.dirname(__FILE__)).realpath configpath = File.join(srvpath, "/Vagrantfile.yaml") -if File.exists? configpath +if File.exist? configpath c = YAML.load_file(configpath) if c and not c.empty? c.each do |k,v| @@ -86,7 +86,7 @@ Vagrant.configure("2") do |config| # Make sure dir exists to mount to, since buildserver/ is # automatically mounted as /vagrant in the guest VM. This is more # necessary with 9p synced folders - Dir.mkdir('cache') unless File.exists?('cache') + Dir.mkdir('cache') unless File.exist?('cache') # Root partition needs to be resized to the new allocated space config.vm.provision "shell", inline: <<-SHELL diff --git a/buildserver/provision-apt-get-install b/buildserver/provision-apt-get-install index cbb5a350..ca39c47b 100644 --- a/buildserver/provision-apt-get-install +++ b/buildserver/provision-apt-get-install @@ -104,6 +104,7 @@ apt-get upgrade apt-get update || apt-get update packages=" + androguard/bookworm-backports apksigner default-jdk-headless default-jre-headless @@ -114,6 +115,7 @@ packages=" gnupg mercurial patch + python3-magic python3-packaging rsync sdkmanager/bookworm-backports diff --git a/buildserver/provision-disable-analytics b/buildserver/provision-disable-analytics index 5be736a6..e1ec62b7 100644 --- a/buildserver/provision-disable-analytics +++ b/buildserver/provision-disable-analytics @@ -10,6 +10,6 @@ cat < $flutter_conf "enabled": false } EOF -chown -R vagrant.vagrant $flutter_conf +chown -R vagrant:vagrant $flutter_conf chmod -R 0644 $flutter_conf diff --git a/buildserver/provision-gradle b/buildserver/provision-gradle index b724202c..a282a4c5 100644 --- a/buildserver/provision-gradle +++ b/buildserver/provision-gradle @@ -25,9 +25,14 @@ fi chmod -R a+rX /opt/gradle test -e /opt/gradle/bin || mkdir -p /opt/gradle/bin -ln -fs /home/vagrant/fdroidserver/gradlew-fdroid /opt/gradle/bin/gradle -chown -h vagrant.vagrant /opt/gradle/bin/gradle -chown vagrant.vagrant /opt/gradle/versions +git clone --depth 1 https://gitlab.com/fdroid/gradlew-fdroid.git /home/vagrant/gradlew-fdroid/ +chmod 0755 /home/vagrant/gradlew-fdroid/gradlew-fdroid +chmod -R u+rwX,a+rX,go-w /home/vagrant/gradlew-fdroid/ +ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /opt/gradle/bin/gradle +ln -fs /home/vagrant/gradlew-fdroid/gradlew-fdroid /usr/local/bin/ + +chown -h vagrant:vagrant /opt/gradle/bin/gradle +chown vagrant:vagrant /opt/gradle/versions chmod 0755 /opt/gradle/versions GRADLE_HOME=/home/vagrant/.gradle @@ -44,5 +49,5 @@ systemProp.org.gradle.internal.http.connectionTimeout=600000 systemProp.org.gradle.internal.http.socketTimeout=600000 EOF -chown -R vagrant.vagrant $GRADLE_HOME/ +chown -R vagrant:vagrant $GRADLE_HOME/ chmod -R a+rX $GRADLE_HOME/ diff --git a/completion/bash-completion b/completion/bash-completion index 810355a0..57fcfd12 100644 --- a/completion/bash-completion +++ b/completion/bash-completion @@ -109,8 +109,8 @@ __complete_gpgsign() { } __complete_install() { - opts="-v -q" - lopts="--verbose --quiet --all" + opts="-v -q -a -p -n -y" + lopts="--verbose --quiet --all --color --no-color --privacy-mode --no-privacy-mode --no --yes" case "${cur}" in -*) __complete_options @@ -251,7 +251,7 @@ __complete_btlog() { __complete_mirror() { opts="-v" - lopts="--all --archive --build-logs --pgp-signatures --src-tarballs --output-dir" + lopts="--all --archive --build-logs --color --no-color --pgp-signatures --src-tarballs --output-dir" __complete_options } @@ -270,7 +270,7 @@ __complete_deploy() { __complete_signatures() { opts="-v -q" - lopts="--verbose --no-check-https" + lopts="--verbose --color --no-color --no-check-https" case "${cur}" in -*) __complete_options @@ -289,7 +289,7 @@ __complete_signindex() { __complete_init() { opts="-v -q -d" lopts="--verbose --quiet --distinguished-name --keystore - --repo-keyalias --android-home --no-prompt" + --repo-keyalias --android-home --no-prompt --color --no-color" __complete_options } diff --git a/docs/source/conf.py b/docs/source/conf.py index 382d8feb..c20542de 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -12,6 +12,7 @@ # import os import sys + sys.path.insert(0, os.path.abspath('../../fdroidserver')) # -- Project information ----------------------------------------------------- diff --git a/examples/config.yml b/examples/config.yml index f15c00da..ae4e7008 100644 --- a/examples/config.yml +++ b/examples/config.yml @@ -51,6 +51,13 @@ # Canonical URL of the repositoy, needs to end in /repo. Is is used to identity # the repo in the client, as well. # repo_url: https://MyFirstFDroidRepo.org/fdroid/repo +# +# Base URL for per-package pages on the website of this repo, +# i.e. https://f-droid.org/packages// This should be accessible +# with a browser. Setting it to null or not setting this disables the +# feature. +# repo_web_base_url: https://MyFirstFDroidRepo.org/packages/ +# # repo_name: My First F-Droid Repo Demo # repo_description: >- # This is a repository of apps to be used with F-Droid. Applications @@ -62,6 +69,7 @@ # As above, but for the archive repo. # # archive_url: https://f-droid.org/archive +# archive_web_base_url: # archive_name: My First F-Droid Archive Demo # archive_description: >- # The repository of older versions of packages from the main demo repository. @@ -297,70 +305,33 @@ # # sync_from_local_copy_dir: true +# To deploy to an AWS S3 "bucket" in the US East region, set the +# bucket name in the config, then set the environment variables +# AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY using the values from +# the AWS Management Console. See +# https://rclone.org/s3/#authentication +# +# awsbucket: myawsfdroidbucket -# To upload the repo to an Amazon S3 bucket using `fdroid deploy' -# . rclone, s3cmd and apache libcloud are the available options. -# If rclone and s3cmd are not installed, apache libcloud is used. -# To use apache libcloud, add the following options to this file -# (config.yml) + +# For extended options for syncing to cloud drive and object store +# services, `fdroid deploy' wraps Rclone. Rclone is a full featured +# sync tool for a huge variety of cloud services. Set up your services +# using `rclone config`, then specify each config name to deploy the +# awsbucket: to. Using rclone_config: overrides the default AWS S3 US +# East setup, and will only sync to the services actually specified. # -# awsbucket: myawsfdroid -# awsaccesskeyid: SEE0CHAITHEIMAUR2USA -# awssecretkey: {env: awssecretkey} -# -# In case s3cmd is installed and rclone is not installed, -# s3cmd will be the preferred sync option. -# It will delete and recreate the whole fdroid directory each time. -# To customize how s3cmd interacts with the cloud -# provider, create a 's3cfg' file next to this file (config.yml), and -# those settings will be used instead of any 'aws' variable below. -# Secrets can be fetched from environment variables to ensure that -# they are not leaked as part of this file. -# -# awsbucket: myawsfdroid -# awsaccesskeyid: SEE0CHAITHEIMAUR2USA -# awssecretkey: {env: awssecretkey} -# -# In case rclone is installed and s3cmd is not installed, -# rclone will be the preferred sync option. -# It will sync the local folders with remote folders without -# deleting anything in one go. -# To ensure success, install rclone as per -# the instructions at https://rclone.org/install/ and also configure for -# object storage services as detailed at https://rclone.org/s3/#configuration -# By default rclone uses the configuration file at ~/.config/rclone/rclone.conf -# To specify a custom configuration file, please add the full path to the -# configuration file as below +# awsbucket: myawsfdroidbucket +# rclone_config: +# - aws-sample-config +# - rclone-supported-service-config + + +# By default Rclone uses the user's default configuration file at +# ~/.config/rclone/rclone.conf To specify a custom configuration file, +# please add the full path to the configuration file as below. # # path_to_custom_rclone_config: /home/mycomputer/somedir/example.conf -# -# This setting will ignore the default rclone config found at -# ~/.config/rclone/rclone.conf -# -# Please note that rclone_config can be assigned a string or list -# -# awsbucket: myawsfdroid -# rclone_config: aws-sample-config -# -# or -# -# awsbucket: myawsfdroid -# rclone_config: [aws-sample-config, rclone-supported-service-config] -# -# In case both rclone and s3cmd are installed, the preferred sync -# tool can be specified in this file (config.yml) -# if s3cmd is preferred, set it as below -# -# s3cmd: true -# -# if rclone is preferred, set it as below -# -# rclone: true -# -# Please note that only one can be set to true at any time -# Also, in the event that both s3cmd and rclone are installed -# and both are missing from the config.yml file, the preferred -# tool will be s3cmd. # If you want to force 'fdroid server' to use a non-standard serverwebroot. @@ -393,11 +364,6 @@ # configured to allow push access (e.g. ssh key, username/password, etc) # binary_transparency_remote: git@gitlab.com:fdroid/binary-transparency-log.git -# If you want to keep the "added" and "last updated" dates for each -# app and APK in your repo, enable this. The name comes from an old -# system for tracking statistics that is no longer included. -# update_stats: true - # Set this to true to always use a build server. This saves specifying the # --server option on dedicated secure build server hosts. # build_server_always: true diff --git a/examples/fdroid_clean_repos.py b/examples/fdroid_clean_repos.py index aaedf98a..6b19cacc 100644 --- a/examples/fdroid_clean_repos.py +++ b/examples/fdroid_clean_repos.py @@ -6,7 +6,6 @@ import argparse import logging from fdroidserver import _, common, metadata - from fdroidserver.exception import VCSException fdroid_summary = 'reset app VCSs to the latest version' @@ -24,9 +23,9 @@ def main(): ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) - pkgs = common.read_pkg_args(options.appid, True) - allapps = metadata.read_metadata(pkgs) - apps = common.read_app_args(options.appid, allapps, True) + apps = common.read_app_args( + options.appid, allow_version_codes=True, sort_by_time=True + ) common.read_config() for appid, app in apps.items(): diff --git a/examples/fdroid_export_keystore_to_nitrokey.py b/examples/fdroid_export_keystore_to_nitrokey.py index 8fa81ffe..6e920a78 100644 --- a/examples/fdroid_export_keystore_to_nitrokey.py +++ b/examples/fdroid_export_keystore_to_nitrokey.py @@ -4,6 +4,7 @@ import os from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/examples/fdroid_exportkeystore.py b/examples/fdroid_exportkeystore.py index 435874a5..f2a16980 100644 --- a/examples/fdroid_exportkeystore.py +++ b/examples/fdroid_exportkeystore.py @@ -4,6 +4,7 @@ import os from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/examples/fdroid_extract_repo_pubkey.py b/examples/fdroid_extract_repo_pubkey.py index f3c51767..cb5a895c 100644 --- a/examples/fdroid_extract_repo_pubkey.py +++ b/examples/fdroid_extract_repo_pubkey.py @@ -4,6 +4,7 @@ # from argparse import ArgumentParser + from fdroidserver import common, index fdroid_summary = 'export the keystore in standard PEM format' diff --git a/examples/fdroid_fetchsrclibs.py b/examples/fdroid_fetchsrclibs.py index 299e802b..aba6f7fa 100644 --- a/examples/fdroid_fetchsrclibs.py +++ b/examples/fdroid_fetchsrclibs.py @@ -8,6 +8,7 @@ import argparse import os import pprint + from fdroidserver import _, common, metadata fdroid_summary = 'prepare the srclibs for `fdroid build --on-server`' @@ -19,9 +20,7 @@ def main(): parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]")) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) - pkgs = common.read_pkg_args(options.appid, True) - allapps = metadata.read_metadata(pkgs) - apps = common.read_app_args(options.appid, allapps, True) + apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True) common.read_config() srclib_dir = os.path.join('build', 'srclib') os.makedirs(srclib_dir, exist_ok=True) diff --git a/examples/fdroid_nitrokeyimport.py b/examples/fdroid_nitrokeyimport.py index 9b458103..d17a6186 100644 --- a/examples/fdroid_nitrokeyimport.py +++ b/examples/fdroid_nitrokeyimport.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 from argparse import ArgumentParser + from fdroidserver import common from fdroidserver.common import FDroidPopen from fdroidserver.exception import BuildException diff --git a/examples/mirror-to-mirror.sh b/examples/mirror-to-mirror.sh deleted file mode 100644 index 9c0e937b..00000000 --- a/examples/mirror-to-mirror.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -# -# This script syncs the entire repo to the primary mirrors. It is -# meant to run in a cronjob quite frequently, as often as there are -# files to send. -# -# This script expects the receiving side to have the following -# preceeding the ssh key entry in ~/.ssh/authorized_keys: -# command="rsync --server -logDtpre.iLsfx --log-format=X --delete --delay-updates . /path/to/htdocs/fdroid/",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty -# -set -e -( -flock -n 200 -set -e -cd /home/fdroid -for section in repo archive; do - echo "Started $section at `date`:" - for host in fdroid@ftp-push.lysator.liu.se fdroid@plug-mirror.rcac.purdue.edu fdroid@ftp.agdsn.de; do - set -x - # be super careful with the trailing slashes here! if one is wrong, it'll delete the entire section! - rsync --archive --delay-updates --progress --delete \ - --timeout=3600 \ - /home/fdroid/public_html/${section} \ - ${host}:/srv/fdroid-mirror.at.or.at/htdocs/fdroid/ & - set +x - done - wait -done -) 200>/var/lock/root_fdroidmirrortomirror diff --git a/fdroidserver/__init__.py b/fdroidserver/__init__.py index 9e4c197f..fdf64421 100644 --- a/fdroidserver/__init__.py +++ b/fdroidserver/__init__.py @@ -3,7 +3,6 @@ import glob import os import sys - # support running straight from git and standard installs rootpaths = [ os.path.realpath(os.path.join(os.path.dirname(__file__), '..')), @@ -15,7 +14,10 @@ rootpaths = [ localedir = None for rootpath in rootpaths: - if len(glob.glob(os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo'))) > 0: + found_mo = glob.glob( + os.path.join(rootpath, 'locale', '*', 'LC_MESSAGES', 'fdroidserver.mo') + ) + if len(found_mo) > 0: localedir = os.path.join(rootpath, 'locale') break @@ -24,39 +26,52 @@ gettext.textdomain('fdroidserver') _ = gettext.gettext -from fdroidserver.exception import (FDroidException, - MetaDataException, - VerificationException) # NOQA: E402 +from fdroidserver.exception import ( + FDroidException, + MetaDataException, + VerificationException, # NOQA: E402 +) + FDroidException # NOQA: B101 MetaDataException # NOQA: B101 VerificationException # NOQA: B101 -from fdroidserver.common import (verify_apk_signature, - genkeystore as generate_keystore) # NOQA: E402 +from fdroidserver.common import genkeystore as generate_keystore # NOQA: E402 +from fdroidserver.common import verify_apk_signature + verify_apk_signature # NOQA: B101 generate_keystore # NOQA: B101 -from fdroidserver.index import (download_repo_index, - download_repo_index_v1, - download_repo_index_v2, - get_mirror_service_urls, - make as make_index) # NOQA: E402 +from fdroidserver.index import ( + download_repo_index, + download_repo_index_v1, + download_repo_index_v2, + get_mirror_service_urls, +) +from fdroidserver.index import make as make_index # NOQA: E402 + download_repo_index # NOQA: B101 download_repo_index_v1 # NOQA: B101 download_repo_index_v2 # NOQA: B101 get_mirror_service_urls # NOQA: B101 make_index # NOQA: B101 -from fdroidserver.update import (process_apk, - process_apks, - scan_apk, - scan_repo_files) # NOQA: E402 +from fdroidserver.update import ( + process_apk, + process_apks, + scan_apk, + scan_repo_files, # NOQA: E402 +) + process_apk # NOQA: B101 process_apks # NOQA: B101 scan_apk # NOQA: B101 scan_repo_files # NOQA: B101 -from fdroidserver.deploy import (update_awsbucket, - update_servergitmirrors, - update_serverwebroots, - update_serverwebroot) # NOQA: E402 +from fdroidserver.deploy import ( + update_awsbucket, + update_servergitmirrors, + update_serverwebroot, # NOQA: E402 + update_serverwebroots, +) + update_awsbucket # NOQA: B101 update_servergitmirrors # NOQA: B101 update_serverwebroots # NOQA: B101 diff --git a/fdroidserver/__main__.py b/fdroidserver/__main__.py index 14813fa1..71c39b2c 100755 --- a/fdroidserver/__main__.py +++ b/fdroidserver/__main__.py @@ -18,20 +18,20 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import re -import sys +import importlib.metadata +import logging import os import pkgutil -import logging -import importlib.metadata - -import git -import fdroidserver.common -import fdroidserver.metadata -from fdroidserver import _ +import re +import sys from argparse import ArgumentError from collections import OrderedDict +import git + +import fdroidserver.common +import fdroidserver.metadata +from fdroidserver import _ COMMANDS = OrderedDict([ ("build", _("Build a package from source")), diff --git a/fdroidserver/_yaml.py b/fdroidserver/_yaml.py new file mode 100644 index 00000000..260f67c0 --- /dev/null +++ b/fdroidserver/_yaml.py @@ -0,0 +1,64 @@ +# Copyright (C) 2025, Hans-Christoph Steiner +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +"""Standard YAML parsing and dumping. + +YAML 1.2 is the preferred format for all data files. When loading +F-Droid formats like config.yml and .yml, YAML 1.2 is +forced, and older YAML constructs should be considered an error. + +It is OK to load and dump files in other YAML versions if they are +externally defined formats, like FUNDING.yml. In those cases, these +common instances might not be appropriate to use. + +There is a separate instance for dumping based on the "round trip" aka +"rt" mode. The "rt" mode maintains order while the "safe" mode sorts +the output. Also, yaml.version is not forced in the dumper because that +makes it write out a "%YAML 1.2" header. F-Droid's formats are +explicitly defined as YAML 1.2 and meant to be human-editable. So that +header gets in the way. + +""" + +import ruamel.yaml + +yaml = ruamel.yaml.YAML(typ='safe') +yaml.version = (1, 2) + +yaml_dumper = ruamel.yaml.YAML(typ='rt') + + +def config_dump(config, fp=None): + """Dump config data in YAML 1.2 format without headers. + + This outputs YAML in a string that is suitable for use in regexps + and string replacements, as well as complete files. It is therefore + explicitly set up to avoid writing out headers and footers. + + This is modeled after PyYAML's yaml.dump(), which can dump to a file + or return a string. + + https://yaml.dev/doc/ruamel.yaml/example/#Output_of_%60dump()%60_as_a_string + + """ + dumper = ruamel.yaml.YAML(typ='rt') + dumper.default_flow_style = False + dumper.explicit_start = False + dumper.explicit_end = False + if fp is None: + with ruamel.yaml.compat.StringIO() as fp: + dumper.dump(config, fp) + return fp.getvalue() + dumper.dump(config, fp) diff --git a/fdroidserver/apksigcopier.py b/fdroidserver/apksigcopier.py index 2ab0b8c4..f36de2eb 100644 --- a/fdroidserver/apksigcopier.py +++ b/fdroidserver/apksigcopier.py @@ -68,9 +68,18 @@ import struct import sys import zipfile import zlib - from collections import namedtuple -from typing import Any, BinaryIO, Callable, Dict, Iterable, Iterator, Optional, Tuple, Union +from typing import ( + Any, + BinaryIO, + Callable, + Dict, + Iterable, + Iterator, + Optional, + Tuple, + Union, +) __version__ = "1.1.1" NAME = "apksigcopier" diff --git a/fdroidserver/btlog.py b/fdroidserver/btlog.py index df889396..7ca3ddbf 100755 --- a/fdroidserver/btlog.py +++ b/fdroidserver/btlog.py @@ -28,22 +28,21 @@ # the F-Droid client. import collections -import defusedxml.minidom -import git import glob -import os import json import logging -import requests +import os import shutil import tempfile import zipfile from argparse import ArgumentParser from typing import Optional -from . import _ -from . import common -from . import deploy +import defusedxml.minidom +import git +import requests + +from . import _, common, deploy from .exception import FDroidException diff --git a/fdroidserver/build.py b/fdroidserver/build.py index 42a58282..2e716c10 100644 --- a/fdroidserver/build.py +++ b/fdroidserver/build.py @@ -18,31 +18,27 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import os -import shutil +import argparse import glob -import subprocess +import logging +import os import posixpath import re +import shutil +import subprocess import tarfile -import threading -import traceback -import time -import requests import tempfile -import argparse -import logging +import threading +import time +import traceback from gettext import ngettext from pathlib import Path -from . import _ -from . import common -from . import net -from . import metadata -from . import scanner -from . import vmtools +import requests + +from . import _, common, metadata, net, scanner, vmtools from .common import FDroidPopen -from .exception import FDroidException, BuildException, VCSException +from .exception import BuildException, FDroidException, VCSException try: import paramiko @@ -155,9 +151,7 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): ftp.mkdir('fdroidserver') ftp.chdir('fdroidserver') ftp.put(os.path.join(serverpath, '..', 'fdroid'), 'fdroid') - ftp.put(os.path.join(serverpath, '..', 'gradlew-fdroid'), 'gradlew-fdroid') ftp.chmod('fdroid', 0o755) # nosec B103 permissions are appropriate - ftp.chmod('gradlew-fdroid', 0o755) # nosec B103 permissions are appropriate send_dir(os.path.join(serverpath)) ftp.chdir(homedir) @@ -306,7 +300,7 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force): else: ftp.chdir(posixpath.join(homedir, 'unsigned')) apkfile = common.get_release_filename(app, build) - tarball = common.getsrcname(app, build) + tarball = common.get_src_tarball_name(app.id, build.versionCode) try: ftp.get(apkfile, os.path.join(output_dir, apkfile)) if not options.notarball: @@ -479,7 +473,7 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext logging.critical("Android NDK '%s' is not a directory!" % ndk_path) raise FDroidException() - common.set_FDroidPopen_env(build) + common.set_FDroidPopen_env(app, build) # create ..._toolsversion.log when running in builder vm if onserver: @@ -541,13 +535,13 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext if build.preassemble: gradletasks += build.preassemble - flavours = build.gradle - if flavours == ['yes']: - flavours = [] + flavors = build.gradle + if flavors == ['yes']: + flavors = [] - flavours_cmd = ''.join([transform_first_char(flav, str.upper) for flav in flavours]) + flavors_cmd = ''.join([transform_first_char(flav, str.upper) for flav in flavors]) - gradletasks += ['assemble' + flavours_cmd + 'Release'] + gradletasks += ['assemble' + flavors_cmd + 'Release'] cmd = [config['gradle']] if build.gradleprops: @@ -619,7 +613,7 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext if not options.notarball: # Build the source tarball right before we build the release... logging.info("Creating source tarball...") - tarname = common.getsrcname(app, build) + tarname = common.get_src_tarball_name(app.id, build.versionCode) tarball = tarfile.open(os.path.join(tmp_dir, tarname), "w:gz") def tarexc(t): @@ -721,8 +715,7 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext bindir = os.path.join(root_dir, 'bin') if os.path.isdir(os.path.join(build_dir, '.git')): - import git - commit_id = common.get_head_commit_id(git.repo.Repo(build_dir)) + commit_id = str(common.get_head_commit_id(build_dir)) else: commit_id = build.commit @@ -764,11 +757,11 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext # really old path os.path.join(root_dir, 'build', 'apk'), ] - # If we build with gradle flavours with gradle plugin >= 3.0 the APK will be in - # a subdirectory corresponding to the flavour command used, but with different + # If we build with gradle flavors with gradle plugin >= 3.0 the APK will be in + # a subdirectory corresponding to the flavor command used, but with different # capitalization. - if flavours_cmd: - apk_dirs.append(os.path.join(root_dir, 'build', 'outputs', 'apk', transform_first_char(flavours_cmd, str.lower), 'release')) + if flavors_cmd: + apk_dirs.append(os.path.join(root_dir, 'build', 'outputs', 'apk', transform_first_char(flavors_cmd, str.lower), 'release')) for apks_dir in apk_dirs: for apkglob in ['*-release-unsigned.apk', '*-unsigned.apk', '*.apk']: apks = glob.glob(os.path.join(apks_dir, apkglob)) @@ -1117,10 +1110,7 @@ def main(): srclib_dir = os.path.join(build_dir, 'srclib') extlib_dir = os.path.join(build_dir, 'extlib') - # Read all app and srclib metadata - pkgs = common.read_pkg_args(options.appid, True) - allapps = metadata.read_metadata(pkgs, sort_by_time=True) - apps = common.read_app_args(options.appid, allapps, True) + apps = common.read_app_args(options.appid, allow_version_codes=True, sort_by_time=True) for appid, app in list(apps.items()): if (app.get('Disabled') and not options.force) or not app.get('RepoType') or not app.get('Builds', []): diff --git a/fdroidserver/checkupdates.py b/fdroidserver/checkupdates.py index 7f2293f3..e7945910 100644 --- a/fdroidserver/checkupdates.py +++ b/fdroidserver/checkupdates.py @@ -18,26 +18,34 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import configparser +import copy +import logging import os import re -import urllib.request -import urllib.error -import time import subprocess import sys -from argparse import ArgumentParser +import time import traceback -import logging -import copy +import urllib.error import urllib.parse +import urllib.request +from argparse import ArgumentParser from pathlib import Path from typing import Optional -from . import _ -from . import common -from . import metadata -from . import net -from .exception import VCSException, NoSubmodulesException, FDroidException, MetaDataException +import git + +from . import _, common, metadata, net +from .exception import ( + FDroidException, + MetaDataException, + NoSubmodulesException, + VCSException, +) + +# https://gitlab.com/fdroid/checkupdates-runner/-/blob/1861899262a62a4ed08fa24e5449c0368dfb7617/.gitlab-ci.yml#L36 +BOT_EMAIL = 'fdroidci@bubu1.eu' def check_http(app: metadata.App) -> tuple[Optional[str], Optional[int]]: @@ -85,7 +93,7 @@ def check_http(app: metadata.App) -> tuple[Optional[str], Optional[int]]: m = re.search(codeex, page) if not m: - raise FDroidException("No RE match for version code") + raise FDroidException("No RE match for versionCode") vercode = common.version_code_string_to_int(m.group(1).strip()) if urlver != '.': @@ -205,7 +213,7 @@ def check_tags(app: metadata.App, pattern: str) -> tuple[str, int, str]: if codeex: m = re.search(codeex, filecontent) if not m: - logging.debug(f"UpdateCheckData regex {codeex} for version code" + logging.debug(f"UpdateCheckData regex {codeex} for versionCode" f" has no match in tag {tag}") continue @@ -225,7 +233,7 @@ def check_tags(app: metadata.App, pattern: str) -> tuple[str, int, str]: if verex: m = re.search(verex, filecontent) if not m: - logging.debug(f"UpdateCheckData regex {verex} for version name" + logging.debug(f"UpdateCheckData regex {verex} for versionName" f" has no match in tag {tag}") continue @@ -375,7 +383,8 @@ def dirs_with_manifest(startdir: str): A directory that contains a manifest file of an Android project, None if no directory could be found """ - for root, _dirs, files in os.walk(startdir): + for root, dirs, files in os.walk(startdir): + dirs.sort() if any(m in files for m in [ 'AndroidManifest.xml', 'pom.xml', 'build.gradle', 'build.gradle.kts']): yield Path(root) @@ -668,8 +677,6 @@ def checkupdates_app(app: metadata.App, auto: bool, commit: bool = False) -> Non if commit: logging.info("Commiting update for " + app.metadatapath) gitcmd = ["git", "commit", "-m", commitmsg] - if 'auto_author' in config: - gitcmd.extend(['--author', config['auto_author']]) gitcmd.extend(["--", app.metadatapath]) if subprocess.call(gitcmd) != 0: raise FDroidException("Git commit failed") @@ -683,6 +690,184 @@ def get_last_build_from_app(app: metadata.App) -> metadata.Build: return metadata.Build() +def get_upstream_main_branch(git_repo): + refs = list() + for ref in git_repo.remotes.upstream.refs: + if ref.name != 'upstream/HEAD': + refs.append(ref.name) + if len(refs) == 1: + return refs[0] + for name in ('upstream/main', 'upstream/master'): + if name in refs: + return name + try: + with git_repo.config_reader() as reader: + return 'upstream/%s' % reader.get_value('init', 'defaultBranch') + except configparser.NoSectionError: + return 'upstream/main' + + +def checkout_appid_branch(appid): + """Prepare the working branch named after the appid. + + This sets up everything for checkupdates_app() to run and add + commits. If there is an existing branch named after the appid, + and it has commits from users other than the checkupdates-bot, + then this will return False. Otherwise, it returns True. + + The checkupdates-runner must set the committer email address in + the git config. Then any commit with a committer or author that + does not match that will be considered to have human edits. That + email address is currently set in: + https://gitlab.com/fdroid/checkupdates-runner/-/blob/1861899262a62a4ed08fa24e5449c0368dfb7617/.gitlab-ci.yml#L36 + + """ + logging.debug(f'Creating merge request branch for {appid}') + git_repo = git.Repo.init('.') + upstream_main = get_upstream_main_branch(git_repo) + for remote in git_repo.remotes: + remote.fetch() + try: + git_repo.remotes.origin.fetch(f'{appid}:refs/remotes/origin/{appid}') + except Exception as e: + logging.debug('"%s" branch not found on origin remote:\n\t%s', appid, e) + if appid in git_repo.remotes.origin.refs: + start_point = f"origin/{appid}" + for commit in git_repo.iter_commits( + f'{upstream_main}...{start_point}', right_only=True + ): + if commit.committer.email != BOT_EMAIL or commit.author.email != BOT_EMAIL: + return False + else: + start_point = upstream_main + git_repo.git.checkout('-B', appid, start_point) + git_repo.git.rebase(upstream_main, strategy_option='ours', kill_after_timeout=120) + return True + + +def get_changes_versus_ref(git_repo, ref, f): + changes = [] + for m in re.findall( + r"^[+-].*", git_repo.git.diff(f"{ref}", '--', f), flags=re.MULTILINE + ): + if not re.match(r"^(\+\+\+|---) ", m): + changes.append(m) + return changes + + +def push_commits(branch_name='checkupdates'): + """Make git branch then push commits as merge request. + + The appid is parsed from the actual file that was changed so that + only the right branch is ever updated. + + This uses the appid as the standard branch name so that there is + only ever one open merge request per-app. If multiple apps are + included in the branch, then 'checkupdates' is used as branch + name. This is to support the old way operating, e.g. in batches. + + This uses GitLab "Push Options" to create a merge request. Git + Push Options are config data that can be sent via `git push + --push-option=... origin foo`. + + References + ---------- + * https://docs.gitlab.com/ee/user/project/push_options.html + + """ + if branch_name != "checkupdates": + if callable(getattr(git.SymbolicReference, "_check_ref_name_valid", None)): + git.SymbolicReference._check_ref_name_valid(branch_name) + + git_repo = git.Repo.init('.') + upstream_main = get_upstream_main_branch(git_repo) + files = set() + for commit in git_repo.iter_commits(f'{upstream_main}...HEAD', right_only=True): + files.update(commit.stats.files.keys()) + + files = list(files) + if len(files) == 1: + m = re.match(r'metadata/(\S+)\.yml', files[0]) + if m: + branch_name = m.group(1) # appid + if not files: + return + + # https://git-scm.com/docs/git-check-ref-format Git refname can't end with .lock + if branch_name.endswith(".lock"): + branch_name = f"{branch_name}_" + + remote = git_repo.remotes.origin + if branch_name in remote.refs: + if not get_changes_versus_ref(git_repo, f'origin/{branch_name}', files[0]): + return + + git_repo.create_head(branch_name, force=True) + push_options = [ + 'merge_request.create', + 'merge_request.remove_source_branch', + 'merge_request.title=bot: ' + git_repo.branches[branch_name].commit.summary, + 'merge_request.description=' + + '~%s checkupdates-bot run %s' % (branch_name, os.getenv('CI_JOB_URL')), + ] + + # mark as draft if there are only changes to CurrentVersion: + current_version_only = True + for m in get_changes_versus_ref(git_repo, upstream_main, files[0]): + if not re.match(r"^[-+]CurrentVersion", m): + current_version_only = False + break + if current_version_only: + push_options.append('merge_request.draft') + + progress = git.RemoteProgress() + + pushinfos = remote.push( + f"HEAD:refs/heads/{branch_name}", + progress=progress, + force=True, + set_upstream=True, + push_option=push_options, + ) + + for pushinfo in pushinfos: + logging.info(pushinfo.summary) + # Show potentially useful messages from git remote + if progress: + for line in progress.other_lines: + logging.info(line) + if pushinfo.flags & ( + git.remote.PushInfo.ERROR + | git.remote.PushInfo.REJECTED + | git.remote.PushInfo.REMOTE_FAILURE + | git.remote.PushInfo.REMOTE_REJECTED + ): + raise FDroidException( + f'{remote.url} push failed: {pushinfo.flags} {pushinfo.summary}' + ) + else: + logging.info(remote.url + ': ' + pushinfo.summary) + + +def prune_empty_appid_branches(git_repo=None, main_branch='main'): + """Remove empty branches from checkupdates-bot git remote.""" + if git_repo is None: + git_repo = git.Repo.init('.') + upstream_main = get_upstream_main_branch(git_repo) + main_branch = upstream_main.split('/')[1] + + remote = git_repo.remotes.origin + remote.update(prune=True) + merged_branches = git_repo.git().branch(remotes=True, merged=upstream_main).split() + for remote_branch in merged_branches: + if not remote_branch or '/' not in remote_branch: + continue + if remote_branch.split('/')[1] not in (main_branch, 'HEAD'): + for ref in git_repo.remotes.origin.refs: + if remote_branch == ref.name: + remote.push(':%s' % ref.remote_head, force=True) # rm remote branch + + def status_update_json(processed: list, failed: dict) -> None: """Output a JSON file with metadata about this run.""" logging.debug(_('Outputting JSON')) @@ -716,6 +901,8 @@ def main(): help=_("Only process apps with auto-updates")) parser.add_argument("--commit", action="store_true", default=False, help=_("Commit changes")) + parser.add_argument("--merge-request", action="store_true", default=False, + help=_("Commit changes, push, then make a merge request")) parser.add_argument("--allow-dirty", action="store_true", default=False, help=_("Run on git repo that has uncommitted changes")) metadata.add_metadata_arguments(parser) @@ -730,10 +917,11 @@ def main(): logging.error(_('Build metadata git repo has uncommited changes!')) sys.exit(1) - # Get all apps... - allapps = metadata.read_metadata() + if options.merge_request and not (options.appid and len(options.appid) == 1): + logging.error(_('--merge-request only runs on a single appid!')) + sys.exit(1) - apps = common.read_app_args(options.appid, allapps, False) + apps = common.read_app_args(options.appid) processed = [] failed = dict() @@ -748,7 +936,17 @@ def main(): logging.info(msg) try: - checkupdates_app(app, options.auto, options.commit) + if options.merge_request: + if not checkout_appid_branch(appid): + msg = _("...checkupdate failed for {appid} : {error}").format( + appid=appid, + error='Open merge request with human edits, skipped.', + ) + logging.warning(msg) + failed[appid] = msg + continue + + checkupdates_app(app, options.auto, options.commit or options.merge_request) processed.append(appid) except Exception as e: msg = _("...checkupdate failed for {appid} : {error}").format(appid=appid, error=e) @@ -757,6 +955,10 @@ def main(): failed[appid] = str(e) exit_code = 1 + if options.appid and options.merge_request: + push_commits() + prune_empty_appid_branches() + status_update_json(processed, failed) sys.exit(exit_code) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 87e26d3e..127976c3 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -25,53 +25,85 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# common.py is imported by all modules, so do not import third-party -# libraries here as they will become a requirement for all commands. -import difflib -from typing import List -import git -import glob -import io -import os -import sys -import re +"""Collection of functions shared by subcommands. + +This is basically the "shared library" for all the fdroid subcommands. +The contains core functionality and a number of utility functions. +This is imported by all modules, so do not import third-party +libraries here as they will become a requirement for all commands. + +Config +------ + +Parsing and using the configuration settings from config.yml is +handled here. The data format is YAML 1.2. The config has its own +supported data types: + +* Boolean (e.g. deploy_process_logs:) +* Integer (e.g. archive_older:, repo_maxage:) +* String-only (e.g. repo_name:, sdk_path:) +* Multi-String (string, list of strings, or list of dicts with + strings, e.g. serverwebroot:, mirrors:) + +String-only fields can also use a special value {env: varname}, which +is a dict with a single key 'env' and a value that is the name of the +environment variable to include. + +""" + import ast +import base64 +import copy +import difflib +import filecmp +import glob import gzip +import hashlib +import io +import itertools +import json +import logging +import operator +import os +import re import shutil +import socket import stat import subprocess -import time -import operator -import logging -import hashlib -import socket -import base64 -import yaml -import zipfile +import sys import tempfile -import json -from pathlib import Path - -import defusedxml.ElementTree as XMLElementTree - -from asn1crypto import cms +import time +import zipfile +from argparse import BooleanOptionalAction from base64 import urlsafe_b64encode from binascii import hexlify from datetime import datetime, timedelta, timezone +from pathlib import Path from queue import Queue +from typing import List +from urllib.parse import urlparse, urlsplit, urlunparse from zipfile import ZipFile +import defusedxml.ElementTree as XMLElementTree +import git +from asn1crypto import cms + import fdroidserver.metadata -import fdroidserver.lint from fdroidserver import _ -from fdroidserver.exception import FDroidException, VCSException, NoSubmodulesException, \ - BuildException, VerificationException, MetaDataException -from .asynchronousfilereader import AsynchronousFileReader -from .looseversion import LooseVersion +from fdroidserver._yaml import config_dump, yaml +from fdroidserver.exception import ( + BuildException, + FDroidException, + MetaDataException, + NoSubmodulesException, + VCSException, + VerificationException, +) from . import apksigcopier, common - +from .asynchronousfilereader import AsynchronousFileReader +from .looseversion import LooseVersion # The path to this fdroidserver distribution FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..')) @@ -82,6 +114,7 @@ DEFAULT_LOCALE = 'en-US' # this is the build-tools version, aapt has a separate version that # has to be manually set in test_aapt_version() MINIMUM_AAPT_BUILD_TOOLS_VERSION = '26.0.0' +# 33.0.x has a bug that verifies APKs it shouldn't https://gitlab.com/fdroid/fdroidserver/-/issues/1253 # 31.0.0 is the first version to support --v4-signing-enabled. # we only require 30.0.0 for now as that's the version in buster-backports, see also signindex.py # 26.0.2 is the first version recognizing md5 based signatures as valid again @@ -91,7 +124,7 @@ MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION = '30.0.0' VERCODE_OPERATION_RE = re.compile(r'^([ 0-9/*+-]|%c)+$') # A signature block file with a .DSA, .RSA, or .EC extension -SIGNATURE_BLOCK_FILE_REGEX = re.compile(r'^META-INF/.*\.(DSA|EC|RSA)$') +SIGNATURE_BLOCK_FILE_REGEX = re.compile(r'\AMETA-INF/.*\.(DSA|EC|RSA)\Z', re.DOTALL) APK_NAME_REGEX = re.compile(r'^([a-zA-Z][\w.]*)_(-?[0-9]+)_?([0-9a-f]{7})?\.apk') APK_ID_TRIPLET_REGEX = re.compile(r"^package: name='(\w[^']*)' versionCode='([^']+)' versionName='([^']*)'") STANDARD_FILE_NAME_REGEX = re.compile(r'^(\w[\w.]*)_(-?[0-9]+)\.\w+') @@ -101,9 +134,6 @@ VALID_APPLICATION_ID_REGEX = re.compile(r'''(?:^[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[ re.IGNORECASE) ANDROID_PLUGIN_REGEX = re.compile(r'''\s*(:?apply plugin:|id)\(?\s*['"](android|com\.android\.application)['"]\s*\)?''') -SETTINGS_GRADLE_REGEX = re.compile(r'settings\.gradle(?:\.kts)?') -GRADLE_SUBPROJECT_REGEX = re.compile(r'''['"]:?([^'"]+)['"]''') - MAX_VERSION_CODE = 0x7fffffff # Java's Integer.MAX_VALUE (2147483647) XMLNS_ANDROID = '{http://schemas.android.com/apk/res/android}' @@ -125,6 +155,7 @@ CONFIG_NAMES = ( RELEASECHANNELS_CONFIG_NAME, ) +CONFIG_FILE = 'config.yml' config = None options = None @@ -157,7 +188,7 @@ default_config = { 'scan_binary': False, 'ant': "ant", 'mvn3': "mvn", - 'gradle': os.path.join(FDROID_PATH, 'gradlew-fdroid'), + 'gradle': shutil.which('gradlew-fdroid'), 'sync_from_local_copy_dir': False, 'allow_disabled_algorithms': False, 'keep_when_not_allowed': False, @@ -165,7 +196,6 @@ default_config = { 'make_current_version_link': False, 'current_version_name_source': 'Name', 'deploy_process_logs': False, - 'update_stats': False, 'repo_maxage': 0, 'build_server_always': False, 'keystore': 'keystore.p12', @@ -186,7 +216,6 @@ default_config = { 'archive_name': 'My First F-Droid Archive Demo', 'archive_description': _('These are the apps that have been archived from the main repo.'), # type: ignore 'archive_older': 0, - 'lint_licenses': fdroidserver.lint.APPROVED_LICENSES, # type: ignore 'git_mirror_size_limit': 10000000000, 'scanner_signature_sources': ['suss'], } @@ -223,18 +252,60 @@ def parse_args(parser): def setup_global_opts(parser): try: # the buildserver VM might not have PIL installed from PIL import PngImagePlugin + logger = logging.getLogger(PngImagePlugin.__name__) logger.setLevel(logging.INFO) # tame the "STREAM" debug messages except ImportError: pass - parser.add_argument("-v", "--verbose", action="store_true", default=False, - help=_("Spew out even more information than normal")) - parser.add_argument("-q", "--quiet", action="store_true", default=False, - help=_("Restrict output to warnings and errors")) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + default=False, + help=_("Spew out even more information than normal"), + ) + parser.add_argument( + "-q", + "--quiet", + action="store_true", + default=False, + help=_("Restrict output to warnings and errors"), + ) + parser.add_argument( + "--color", + action=BooleanOptionalAction, + default=None, + help=_("Color the log output"), + ) -def set_console_logging(verbose=False): +class ColorFormatter(logging.Formatter): + + def __init__(self, msg): + logging.Formatter.__init__(self, msg) + + bright_black = "\x1b[90;20m" + yellow = "\x1b[33;20m" + red = "\x1b[31;20m" + bold_red = "\x1b[31;1m" + reset = "\x1b[0m" + + self.FORMATS = { + logging.DEBUG: bright_black + msg + reset, + logging.INFO: reset + msg + reset, # use default color + logging.WARNING: yellow + msg + reset, + logging.ERROR: red + msg + reset, + logging.CRITICAL: bold_red + msg + reset + } + + def format(self, record): + log_fmt = self.FORMATS.get(record.levelno) + formatter = logging.Formatter(log_fmt) + return formatter.format(record) + + +def set_console_logging(verbose=False, color=False): """Globally set logging to output nicely to the console.""" class _StdOutFilter(logging.Filter): @@ -246,13 +317,18 @@ def set_console_logging(verbose=False): else: level = logging.ERROR + if color or (color is None and sys.stdout.isatty()): + formatter = ColorFormatter + else: + formatter = logging.Formatter + stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.addFilter(_StdOutFilter()) - stdout_handler.setFormatter(logging.Formatter('%(message)s')) + stdout_handler.setFormatter(formatter('%(message)s')) stderr_handler = logging.StreamHandler(sys.stderr) stderr_handler.setLevel(logging.ERROR) - stderr_handler.setFormatter(logging.Formatter(_('ERROR: %(message)s'))) + stderr_handler.setFormatter(formatter(_('ERROR: %(message)s'))) logging.basicConfig( force=True, level=level, handlers=[stdout_handler, stderr_handler] @@ -314,7 +390,7 @@ def fill_config_defaults(thisconfig): # Expand paths (~users and $vars) def expand_path(path): - if path is None: + if not path or not isinstance(path, str): return None orig = path path = os.path.expanduser(path) @@ -369,7 +445,8 @@ def fill_config_defaults(thisconfig): if 'ipfs_cid' not in thisconfig and shutil.which('ipfs_cid'): thisconfig['ipfs_cid'] = shutil.which('ipfs_cid') - if not thisconfig.get('ipfs_cid'): + cmd = sys.argv[1] if len(sys.argv) >= 2 else '' + if cmd == 'update' and not thisconfig.get('ipfs_cid'): logging.debug(_("ipfs_cid not found, skipping CIDv1 generation")) for k in ['ndk_paths', 'java_paths']: @@ -438,6 +515,14 @@ def get_config(): return config +def get_cachedir(): + cachedir = config and config.get('cachedir') + if cachedir and os.path.exists(cachedir): + return Path(cachedir) + else: + return Path(tempfile.mkdtemp()) + + def regsub_file(pattern, repl, path): with open(path, 'rb') as f: text = f.read() @@ -466,17 +551,70 @@ def config_type_check(path, data): ) +class _Config(dict): + def __init__(self, default={}): + super(_Config, self).__init__(default) + self.loaded = {} + + def lazyget(self, key): + if key not in self.loaded: + value = super(_Config, self).__getitem__(key) + + if key == 'serverwebroot': + roots = parse_list_of_dicts(value) + rootlist = [] + for d in roots: + # since this is used with rsync, where trailing slashes have + # meaning, ensure there is always a trailing slash + rootstr = d.get('url') + if not rootstr: + logging.error('serverwebroot: has blank value!') + continue + if rootstr[-1] != '/': + rootstr += '/' + d['url'] = rootstr.replace('//', '/') + rootlist.append(d) + self.loaded[key] = rootlist + + elif key == 'servergitmirrors': + self.loaded[key] = parse_list_of_dicts(value) + + elif isinstance(value, dict) and 'env' in value and len(value) == 1: + var = value['env'] + if var in os.environ: + self.loaded[key] = os.getenv(var) + else: + logging.error( + _( + 'Environment variable {var} from {configname} is not set!' + ).format(var=value['env'], configname=key) + ) + self.loaded[key] = None + else: + self.loaded[key] = value + + return self.loaded[key] + + def __getitem__(self, key): + return self.lazyget(key) + + def get(self, key, default=None, /): + try: + return self.lazyget(key) + except KeyError: + return default + + def read_config(): """Read the repository config. - The config is read from config_file, which is in the current + The config is read from config.yml, which is in the current directory when any of the repo management commands are used. If there is a local metadata file in the git repo, then the config is not required, just use defaults. config.yml is the preferred form because no code is executed when - reading it. config.py is deprecated and supported for backwards - compatibility. + reading it. config.py is deprecated and no longer supported. config.yml requires ASCII or UTF-8 encoding because this code does not auto-detect the file's encoding. That is left up to the YAML @@ -491,33 +629,22 @@ def read_config(): return config config = {} - config_file = 'config.yml' - old_config_file = 'config.py' - if os.path.exists(config_file) and os.path.exists(old_config_file): - logging.error(_("""Conflicting config files! Using {newfile}, ignoring {oldfile}!""") - .format(oldfile=old_config_file, newfile=config_file)) - - if os.path.exists(config_file): - logging.debug(_("Reading '{config_file}'").format(config_file=config_file)) - with open(config_file, encoding='utf-8') as fp: - config = yaml.safe_load(fp) + if os.path.exists(CONFIG_FILE): + logging.debug(_("Reading '{config_file}'").format(config_file=CONFIG_FILE)) + with open(CONFIG_FILE, encoding='utf-8') as fp: + config = yaml.load(fp) if not config: config = {} - config_type_check(config_file, config) - elif os.path.exists(old_config_file): - logging.warning(_("""{oldfile} is deprecated, use {newfile}""") - .format(oldfile=old_config_file, newfile=config_file)) - with io.open(old_config_file, "rb") as fp: - code = compile(fp.read(), old_config_file, 'exec') - exec(code, None, config) # nosec TODO automatically migrate + config_type_check(CONFIG_FILE, config) - for k in ('mirrors', 'install_list', 'uninstall_list', 'serverwebroot', 'servergitroot'): - if k in config: - if not type(config[k]) in (str, list, tuple): - logging.warning( - _("'{field}' will be in random order! Use () or [] brackets if order is important!") - .format(field=k)) + old_config_file = 'config.py' + if os.path.exists(old_config_file): + logging.warning( + _("""Ignoring deprecated {oldfile}, use {newfile}!""").format( + oldfile=old_config_file, newfile=CONFIG_FILE + ) + ) # smartcardoptions must be a list since its command line args for Popen smartcardoptions = config.get('smartcardoptions') @@ -531,34 +658,9 @@ def read_config(): 'sun.security.pkcs11.SunPKCS11', '-providerArg', 'opensc-fdroid.cfg'] - if any(k in config for k in ["keystore", "keystorepass", "keypass"]): - if os.path.exists(config_file): - f = config_file - elif os.path.exists(old_config_file): - f = old_config_file - st = os.stat(f) - if st.st_mode & stat.S_IRWXG or st.st_mode & stat.S_IRWXO: - logging.warning(_("unsafe permissions on '{config_file}' (should be 0600)!") - .format(config_file=f)) - fill_config_defaults(config) - if 'serverwebroot' in config: - roots = parse_mirrors_config(config['serverwebroot']) - rootlist = [] - for d in roots: - # since this is used with rsync, where trailing slashes have - # meaning, ensure there is always a trailing slash - rootstr = d['url'] - if rootstr[-1] != '/': - rootstr += '/' - d['url'] = rootstr.replace('//', '/') - rootlist.append(d) - config['serverwebroot'] = rootlist - if 'servergitmirrors' in config: - config['servergitmirrors'] = parse_mirrors_config(config['servergitmirrors']) - limit = config['git_mirror_size_limit'] config['git_mirror_size_limit'] = parse_human_readable_size(limit) @@ -581,15 +683,7 @@ def read_config(): continue elif isinstance(dictvalue, dict): for k, v in dictvalue.items(): - if k == 'env': - env = os.getenv(v) - if env: - config[configname] = env - else: - confignames_to_delete.add(configname) - logging.error(_('Environment variable {var} from {configname} is not set!') - .format(var=k, configname=configname)) - else: + if k != 'env': confignames_to_delete.add(configname) logging.error(_('Unknown entry {key} in {configname}') .format(key=k, configname=configname)) @@ -597,19 +691,89 @@ def read_config(): for configname in confignames_to_delete: del config[configname] + if any(k in config and config.get(k) for k in ["keystorepass", "keypass"]): + st = os.stat(CONFIG_FILE) + if st.st_mode & stat.S_IRWXG or st.st_mode & stat.S_IRWXO: + logging.warning( + _("unsafe permissions on '{config_file}' (should be 0600)!").format( + config_file=CONFIG_FILE + ) + ) + + config = _Config(config) return config -def parse_mirrors_config(mirrors): - """Mirrors can be specified as a string, list of strings, or dictionary map.""" - if isinstance(mirrors, str): - return [{"url": mirrors}] - elif all(isinstance(item, str) for item in mirrors): - return [{'url': i} for i in mirrors] - elif all(isinstance(item, dict) for item in mirrors): - return mirrors +def expand_env_dict(s): + """Expand env var dict to a string value. + + {env: varName} syntax can be used to replace any string value in the + config with the value of an environment variable "varName". This + allows for secrets management when commiting the config file to a + public git repo. + + """ + if not s or type(s) not in (str, dict): + return + if isinstance(s, dict): + if 'env' not in s or len(s) > 1: + raise TypeError(_('Only accepts a single key "env"')) + var = s['env'] + s = os.getenv(var) + if not s: + logging.error( + _('Environment variable {{env: {var}}} is not set!').format(var=var) + ) + return + return os.path.expanduser(s) + + +def parse_list_of_dicts(l_of_d): + """Parse config data structure that is a list of dicts of strings. + + The value can be specified as a string, list of strings, or list of dictionary maps + where the values are strings. + + """ + if isinstance(l_of_d, str): + return [{"url": expand_env_dict(l_of_d)}] + if isinstance(l_of_d, dict): + return [{"url": expand_env_dict(l_of_d)}] + if all(isinstance(item, str) for item in l_of_d): + return [{'url': expand_env_dict(i)} for i in l_of_d] + if all(isinstance(item, dict) for item in l_of_d): + for item in l_of_d: + item['url'] = expand_env_dict(item['url']) + return l_of_d + raise TypeError(_('only accepts strings, lists, and tuples')) + + +def get_mirrors(url, filename=None): + """Get list of dict entries for mirrors, appending filename if provided.""" + # TODO use cached index if it exists + if isinstance(url, str): + url = urlsplit(url) + + if url.netloc == 'f-droid.org': + mirrors = FDROIDORG_MIRRORS else: - raise TypeError(_('only accepts strings, lists, and tuples')) + mirrors = parse_list_of_dicts(url.geturl()) + + if filename: + return append_filename_to_mirrors(filename, mirrors) + else: + return mirrors + + +def append_filename_to_mirrors(filename, mirrors): + """Append the filename to all "url" entries in the mirrors dict.""" + appended = copy.deepcopy(mirrors) + for mirror in appended: + parsed = urlparse(mirror['url']) + mirror['url'] = urlunparse( + parsed._replace(path=os.path.join(parsed.path, filename)) + ) + return appended def file_entry(filename, hash_value=None): @@ -636,7 +800,7 @@ def load_localized_config(name, repodir): if len(f.parts) == 2: locale = DEFAULT_LOCALE with open(f, encoding="utf-8") as fp: - elem = yaml.safe_load(fp) + elem = yaml.load(fp) if not isinstance(elem, dict): msg = _('{path} is not "key: value" dict, but a {datatype}!') raise TypeError(msg.format(path=f, datatype=type(elem).__name__)) @@ -650,7 +814,10 @@ def load_localized_config(name, repodir): icons_dir = os.path.join(repodir, 'icons') if not os.path.exists(icons_dir): os.makedirs(icons_dir, exist_ok=True) - shutil.copy(os.path.join("config", value), icons_dir) + src = os.path.join("config", value) + dest = os.path.join(icons_dir, os.path.basename(src)) + if not os.path.exists(dest) or not filecmp.cmp(src, dest): + shutil.copy2(src, dest) ret[afname][key][locale] = file_entry( os.path.join(icons_dir, value) ) @@ -758,7 +925,15 @@ def find_apksigner(config): if not os.path.isdir(os.path.join(build_tools_path, f)): continue try: - if LooseVersion(f) < LooseVersion(MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION): + version = LooseVersion(f) + if version >= LooseVersion('33') and version < LooseVersion('34'): + logging.warning( + _('apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring.').format( + version=version + ) + ) + continue + if version < LooseVersion(MINIMUM_APKSIGNER_BUILD_TOOLS_VERSION): logging.debug("Local Android SDK only has outdated apksigner versions") return except TypeError: @@ -871,13 +1046,13 @@ def get_local_metadata_files(): return glob.glob('.fdroid.[a-jl-z]*[a-rt-z]') -def read_pkg_args(appid_versionCode_pairs, allow_vercodes=False): +def read_pkg_args(appid_versionCode_pairs, allow_version_codes=False): """No summary. Parameters ---------- appids - arguments in the form of multiple appid:[vc] strings + arguments in the form of multiple appid:[versionCode] strings Returns ------- @@ -887,13 +1062,18 @@ def read_pkg_args(appid_versionCode_pairs, allow_vercodes=False): if not appid_versionCode_pairs: return vercodes + error = False apk_regex = re.compile(r'_(\d+)\.apk$') for p in appid_versionCode_pairs: # Convert the apk name to a appid:versioncode pair p = apk_regex.sub(r':\1', p) - if allow_vercodes and ':' in p: + if allow_version_codes and ':' in p: package, vercode = p.split(':') - vercode = version_code_string_to_int(vercode) + try: + vercode = version_code_string_to_int(vercode) + except ValueError as e: + logging.error('"%s": %s' % (p, str(e))) + error = True else: package, vercode = p, None if package not in vercodes: @@ -902,6 +1082,9 @@ def read_pkg_args(appid_versionCode_pairs, allow_vercodes=False): elif vercode and vercode not in vercodes[package]: vercodes[package] += [vercode] if vercode else [] + if error: + raise FDroidException(_("Found invalid versionCodes for some apps")) + return vercodes @@ -912,7 +1095,7 @@ def get_metadata_files(vercodes): Parameters ---------- vercodes - version codes as returned by read_pkg_args() + versionCodes as returned by read_pkg_args() Returns ------- @@ -933,7 +1116,7 @@ def get_metadata_files(vercodes): return metadatafiles -def read_app_args(appid_versionCode_pairs, allapps, allow_vercodes=False): +def read_app_args(appid_versionCode_pairs, allow_version_codes=False, sort_by_time=False): """Build a list of App instances for processing. On top of what read_pkg_args does, this returns the whole app @@ -943,7 +1126,8 @@ def read_app_args(appid_versionCode_pairs, allapps, allow_vercodes=False): returned. """ - vercodes = read_pkg_args(appid_versionCode_pairs, allow_vercodes) + vercodes = read_pkg_args(appid_versionCode_pairs, allow_version_codes) + allapps = fdroidserver.metadata.read_metadata(vercodes, sort_by_time) if not vercodes: return allapps @@ -953,11 +1137,6 @@ def read_app_args(appid_versionCode_pairs, allapps, allow_vercodes=False): if appid in vercodes: apps[appid] = app - if len(apps) != len(vercodes): - for p in vercodes: - if p not in allapps: - logging.critical(_("No such package: %s") % p) - raise FDroidException(_("Found invalid appids in arguments")) if not apps: raise FDroidException(_("No packages specified")) @@ -1030,21 +1209,50 @@ def apk_parse_release_filename(apkname): return None, None, None +def get_output_extension(build): + if build.output: + return get_file_extension(replace_build_vars(build.output, build)) + return 'apk' + + +def get_release_apk_filename(appid, versionCode): + return f"{appid}_{versionCode}.apk" + + def get_release_filename(app, build, extension=None): if extension: return "%s_%s.%s" % (app.id, build.versionCode, extension) if build.output and get_file_extension(build.output): return "%s_%s.%s" % (app.id, build.versionCode, get_file_extension(build.output)) else: - return "%s_%s.apk" % (app.id, build.versionCode) + return get_release_apk_filename(app.id, build.versionCode) def get_toolsversion_logname(app, build): return "%s_%s_toolsversion.log" % (app.id, build.versionCode) -def getsrcname(app, build): - return "%s_%s_src.tar.gz" % (app.id, build.versionCode) +def get_src_tarball_name(appid, versionCode): + return f"{appid}_{versionCode}_src.tar.gz" + + +def get_source_date_epoch(build_dir): + """Return timestamp suitable for the SOURCE_DATE_EPOCH variable. + + https://reproducible-builds.org/docs/source-date-epoch/ + + """ + try: + return git.repo.Repo(build_dir).git.log(n=1, pretty='%ct') + except Exception as e: + logging.warning('%s: %s', e.__class__.__name__, build_dir) + build_dir = Path(build_dir) + appid = build_dir.name + data_dir = build_dir.parent.parent + metadata_file = f'metadata/{appid}.yml' + if (data_dir / '.git').exists() and (data_dir / metadata_file).exists(): + repo = git.repo.Repo(data_dir) + return repo.git.log('-n1', '--pretty=%ct', '--', metadata_file) def get_build_dir(app): @@ -1062,6 +1270,19 @@ class Encoder(json.JSONEncoder): return super().default(obj) +def epoch_millis_now(): + """Get the current time in epoch milliseconds. + + This is the format returned by Java's System.currentTimeMillis(). + + Parameters + ---------- + millis + Java-style integer time since UNIX epoch in milliseconds + """ + return int(datetime.now(timezone.utc).timestamp() * 1000) + + def setup_status_output(start_timestamp): """Create the common output dictionary for public status updates.""" output = { @@ -1104,7 +1325,7 @@ def write_status_json(output, pretty=False, name=None): if not os.path.exists(status_dir): os.makedirs(status_dir) if not name: - output['endTimestamp'] = int(datetime.now(timezone.utc).timestamp() * 1000) + output['endTimestamp'] = epoch_millis_now() names = ['running', sys.argv[0].split()[1]] # fdroid subcommand else: names = [name] @@ -1119,12 +1340,29 @@ def write_status_json(output, pretty=False, name=None): rsync_status_file_to_repo(path, repo_subdir='status') -def get_head_commit_id(git_repo): - """Get git commit ID for HEAD as a str.""" +def get_head_commit_id(git_repo_dir): + """Get git commit ID for HEAD as a str. + + This only reads files, so it should be safe to use on untrusted + repos. It was created to avoid running the git executable, no + matter what. It uses a tiny subset of the git.Repo class to avoid + setting up the git executable. + + """ try: - return git_repo.head.commit.hexsha - except ValueError: - return "None" + if type(git_repo_dir) is git.Repo: + d = git_repo_dir.git_dir + else: + d = os.path.join(git_repo_dir, '.git') + repo = type( + 'Repo', + (object,), + {'common_dir': d, 'git_dir': d, 're_hexsha_only': git.Repo.re_hexsha_only}, + )() + return git.refs.symbolic.SymbolicReference.dereference_recursive(repo, 'HEAD') + except (FileNotFoundError, ValueError) as e: + msg = _("Cannot read {path}: {error}").format(path=os.getcwd(), error=str(e)) + logging.debug(msg) def setup_vcs(app): @@ -1151,6 +1389,7 @@ def getvcs(vcstype, remote, local): """ if vcstype == 'git': return vcs_git(remote, local) + logging.warning(_("RepoType {type} is deprecated, please switch to git.").format(type=vcstype)) if vcstype == 'git-svn': return vcs_gitsvn(remote, local) if vcstype == 'hg': @@ -1356,10 +1595,15 @@ class vcs_git(vcs): it! This is called as a safety check. """ - p = FDroidPopen(['git', 'rev-parse', '--show-toplevel'], cwd=self.local, output=False) + cmd = ['git', 'rev-parse', '--show-toplevel'] + p = FDroidPopen(cmd, cwd=self.local, output=False) result = p.output.rstrip() + if p.returncode > 0: + raise VCSException( + f"`{' '.join(cmd)}` failed, (in '{os.path.abspath(self.local)}') {result}" + ) if Path(result) != Path(self.local).resolve(): - raise VCSException('Repository mismatch') + raise VCSException(f"Repository mismatch ('{self.local}' != '{result}')") def gotorevisionx(self, rev): if not os.path.exists(self.local): @@ -1658,11 +1902,11 @@ class vcs_hg(vcs): self.clone_failed = True raise VCSException("Hg clone failed", p.output) else: - p = FDroidPopen(['hg', 'status', '-uS'], cwd=self.local, output=False) + p = FDroidPopen(['hg', 'status', '-uiS'], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Hg status failed", p.output) for line in p.output.splitlines(): - if not line.startswith('? '): + if not line.startswith('? ') and not line.startswith('I '): raise VCSException("Unexpected output from hg status -uS: " + line) FDroidPopen(['rm', '-rf', '--', line[2:]], cwd=self.local, output=False) if not self.refreshed: @@ -1677,16 +1921,6 @@ class vcs_hg(vcs): p = FDroidPopen(['hg', 'update', '-C', '--', rev], cwd=self.local, output=False) if p.returncode != 0: raise VCSException("Hg checkout of '%s' failed" % rev, p.output) - p = FDroidPopen(['hg', 'purge', '--all'], cwd=self.local, output=False) - # Also delete untracked files, we have to enable purge extension for that: - if "'purge' is provided by the following extension" in p.output: - with open(os.path.join(self.local, '.hg', 'hgrc'), "a") as myfile: - myfile.write("\n[extensions]\nhgext.purge=\n") - p = FDroidPopen(['hg', 'purge', '--all'], cwd=self.local, output=False) - if p.returncode != 0: - raise VCSException("HG purge failed", p.output) - elif p.returncode != 0: - raise VCSException("HG purge failed", p.output) def _gettags(self): p = FDroidPopen(['hg', 'tags', '-q'], cwd=self.local, output=False) @@ -1789,7 +2023,7 @@ def retrieve_string_singleline(app_dir, string, xmlfiles=None): return retrieve_string(app_dir, string, xmlfiles).replace('\n', ' ').strip() -def manifest_paths(app_dir, flavours): +def manifest_paths(app_dir, flavors): """Return list of existing files that will be used to find the highest vercode.""" possible_manifests = \ [Path(app_dir) / 'AndroidManifest.xml', @@ -1799,18 +2033,18 @@ def manifest_paths(app_dir, flavours): Path(app_dir) / 'build-extras.gradle', Path(app_dir) / 'build.gradle.kts'] - for flavour in flavours: - if flavour == 'yes': + for flavor in flavors: + if flavor == 'yes': continue possible_manifests.append( - Path(app_dir) / 'src' / flavour / 'AndroidManifest.xml') + Path(app_dir) / 'src' / flavor / 'AndroidManifest.xml') return [path for path in possible_manifests if path.is_file()] -def fetch_real_name(app_dir, flavours): +def fetch_real_name(app_dir, flavors): """Retrieve the package name. Returns the name, or None if not found.""" - for path in manifest_paths(app_dir, flavours): + for path in manifest_paths(app_dir, flavors): if not path.suffix == '.xml' or not path.is_file(): continue logging.debug("fetch_real_name: Checking manifest at %s" % path) @@ -1928,17 +2162,17 @@ def parse_androidmanifests(paths, app): vercode = None package = None - flavours = None + flavors = None temp_app_id = None temp_version_name = None if len(app.get('Builds', [])) > 0 and 'gradle' in app['Builds'][-1] and app['Builds'][-1].gradle: - flavours = app['Builds'][-1].gradle + flavors = app['Builds'][-1].gradle if path.suffix == '.gradle' or path.name.endswith('.gradle.kts'): with open(path, 'r', encoding='utf-8') as f: android_plugin_file = False - inside_flavour_group = 0 - inside_required_flavour = 0 + inside_flavor_group = 0 + inside_required_flavor = 0 for line in f: if gradle_comment.match(line): continue @@ -1953,8 +2187,8 @@ def parse_androidmanifests(paths, app): if matches: temp_version_name = matches - if inside_flavour_group > 0: - if inside_required_flavour > 1: + if inside_flavor_group > 0: + if inside_required_flavor > 1: matches = psearch_g(line) if matches: s = matches.group(2) @@ -1974,7 +2208,7 @@ def parse_androidmanifests(paths, app): version = matches else: - # If build.gradle contains applicationNameSuffix add it to the end of version name + # If build.gradle contains applicationNameSuffix add it to the end of versionName matches = vnssearch_g(line) if matches and temp_version_name: name_suffix = matches.group(2) @@ -1984,29 +2218,29 @@ def parse_androidmanifests(paths, app): if matches: vercode = version_code_string_to_int(matches.group(1)) - if inside_required_flavour > 0: + if inside_required_flavor > 0: if '{' in line: - inside_required_flavour += 1 + inside_required_flavor += 1 if '}' in line: - inside_required_flavour -= 1 - if inside_required_flavour == 1: - inside_required_flavour -= 1 - elif flavours: - for flavour in flavours: - if re.match(r'.*[\'"\s]{flavour}[\'"\s].*\{{.*'.format(flavour=flavour), line): - inside_required_flavour = 2 + inside_required_flavor -= 1 + if inside_required_flavor == 1: + inside_required_flavor -= 1 + elif flavors: + for flavor in flavors: + if re.match(r'.*[\'"\s]{flavor}[\'"\s].*\{{.*'.format(flavor=flavor), line): + inside_required_flavor = 2 break - if re.match(r'.*[\'"\s]{flavour}[\'"\s].*'.format(flavour=flavour), line): - inside_required_flavour = 1 + if re.match(r'.*[\'"\s]{flavor}[\'"\s].*'.format(flavor=flavor), line): + inside_required_flavor = 1 break if '{' in line: - inside_flavour_group += 1 + inside_flavor_group += 1 if '}' in line: - inside_flavour_group -= 1 + inside_flavor_group -= 1 else: if "productFlavors" in line: - inside_flavour_group = 1 + inside_flavor_group = 1 if not package: matches = psearch_g(line) if matches: @@ -2057,8 +2291,8 @@ def parse_androidmanifests(paths, app): logging.debug("..got package={0}, version={1}, vercode={2}" .format(package, version, vercode)) - # Always grab the package name and version name in case they are not - # together with the highest version code + # Always grab the package name and versionName in case they are not + # together with the highest versionCode if max_package is None and package is not None: max_package = package if max_version is None and version is not None: @@ -2120,37 +2354,6 @@ def is_strict_application_id(name): and '.' in name -def get_all_gradle_and_manifests(build_dir): - paths = [] - # TODO: Python3.6: Accepts a path-like object. - for root, dirs, files in os.walk(str(build_dir)): - for f in sorted(files): - if f == 'AndroidManifest.xml' \ - or f.endswith('.gradle') or f.endswith('.gradle.kts'): - full = Path(root) / f - paths.append(full) - return paths - - -def get_gradle_subdir(build_dir, paths): - """Get the subdir where the gradle build is based.""" - first_gradle_dir = None - for path in paths: - if not first_gradle_dir: - first_gradle_dir = path.parent.relative_to(build_dir) - if path.exists() and SETTINGS_GRADLE_REGEX.match(str(path.name)): - for m in GRADLE_SUBPROJECT_REGEX.finditer(path.read_text(encoding='utf-8')): - for f in (path.parent / m.group(1)).glob('build.gradle*'): - with f.open(encoding='utf-8') as fp: - for line in fp.readlines(): - if ANDROID_PLUGIN_REGEX.match(line): - return f.parent.relative_to(build_dir) - if first_gradle_dir and first_gradle_dir != Path('.'): - return first_gradle_dir - - return - - def parse_srclib_spec(spec): if type(spec) != str: @@ -2381,9 +2584,9 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver= with open(path, 'w', encoding='iso-8859-1') as f: f.write(props) - flavours = [] + flavors = [] if build.build_method() == 'gradle': - flavours = build.gradle + flavors = build.gradle if build.target: n = build.target.split('-')[1] @@ -2402,10 +2605,10 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver= # Remove forced debuggable flags remove_debuggable_flags(root_dir) - # Insert version code and number into the manifest if necessary + # Insert versionCode and number into the manifest if necessary if build.forceversion: - logging.info("Changing the version name") - for path in manifest_paths(root_dir, flavours): + logging.info("Changing the versionName") + for path in manifest_paths(root_dir, flavors): if not os.path.isfile(path): continue if path.suffix == '.xml': @@ -2418,8 +2621,8 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver= path) if build.forcevercode: - logging.info("Changing the version code") - for path in manifest_paths(root_dir, flavours): + logging.info("Changing the versionCode") + for path in manifest_paths(root_dir, flavors): if not path.is_file(): continue if path.suffix == '.xml': @@ -2531,17 +2734,17 @@ def getpaths_map(build_dir, globpaths): paths[p] = [r[len(str(build_dir)) + 1:] for r in glob.glob(full_path)] if not paths[p]: not_found_paths.append(p) + return paths, not_found_paths + + +def getpaths(build_dir, globpaths): + """Extend via globbing the paths from a field and return them as a set.""" + paths_map, not_found_paths = getpaths_map(build_dir, globpaths) if not_found_paths: raise FDroidException( "Some glob paths did not match any files/dirs:\n" + "\n".join(not_found_paths) ) - return paths - - -def getpaths(build_dir, globpaths): - """Extend via globbing the paths from a field and return them as a set.""" - paths_map = getpaths_map(build_dir, globpaths) paths = set() for k, v in paths_map.items(): for p in v: @@ -2584,42 +2787,19 @@ class KnownApks: this is parsed as a list from the end to allow the filename to have any combo of spaces. """ - self.path = os.path.join('stats', 'known_apks.txt') self.apks = {} - if os.path.isfile(self.path): - with open(self.path, 'r', encoding='utf-8') as f: - for line in f: - t = line.rstrip().split(' ') - if len(t) == 2: - self.apks[t[0]] = (t[1], None) - else: - appid = t[-2] - date = datetime.strptime(t[-1], '%Y-%m-%d') - filename = line[0:line.rfind(appid) - 1] - self.apks[filename] = (appid, date) - check_system_clock(date, self.path) - self.changed = False + for part in ('repo', 'archive'): + path = os.path.join(part, 'index-v2.json') + if os.path.isfile(path): + with open(path, 'r', encoding='utf-8') as f: + index = json.load(f) + for appid, data in index["packages"].items(): + for version in data["versions"].values(): + filename = version["file"]["name"][1:] + date = datetime.fromtimestamp(version["added"] // 1000, tz=timezone.utc) + self.apks[filename] = date - def writeifchanged(self): - if not self.changed: - return - - if not os.path.exists('stats'): - os.mkdir('stats') - - lst = [] - for apk, app in self.apks.items(): - appid, added = app - line = apk + ' ' + appid - if added: - line += ' ' + added.strftime('%Y-%m-%d') - lst.append(line) - - with open(self.path, 'w') as f: - for line in sorted(lst, key=natural_key): - f.write(line + '\n') - - def recordapk(self, apkName, app, default_date=None): + def recordapk(self, apkName, default_date=None): """ Record an APK (if it's new, otherwise does nothing). @@ -2630,37 +2810,9 @@ class KnownApks: """ if apkName not in self.apks: if default_date is None: - default_date = datetime.utcnow() - self.apks[apkName] = (app, default_date) - self.changed = True - _ignored, added = self.apks[apkName] - return added - - def getapp(self, apkname): - """Look up information - given the 'apkname'. - - Returns (app id, date added/None). - Or returns None for an unknown apk. - """ - if apkname in self.apks: - return self.apks[apkname] - return None - - def getlatest(self, num): - """Get the most recent 'num' apps added to the repo, as a list of package ids with the most recent first.""" - apps = {} - for apk, app in self.apks.items(): - appid, added = app - if added: - if appid in apps: - if apps[appid] > added: - apps[appid] = added - else: - apps[appid] = added - sortedapps = sorted(apps.items(), key=operator.itemgetter(1))[-num:] - lst = [app for app, _ignored in sortedapps] - lst.reverse() - return lst + default_date = datetime.now(timezone.utc) + self.apks[apkName] = default_date + return self.apks[apkName] def get_file_extension(filename): @@ -2753,9 +2905,9 @@ def is_debuggable_or_testOnly(apkfile): return False try: # these were moved in androguard 4.0 - from androguard.core.axml import AXMLParser, format_value, START_TAG + from androguard.core.axml import START_TAG, AXMLParser, format_value except ImportError: - from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG + from androguard.core.bytecodes.axml import START_TAG, AXMLParser, format_value _androguard_logging_level() with ZipFile(apkfile) as apk: @@ -2794,8 +2946,8 @@ def get_apk_id(apkfile): Returns ------- appid - version code - version name + versionCode + versionName """ try: @@ -2827,9 +2979,23 @@ def get_apk_id_androguard(apkfile): try: # these were moved in androguard 4.0 - from androguard.core.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT + from androguard.core.axml import ( + END_DOCUMENT, + END_TAG, + START_TAG, + TEXT, + AXMLParser, + format_value, + ) except ImportError: - from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT + from androguard.core.bytecodes.axml import ( + END_DOCUMENT, + END_TAG, + START_TAG, + TEXT, + AXMLParser, + format_value, + ) _androguard_logging_level() appid = None @@ -2981,7 +3147,7 @@ def FDroidPopenBytes(commands, cwd=None, envs=None, output=True, stderr_to_stdou while not stdout_reader.eof(): while not stdout_queue.empty(): line = stdout_queue.get() - if output and options.verbose: + if output and options and options.verbose: # Output directly to console sys.stderr.buffer.write(line) sys.stderr.flush() @@ -3105,12 +3271,16 @@ def remove_signing_keys(build_dir): logging.info("Cleaned %s of keysigning configs at %s" % (propfile, path)) -def set_FDroidPopen_env(build=None): +def set_FDroidPopen_env(app=None, build=None): """Set up the environment variables for the build environment. There is only a weak standard, the variables used by gradle, so also set up the most commonly used environment variables for SDK and NDK. Also, if there is no locale set, this will set the locale (e.g. LANG) to en_US.UTF-8. + + If an App instance is provided, then the SOURCE_DATE_EPOCH + environment variable will be set based on that app's source repo. + """ global env, orig_path @@ -3133,6 +3303,8 @@ def set_FDroidPopen_env(build=None): if missinglocale: env['LANG'] = 'en_US.UTF-8' + if app: + env['SOURCE_DATE_EPOCH'] = get_source_date_epoch(get_build_dir(app)) if build is not None: path = build.ndk_path() paths = orig_path.split(os.pathsep) @@ -3335,22 +3507,6 @@ def apk_signer_fingerprint(apk_path): return signer_fingerprint(cert_encoded) -def apk_signer_fingerprint_short(apk_path): - """Get 7 hex digit SHA-256 fingerprint string for the first signer from given APK. - - Parameters - ---------- - apk_path - path to APK - - Returns - ------- - first 7 chars of the standard SHA-256 signer fingerprint - - """ - return apk_signer_fingerprint(apk_path)[:7] - - def metadata_get_sigdir(appid, vercode=None): """Get signature directory for app.""" if vercode: @@ -3405,7 +3561,7 @@ def metadata_find_signing_files(appid, vercode): appid app id string vercode - app version code + app versionCode Returns ------- @@ -3654,7 +3810,9 @@ def sign_apk(unsigned_path, signed_path, keyalias): os.remove(unsigned_path) -def verify_apks(signed_apk, unsigned_apk, tmp_dir, v1_only=None): +def verify_apks( + signed_apk, unsigned_apk, tmp_dir, v1_only=None, clean_up_verified=False +): """Verify that two apks are the same. One of the inputs is signed, the other is unsigned. The signature metadata @@ -3674,6 +3832,8 @@ def verify_apks(signed_apk, unsigned_apk, tmp_dir, v1_only=None): v1_only True for v1-only signatures, False for v1 and v2 signatures, or None for autodetection + clean_up_verified + Remove any files created here if the verification succeeded. Returns ------- @@ -3710,6 +3870,9 @@ def verify_apks(signed_apk, unsigned_apk, tmp_dir, v1_only=None): if result is not None: error += '\nComparing reference APK to APK with copied signature...\n' + result return error + if clean_up_verified and os.path.exists(tmp_apk): + logging.info(f"...cleaned up {tmp_apk} after successful verification") + os.remove(tmp_apk) logging.info('...successfully verified') return None @@ -3812,11 +3975,11 @@ def verify_apk_signature(apk, min_sdk_version=None): args = [config['apksigner'], 'verify'] if min_sdk_version: args += ['--min-sdk-version=' + min_sdk_version] - if options.verbose: + if options and options.verbose: args += ['--verbose'] try: output = subprocess.check_output(args + [apk]) - if options.verbose: + if options and options.verbose: logging.debug(apk + ': ' + output.decode('utf-8')) return True except subprocess.CalledProcessError as e: @@ -3876,11 +4039,13 @@ def compare_apks(apk1, apk2, tmp_dir, log_dir=None): f.extractall(path=os.path.join(apk2dir, 'content')) if set_command_in_config('apktool'): - if subprocess.call([config['apktool'], 'd', absapk1, '--output', 'apktool'], - cwd=apk1dir) != 0: + if subprocess.call( + [config['apktool'], 'd', absapk1, '--output', 'apktool'], cwd=apk1dir + ): return "Failed to run apktool " + apk1 - if subprocess.call([config['apktool'], 'd', absapk2, '--output', 'apktool'], - cwd=apk2dir) != 0: + if subprocess.call( + [config['apktool'], 'd', absapk2, '--output', 'apktool'], cwd=apk2dir + ): return "Failed to run apktool " + apk2 p = FDroidPopen(['diff', '-r', apk1dir, apk2dir], output=False) @@ -3888,7 +4053,7 @@ def compare_apks(apk1, apk2, tmp_dir, log_dir=None): if len(lines) != 1 or 'META-INF' not in lines[0]: if set_command_in_config('meld'): p = FDroidPopen([config['meld'], apk1dir, apk2dir], output=False) - return "Unexpected diff output:\n" + p.output + return "Unexpected diff output:\n" + p.output.replace("\r", "^M") # since everything verifies, delete the comparison to keep cruft down shutil.rmtree(apk1dir) @@ -4150,7 +4315,7 @@ def get_jar_signer_certificate(pkcs7obj: cms.ContentInfo, signature_file: bytes) return first_verified_signer_info_signing_certificate -def load_stats_fdroid_signing_key_fingerprints(): +def load_publish_signer_fingerprints(): """Load signing-key fingerprints stored in file generated by fdroid publish. Returns @@ -4158,7 +4323,7 @@ def load_stats_fdroid_signing_key_fingerprints(): dict containing the signing-key fingerprints. """ - jar_file = os.path.join('stats', 'publishsigkeys.jar') + jar_file = os.path.join('repo', 'signer-index.jar') if not os.path.isfile(jar_file): return {} try: @@ -4178,11 +4343,19 @@ def load_stats_fdroid_signing_key_fingerprints(): write_to_config(config, 'repo_key_sha256') with zipfile.ZipFile(jar_file, 'r') as f: - return json.loads(str(f.read('publishsigkeys.json'), 'utf-8')) + return json.loads(str(f.read('signer-index.json'), 'utf-8')) -def write_to_config(thisconfig, key, value=None, config_file=None): - """Write a key/value to the local config.yml or config.py. +def write_config_file(config): + """Write the provided string to config.yml with the right path and encoding.""" + Path(CONFIG_FILE).write_text(config, encoding='utf-8') + + +def write_to_config(thisconfig, key, value=None): + """Write a key/value to the local config.yml. + + The config.yml is defined as YAML 1.2 in UTF-8 encoding on all + platforms. NOTE: only supports writing string variables. @@ -4195,61 +4368,42 @@ def write_to_config(thisconfig, key, value=None, config_file=None): value optional value to be written, instead of fetched from 'thisconfig' dictionary. + """ if value is None: origkey = key + '_orig' value = thisconfig[origkey] if origkey in thisconfig else thisconfig[key] - if config_file: - cfg = config_file - elif os.path.exists('config.py') and not os.path.exists('config.yml'): - cfg = 'config.py' - else: - cfg = 'config.yml' # load config file, create one if it doesn't exist - if not os.path.exists(cfg): - open(cfg, 'a').close() - logging.info("Creating empty " + cfg) - with open(cfg, 'r') as f: - lines = f.readlines() + if not os.path.exists(CONFIG_FILE): + write_config_file('') + logging.info(_("Creating empty {config_file}").format(config_file=CONFIG_FILE)) + with open(CONFIG_FILE) as fp: + lines = fp.readlines() # make sure the file ends with a carraige return if len(lines) > 0: if not lines[-1].endswith('\n'): lines[-1] += '\n' - # regex for finding and replacing python string variable - # definitions/initializations - if cfg.endswith('.py'): - pattern = re.compile(r'^[\s#]*' + key + r'\s*=\s*"[^"]*"') - repl = key + ' = "' + value + '"' - pattern2 = re.compile(r'^[\s#]*' + key + r"\s*=\s*'[^']*'") - repl2 = key + " = '" + value + "'" - else: - # assume .yml as default - pattern = re.compile(r'^[\s#]*' + key + r':.*') - repl = yaml.dump({key: value}, default_flow_style=False) - pattern2 = pattern - repl2 = repl + pattern = re.compile(r'^[\s#]*' + key + r':.*\n') + repl = config_dump({key: value}) # If we replaced this line once, we make sure won't be a # second instance of this line for this key in the document. didRepl = False # edit config file - with open(cfg, 'w') as f: + with open(CONFIG_FILE, 'w', encoding='utf-8') as f: for line in lines: - if pattern.match(line) or pattern2.match(line): + if pattern.match(line): if not didRepl: line = pattern.sub(repl, line) - line = pattern2.sub(repl2, line) f.write(line) didRepl = True else: f.write(line) if not didRepl: - f.write('\n') f.write(repl) - f.write('\n') def parse_xml(path): @@ -4269,7 +4423,7 @@ def string_is_integer(string): def version_code_string_to_int(vercode): - """Convert an version code string of any base into an int.""" + """Convert an versionCode string of any base into an int.""" # TODO: Python 3.6 allows underscores in numeric literals vercode = vercode.replace('_', '') try: @@ -4420,6 +4574,7 @@ NO_GPG_INDEX_FILES = [ "index.jar", "index.png", "index.xml", + "signer-index.jar", ] # list of index files that are signed by gpgsign.py to make a .asc file @@ -4428,6 +4583,7 @@ GPG_INDEX_FILES = [ "entry.json", "index-v1.json", "index-v2.json", + "signer-index.json", ] @@ -4701,3 +4857,103 @@ def _install_ndk(ndk): logging.info( _('Set NDK {release} ({version}) up').format(release=ndk, version=version) ) + + +def calculate_archive_policy(app, default): + """Calculate the archive policy from the metadata and default config.""" + if app.get('ArchivePolicy') is not None: + archive_policy = app['ArchivePolicy'] + else: + archive_policy = default + if app.get('VercodeOperation'): + archive_policy *= len(app['VercodeOperation']) + builds = [build for build in app.Builds if not build.disable] + if app.Builds and archive_policy > len(builds): + archive_policy = len(builds) + return archive_policy + + +def calculate_gradle_flavor_combination(flavors): + """Calculate all combinations of gradle flavors.""" + combination_lists = itertools.product(*[[flavor, ''] for flavor in flavors]) + combinations = [ + re.sub( + r' +\w', + lambda pat: pat.group(0)[-1].upper(), + ' '.join(combination_list).strip(), + ) + for combination_list in combination_lists + ] + return combinations + + +FDROIDORG_MIRRORS = [ + { + 'isPrimary': True, + 'url': 'https://f-droid.org/repo', + 'dnsA': ['65.21.79.229', '136.243.44.143'], + 'dnsAAAA': ['2a01:4f8:212:c98::2', '2a01:4f9:3b:546d::2'], + 'worksWithoutSNI': True, + }, + { + 'url': 'http://fdroidorg6cooksyluodepej4erfctzk7rrjpjbbr6wx24jh3lqyfwyd.onion/fdroid/repo' + }, + { + 'url': 'http://dotsrccccbidkzg7oc7oj4ugxrlfbt64qebyunxbrgqhxiwj3nl6vcad.onion/fdroid/repo' + }, + { + 'url': 'http://ftpfaudev4triw2vxiwzf4334e3mynz7osqgtozhbc77fixncqzbyoyd.onion/fdroid/repo' + }, + { + 'url': 'http://lysator7eknrfl47rlyxvgeamrv7ucefgrrlhk7rouv3sna25asetwid.onion/pub/fdroid/repo' + }, + { + 'url': 'http://mirror.ossplanetnyou5xifr6liw5vhzwc2g2fmmlohza25wwgnnaw65ytfsad.onion/fdroid/repo' + }, + {'url': 'https://fdroid.tetaneutral.net/fdroid/repo', 'countryCode': 'FR'}, + { + 'url': 'https://ftp.agdsn.de/fdroid/repo', + 'countryCode': 'DE', + "dnsA": ["141.30.235.39"], + "dnsAAAA": ["2a13:dd85:b00:12::1"], + "worksWithoutSNI": True, + }, + { + 'url': 'https://ftp.fau.de/fdroid/repo', + 'countryCode': 'DE', + "dnsA": ["131.188.12.211"], + "dnsAAAA": ["2001:638:a000:1021:21::1"], + "worksWithoutSNI": True, + }, + {'url': 'https://ftp.gwdg.de/pub/android/fdroid/repo', 'countryCode': 'DE'}, + { + 'url': 'https://ftp.lysator.liu.se/pub/fdroid/repo', + 'countryCode': 'SE', + "dnsA": ["130.236.254.251", "130.236.254.253"], + "dnsAAAA": ["2001:6b0:17:f0a0::fb", "2001:6b0:17:f0a0::fd"], + "worksWithoutSNI": True, + }, + {'url': 'https://mirror.cyberbits.eu/fdroid/repo', 'countryCode': 'FR'}, + { + 'url': 'https://mirror.fcix.net/fdroid/repo', + 'countryCode': 'US', + "dnsA": ["23.152.160.16"], + "dnsAAAA": ["2620:13b:0:1000::16"], + "worksWithoutSNI": True, + }, + {'url': 'https://mirror.kumi.systems/fdroid/repo', 'countryCode': 'AT'}, + {'url': 'https://mirror.level66.network/fdroid/repo', 'countryCode': 'DE'}, + {'url': 'https://mirror.ossplanet.net/fdroid/repo', 'countryCode': 'TW'}, + {'url': 'https://mirrors.dotsrc.org/fdroid/repo', 'countryCode': 'DK'}, + {'url': 'https://opencolo.mm.fcix.net/fdroid/repo', 'countryCode': 'US'}, + { + 'url': 'https://plug-mirror.rcac.purdue.edu/fdroid/repo', + 'countryCode': 'US', + "dnsA": ["128.211.151.252"], + "dnsAAAA": ["2001:18e8:804:35::1337"], + "worksWithoutSNI": True, + }, +] +FDROIDORG_FINGERPRINT = ( + '43238D512C1E5EB2D6569F4A3AFBF5523418B82E0A3ED1552770ABB9A9C9CCAB' +) diff --git a/fdroidserver/deploy.py b/fdroidserver/deploy.py index d84b4c77..f1dcce21 100644 --- a/fdroidserver/deploy.py +++ b/fdroidserver/deploy.py @@ -16,29 +16,28 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys +import configparser import glob -import hashlib import json +import logging import os +import pathlib import re +import shutil import subprocess +import sys import time import urllib -from typing import Dict, List -from git import Repo -import yaml from argparse import ArgumentParser -import logging -from shlex import split -import pathlib -import shutil +from typing import Dict, List + import git +import yaml +from git import Repo + import fdroidserver.github -from . import _ -from . import common -from . import index +from . import _, common, index from .exception import FDroidException config = None @@ -48,11 +47,10 @@ GIT_BRANCH = 'master' BINARY_TRANSPARENCY_DIR = 'binary_transparency' -AUTO_S3CFG = '.fdroid-deploy-s3cfg' -USER_S3CFG = 's3cfg' -USER_RCLONE_CONF = None REMOTE_HOSTNAME_REGEX = re.compile(r'\W*\w+\W+(\w+).*') +EMBEDDED_RCLONE_CONF = 'rclone.conf' + def _get_index_file_paths(base_dir): """Return the list of files to be synced last, since they finalize the deploy. @@ -61,8 +59,15 @@ def _get_index_file_paths(base_dir): services can take a while. So the index files should be updated last. That ensures that the package files are available when the client learns about them from the new index files. + + signer-index.* are only published in the repo/ section. + """ - return [os.path.join(base_dir, filename) for filename in common.INDEX_FILES] + return [ + os.path.join(base_dir, filename) + for filename in common.INDEX_FILES + if not (filename.startswith('signer-index.') and base_dir.endswith('archive')) + ] def _get_index_excludes(base_dir): @@ -92,399 +97,161 @@ def _remove_missing_files(files: List[str]) -> List[str]: return existing +def _generate_rclone_include_pattern(files): + """Generate a pattern for rclone's --include flag (https://rclone.org/filtering/).""" + return "{" + ",".join(sorted(set(files))) + "}" + + def update_awsbucket(repo_section, is_index_only=False, verbose=False, quiet=False): - """Upload the contents of the directory `repo_section` (including subdirectories) to the AWS S3 "bucket". + """Sync the directory `repo_section` (including subdirectories) to AWS S3 US East. - The contents of that subdir of the - bucket will first be deleted. + This is a shim function for public API compatibility. + + Requires AWS credentials set as environment variables: + https://rclone.org/s3/#authentication - Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey """ - logging.debug( - f'''Syncing "{repo_section}" to Amazon S3 bucket "{config['awsbucket']}"''' - ) - - if common.set_command_in_config('s3cmd') and common.set_command_in_config('rclone'): - logging.info( - 'Both rclone and s3cmd are installed. Checking config.yml for preference.' - ) - if config['s3cmd'] is not True and config['rclone'] is not True: - logging.warning( - 'No syncing tool set in config.yml!. Defaulting to using s3cmd' - ) - update_awsbucket_s3cmd(repo_section, is_index_only) - if config['s3cmd'] is True and config['rclone'] is True: - logging.warning( - 'Both syncing tools set in config.yml!. Defaulting to using s3cmd' - ) - update_awsbucket_s3cmd(repo_section, is_index_only) - if config['s3cmd'] is True and config['rclone'] is not True: - update_awsbucket_s3cmd(repo_section, is_index_only) - if config['rclone'] is True and config['s3cmd'] is not True: - update_remote_storage_with_rclone( - repo_section, is_index_only, verbose, quiet - ) - - elif common.set_command_in_config('s3cmd'): - update_awsbucket_s3cmd(repo_section, is_index_only) - elif common.set_command_in_config('rclone'): - update_remote_storage_with_rclone(repo_section, is_index_only, verbose, quiet) - else: - update_awsbucket_libcloud(repo_section, is_index_only) - - -def update_awsbucket_s3cmd(repo_section, is_index_only=False): - """Upload using the CLI tool s3cmd, which provides rsync-like sync. - - The upload is done in multiple passes to reduce the chance of - interfering with an existing client-server interaction. In the - first pass, only new files are uploaded. In the second pass, - changed files are uploaded, overwriting what is on the server. On - the third/last pass, the indexes are uploaded, and any removed - files are deleted from the server. The last pass is the only pass - to use a full MD5 checksum of all files to detect changes. - """ - logging.debug(_('Using s3cmd to sync with: {url}').format(url=config['awsbucket'])) - - if os.path.exists(USER_S3CFG): - logging.info(_('Using "{path}" for configuring s3cmd.').format(path=USER_S3CFG)) - configfilename = USER_S3CFG - else: - fd = os.open(AUTO_S3CFG, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600) - logging.debug( - _('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG) - ) - os.write(fd, '[default]\n'.encode('utf-8')) - os.write( - fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8') - ) - os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8')) - os.close(fd) - configfilename = AUTO_S3CFG - - s3bucketurl = 's3://' + config['awsbucket'] - s3cmd = [config['s3cmd'], '--config=' + configfilename] - if subprocess.call(s3cmd + ['info', s3bucketurl]) != 0: - logging.warning(_('Creating new S3 bucket: {url}').format(url=s3bucketurl)) - if subprocess.call(s3cmd + ['mb', s3bucketurl]) != 0: - logging.error( - _('Failed to create S3 bucket: {url}').format(url=s3bucketurl) - ) - raise FDroidException() - - s3cmd_sync = s3cmd + ['sync', '--acl-public'] - options = common.get_options() - if options and options.verbose: - s3cmd_sync += ['--verbose'] - if options and options.quiet: - s3cmd_sync += ['--quiet'] - - s3url = s3bucketurl + '/fdroid/' - - logging.debug( - _('s3cmd sync indexes {path} to {url} and delete').format( - path=repo_section, url=s3url - ) - ) - - if is_index_only: - logging.debug( - _('s3cmd syncs indexes from {path} to {url} and deletes removed').format( - path=repo_section, url=s3url - ) - ) - sync_indexes_flags = [] - sync_indexes_flags.extend(_get_index_includes(repo_section)) - sync_indexes_flags.append('--delete-removed') - sync_indexes_flags.append('--delete-after') - if options.no_checksum: - sync_indexes_flags.append('--no-check-md5') - else: - sync_indexes_flags.append('--check-md5') - returncode = subprocess.call( - s3cmd_sync + sync_indexes_flags + [repo_section, s3url] - ) - if returncode != 0: - raise FDroidException() - else: - logging.debug('s3cmd sync new files in ' + repo_section + ' to ' + s3url) - logging.debug(_('Running first pass with MD5 checking disabled')) - excludes = _get_index_excludes(repo_section) - returncode = subprocess.call( - s3cmd_sync - + excludes - + ['--no-check-md5', '--skip-existing', repo_section, s3url] - ) - if returncode != 0: - raise FDroidException() - logging.debug('s3cmd sync all files in ' + repo_section + ' to ' + s3url) - returncode = subprocess.call( - s3cmd_sync + excludes + ['--no-check-md5', repo_section, s3url] - ) - if returncode != 0: - raise FDroidException() - - logging.debug( - _('s3cmd sync indexes {path} to {url} and delete').format( - path=repo_section, url=s3url - ) - ) - s3cmd_sync.append('--delete-removed') - s3cmd_sync.append('--delete-after') - if options.no_checksum: - s3cmd_sync.append('--no-check-md5') - else: - s3cmd_sync.append('--check-md5') - if subprocess.call(s3cmd_sync + [repo_section, s3url]) != 0: - raise FDroidException() + update_remote_storage_with_rclone(repo_section, is_index_only, verbose, quiet) def update_remote_storage_with_rclone( - repo_section, is_index_only=False, verbose=False, quiet=False + repo_section, + awsbucket, + is_index_only=False, + verbose=False, + quiet=False, + checksum=False, ): - """ - Upload fdroid repo folder to remote storage using rclone sync. + """Sync the directory `repo_section` (including subdirectories) to configed cloud services. Rclone sync can send the files to any supported remote storage - service once without numerous polling. - If remote storage is s3 e.g aws s3, wasabi, filebase then path will be - bucket_name/fdroid/repo where bucket_name will be an s3 bucket - If remote storage is storage drive/sftp e.g google drive, rsync.net - the new path will be bucket_name/fdroid/repo where bucket_name - will be a folder + service once without numerous polling. If remote storage is S3 e.g + AWS S3, Wasabi, Filebase, etc, then path will be + bucket_name/fdroid/repo where bucket_name will be an S3 bucket. If + remote storage is storage drive/sftp e.g google drive, rsync.net the + new path will be bucket_name/fdroid/repo where bucket_name will be a + folder + + See https://rclone.org/docs/#config-config-file + + rclone filtering works differently than rsync. For example, + "--include" implies "--exclude **" at the end of an rclone internal + filter list. + + If rclone.conf is in the root of the repo, then it will be preferred + over the rclone default config paths. - Better than the s3cmd command as it does the syncing in one command - Check https://rclone.org/docs/#config-config-file (optional config file) """ - logging.debug(_('Using rclone to sync with: {url}').format(url=config['awsbucket'])) + logging.debug(_('Using rclone to sync to "{name}"').format(name=awsbucket)) - if config.get('path_to_custom_rclone_config') is not None: - USER_RCLONE_CONF = config['path_to_custom_rclone_config'] - if os.path.exists(USER_RCLONE_CONF): - logging.info("'path_to_custom_rclone_config' found in config.yml") - logging.info( - _('Using "{path}" for syncing with remote storage.').format( - path=USER_RCLONE_CONF + rclone_config = config.get('rclone_config', []) + if rclone_config and isinstance(rclone_config, str): + rclone_config = [rclone_config] + + path = config.get('path_to_custom_rclone_config') + if path: + if not os.path.exists(path): + logging.error( + _('path_to_custom_rclone_config: "{path}" does not exist!').format( + path=path ) ) - configfilename = USER_RCLONE_CONF - else: - logging.info('Custom configuration not found.') - logging.info( - 'Using default configuration at {}'.format( - subprocess.check_output(split("rclone config file")).decode("utf-8") - ) - ) - configfilename = None + sys.exit(1) + configfilename = path + elif os.path.exists(EMBEDDED_RCLONE_CONF): + path = EMBEDDED_RCLONE_CONF # in this case, only for display + configfilename = EMBEDDED_RCLONE_CONF + if not rclone_config: + raise FDroidException(_("'rclone_config' must be set in config.yml!")) else: - logging.warning("'path_to_custom_rclone_config' not found in config.yml") - logging.info('Custom configuration not found.') - logging.info( - 'Using default configuration at {}'.format( - subprocess.check_output(split("rclone config file")).decode("utf-8") - ) - ) configfilename = None + output = subprocess.check_output(['rclone', 'config', 'file'], text=True) + default_config_path = output.split('\n')[-2] + if os.path.exists(default_config_path): + path = default_config_path + if path: + logging.info(_('Using "{path}" for rclone config.').format(path=path)) upload_dir = 'fdroid/' + repo_section - if not config.get('rclone_config') or not config.get('awsbucket'): - raise FDroidException( - _('To use rclone, rclone_config and awsbucket must be set in config.yml!') + if not rclone_config: + env = os.environ + # Check both canonical and backup names, but only tell user about canonical. + if not env.get("AWS_SECRET_ACCESS_KEY") and not env.get("AWS_SECRET_KEY"): + raise FDroidException( + _( + """"AWS_SECRET_ACCESS_KEY" must be set as an environmental variable!""" + ) + ) + if not env.get("AWS_ACCESS_KEY_ID") and not env.get('AWS_ACCESS_KEY'): + raise FDroidException( + _(""""AWS_ACCESS_KEY_ID" must be set as an environmental variable!""") + ) + + default_remote = "AWS-S3-US-East-1" + env_rclone_config = configparser.ConfigParser() + env_rclone_config.add_section(default_remote) + env_rclone_config.set( + default_remote, + '; = This file is auto-generated by fdroid deploy, do not edit!', + '', ) + env_rclone_config.set(default_remote, "type", "s3") + env_rclone_config.set(default_remote, "provider", "AWS") + env_rclone_config.set(default_remote, "region", "us-east-1") + env_rclone_config.set(default_remote, "env_auth", "true") - if is_index_only: - sources = _get_index_file_paths(repo_section) - sources = _remove_missing_files(sources) - else: - sources = [repo_section] + configfilename = ".fdroid-deploy-rclone.conf" + with open(configfilename, "w", encoding="utf-8") as autoconfigfile: + env_rclone_config.write(autoconfigfile) + rclone_config = [default_remote] - for source in sources: - if isinstance(config['rclone_config'], str): - rclone_sync_command = ( - 'rclone sync ' - + source - + ' ' - + config['rclone_config'] - + ':' - + config['awsbucket'] - + '/' - + upload_dir - ) + rclone_sync_command = ['rclone', 'sync', '--delete-after'] + if configfilename: + rclone_sync_command += ['--config', configfilename] - rclone_sync_command = split(rclone_sync_command) + if checksum: + rclone_sync_command.append('--checksum') - if verbose: - rclone_sync_command += ['--verbose'] - elif quiet: - rclone_sync_command += ['--quiet'] + if verbose: + rclone_sync_command += ['--verbose'] + elif quiet: + rclone_sync_command += ['--quiet'] - if configfilename: - rclone_sync_command += split('--config=' + configfilename) - - complete_remote_path = ( - config['rclone_config'] + ':' + config['awsbucket'] + '/' + upload_dir - ) - - logging.debug( - "rclone sync all files in " + source + ' to ' + complete_remote_path - ) - - if subprocess.call(rclone_sync_command) != 0: + # TODO copying update_serverwebroot rsync algo + for remote_config in rclone_config: + complete_remote_path = f'{remote_config}:{awsbucket}/{upload_dir}' + logging.info(f'rclone sync to {complete_remote_path}') + if is_index_only: + index_only_files = common.INDEX_FILES + ['diff/*.*'] + include_pattern = _generate_rclone_include_pattern(index_only_files) + cmd = rclone_sync_command + [ + '--include', + include_pattern, + '--delete-excluded', + repo_section, + complete_remote_path, + ] + logging.info(cmd) + if subprocess.call(cmd) != 0: raise FDroidException() - - if isinstance(config['rclone_config'], list): - for remote_config in config['rclone_config']: - rclone_sync_command = ( - 'rclone sync ' - + source - + ' ' - + remote_config - + ':' - + config['awsbucket'] - + '/' - + upload_dir - ) - - rclone_sync_command = split(rclone_sync_command) - - if verbose: - rclone_sync_command += ['--verbose'] - elif quiet: - rclone_sync_command += ['--quiet'] - - if configfilename: - rclone_sync_command += split('--config=' + configfilename) - - complete_remote_path = ( - remote_config + ':' + config['awsbucket'] + '/' + upload_dir - ) - - logging.debug( - "rclone sync all files in " + source + ' to ' + complete_remote_path - ) - - if subprocess.call(rclone_sync_command) != 0: - raise FDroidException() - - -def update_awsbucket_libcloud(repo_section, is_index_only=False): - """No summary. - - Upload the contents of the directory `repo_section` (including - subdirectories) to the AWS S3 "bucket". - - The contents of that subdir of the - bucket will first be deleted. - - Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey - """ - logging.debug( - _('using Apache libcloud to sync with {url}').format(url=config['awsbucket']) - ) - - import libcloud.security - - libcloud.security.VERIFY_SSL_CERT = True - from libcloud.storage.types import Provider, ContainerDoesNotExistError - from libcloud.storage.providers import get_driver - - if not config.get('awsaccesskeyid') or not config.get('awssecretkey'): - raise FDroidException( - _( - 'To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!' + else: + cmd = ( + rclone_sync_command + + _get_index_excludes(repo_section) + + [ + repo_section, + complete_remote_path, + ] ) - ) - awsbucket = config['awsbucket'] - - if os.path.exists(USER_S3CFG): - raise FDroidException( - _('"{path}" exists but s3cmd is not installed!').format(path=USER_S3CFG) - ) - - cls = get_driver(Provider.S3) - driver = cls(config['awsaccesskeyid'], config['awssecretkey']) - try: - container = driver.get_container(container_name=awsbucket) - except ContainerDoesNotExistError: - container = driver.create_container(container_name=awsbucket) - logging.info(_('Created new container "{name}"').format(name=container.name)) - - upload_dir = 'fdroid/' + repo_section - objs = dict() - for obj in container.list_objects(): - if obj.name.startswith(upload_dir + '/'): - objs[obj.name] = obj - - if is_index_only: - index_files = [ - f"{os.getcwd()}/{name}" for name in _get_index_file_paths(repo_section) - ] - files_to_upload = [ - os.path.join(root, name) - for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) - for name in files - ] - files_to_upload = list(set(files_to_upload) & set(index_files)) - files_to_upload = _remove_missing_files(files_to_upload) - - else: - files_to_upload = [ - os.path.join(root, name) - for root, dirs, files in os.walk(os.path.join(os.getcwd(), repo_section)) - for name in files - ] - - for file_to_upload in files_to_upload: - upload = False - object_name = 'fdroid/' + os.path.relpath(file_to_upload, os.getcwd()) - if object_name not in objs: - upload = True - else: - obj = objs.pop(object_name) - if obj.size != os.path.getsize(file_to_upload): - upload = True - else: - # if the sizes match, then compare by MD5 - md5 = hashlib.md5() # nosec AWS uses MD5 - with open(file_to_upload, 'rb') as f: - while True: - data = f.read(8192) - if not data: - break - md5.update(data) - if obj.hash != md5.hexdigest(): - s3url = 's3://' + awsbucket + '/' + obj.name - logging.info(' deleting ' + s3url) - if not driver.delete_object(obj): - logging.warning('Could not delete ' + s3url) - upload = True - - if upload: - logging.debug(' uploading "' + file_to_upload + '"...') - extra = {'acl': 'public-read'} - if file_to_upload.endswith('.sig'): - extra['content_type'] = 'application/pgp-signature' - elif file_to_upload.endswith('.asc'): - extra['content_type'] = 'application/pgp-signature' - path = os.path.relpath(file_to_upload) - logging.info(f' uploading {path} to s3://{awsbucket}/{object_name}') - with open(file_to_upload, 'rb') as iterator: - obj = driver.upload_object_via_stream( - iterator=iterator, - container=container, - object_name=object_name, - extra=extra, - ) - # delete the remnants in the bucket, they do not exist locally - while objs: - object_name, obj = objs.popitem() - s3url = 's3://' + awsbucket + '/' + object_name - if object_name.startswith(upload_dir): - logging.warning(' deleting ' + s3url) - driver.delete_object(obj) - else: - logging.info(' skipping ' + s3url) + if subprocess.call(cmd) != 0: + raise FDroidException() + cmd = rclone_sync_command + [ + repo_section, + complete_remote_path, + ] + if subprocess.call(cmd) != 0: + raise FDroidException() def update_serverwebroot(serverwebroot, repo_section): @@ -654,6 +421,13 @@ def update_servergitmirrors(servergitmirrors, repo_section): For history, there is the archive section, and there is the binary transparency log. + This will attempt to use the existing remote branch so that it does + not have to push all of the files in the repo each time. Old setups + or runs of `fdroid nightly` might use the "master" branch. For the + "index only" mode, it will recreate the branch from scratch each + time since usually all the files are changed. In any case, the + index files are small compared to the full repo. + """ from clint.textui import progress @@ -724,7 +498,7 @@ def update_servergitmirrors(servergitmirrors, repo_section): if is_index_only: local_branch_name = 'index_only' else: - local_branch_name = 'full' + local_branch_name = GIT_BRANCH if local_branch_name in repo.heads: repo.git.switch(local_branch_name) else: @@ -849,9 +623,10 @@ def upload_to_servergitmirror( | git.remote.PushInfo.REMOTE_REJECTED ): # Show potentially useful messages from git remote - for line in progress.other_lines: - if line.startswith('remote:'): - logging.debug(line) + if progress: + for line in progress.other_lines: + if line.startswith('remote:'): + logging.debug(line) raise FDroidException( remote.url + ' push failed: ' @@ -883,9 +658,10 @@ def upload_to_android_observatory(repo_section): def upload_apk_to_android_observatory(path): # depend on requests and lxml only if users enable AO import requests - from . import net from lxml.html import fromstring + from . import net + apkfilename = os.path.basename(path) r = requests.post( 'https://androidobservatory.org/', @@ -1195,7 +971,7 @@ def upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token): if not token: logging.warning( _( - "One of the 'github_releases' config itmes is missing the " + "One of the 'github_releases' config items is missing the " "'token' value. skipping ..." ) ) @@ -1206,7 +982,7 @@ def upload_to_github_releases_repo(repo_conf, release_infos, global_gh_token): if not conf_package_names: logging.warning( _( - "One of the 'github_releases' config itmes is missing the " + "One of the 'github_releases' config items is missing the " "'packageNames' value. skipping ..." ) ) @@ -1370,8 +1146,16 @@ def main(): # update_servergitmirrors will take care of multiple mirrors so don't need a foreach update_servergitmirrors(config['servergitmirrors'], repo_section) if config.get('awsbucket'): + awsbucket = config['awsbucket'] index_only = config.get('awsbucket_index_only') - update_awsbucket(repo_section, index_only, options.verbose, options.quiet) + update_remote_storage_with_rclone( + repo_section, + awsbucket, + index_only, + options.verbose, + options.quiet, + not options.no_checksum, + ) if config.get('androidobservatory'): upload_to_android_observatory(repo_section) if config.get('virustotal_apikey'): diff --git a/fdroidserver/exception.py b/fdroidserver/exception.py index a598b368..682ccef7 100644 --- a/fdroidserver/exception.py +++ b/fdroidserver/exception.py @@ -35,6 +35,10 @@ class VCSException(FDroidException): pass +class NoVersionCodeException(FDroidException): + pass + + class NoSubmodulesException(VCSException): pass diff --git a/fdroidserver/github.py b/fdroidserver/github.py index c522f522..34a3ee53 100644 --- a/fdroidserver/github.py +++ b/fdroidserver/github.py @@ -18,17 +18,20 @@ import json import pathlib -import urllib.request import urllib.parse +import urllib.request class GithubApi: - """ - Warpper for some select calls to GitHub Json/REST API. + """Wrapper for some select calls to GitHub Json/REST API. This class wraps some calls to api.github.com. This is not intended to be a general API wrapper. Instead it's purpose is to return pre-filtered and transformed data that's playing well with other fdroidserver functions. + + With the GitHub API, the token is optional, but it has pretty + severe rate limiting. + """ def __init__(self, api_token, repo_path): @@ -41,9 +44,10 @@ class GithubApi: def _req(self, url, data=None): h = { "Accept": "application/vnd.github+json", - "Authorization": f"Bearer {self._api_token}", "X-GitHub-Api-Version": "2022-11-28", } + if self._api_token: + h["Authorization"] = f"Bearer {self._api_token}" return urllib.request.Request( url, headers=h, @@ -65,6 +69,17 @@ class GithubApi: released_tags = self.list_released_tags() return [x for x in all_tags if x not in released_tags] + def get_latest_apk(self): + req = self._req( + f"https://api.github.com/repos/{self._repo_path}/releases/latest" + ) + with urllib.request.urlopen(req) as resp: # nosec CWE-22 disable bandit warning + assets = json.load(resp)['assets'] + for asset in assets: + url = asset.get('browser_download_url') + if url and url.endswith('.apk'): + return url + def tag_exists(self, tag): """ Check if git tag is present on github. diff --git a/fdroidserver/gpgsign.py b/fdroidserver/gpgsign.py index 4ba6ebd5..4341cb36 100644 --- a/fdroidserver/gpgsign.py +++ b/fdroidserver/gpgsign.py @@ -16,14 +16,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import os import glob -from argparse import ArgumentParser import logging +import os import time +from argparse import ArgumentParser -from . import _ -from . import common +from . import _, common from .common import FDroidPopen from .exception import FDroidException diff --git a/fdroidserver/import_subcommand.py b/fdroidserver/import_subcommand.py index 3902250e..017ebe54 100644 --- a/fdroidserver/import_subcommand.py +++ b/fdroidserver/import_subcommand.py @@ -18,34 +18,64 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import json +import logging import os import re -import stat -import urllib - -import git -import json import shutil +import stat import sys -import yaml +import urllib from argparse import ArgumentParser -import logging from pathlib import Path from typing import Optional +import git +import yaml + try: from yaml import CSafeLoader as SafeLoader except ImportError: from yaml import SafeLoader -from . import _ -from . import common -from . import metadata +from . import _, common, metadata from .exception import FDroidException - config = None +SETTINGS_GRADLE_REGEX = re.compile(r'settings\.gradle(?:\.kts)?') +GRADLE_SUBPROJECT_REGEX = re.compile(r'''['"]:?([^'"]+)['"]''') +APPLICATION_ID_REGEX = re.compile(r'''\s*applicationId\s=?\s?['"].*['"]''') + + +def get_all_gradle_and_manifests(build_dir): + paths = [] + for root, dirs, files in os.walk(build_dir): + for f in sorted(files): + if f == 'AndroidManifest.xml' or f.endswith(('.gradle', '.gradle.kts')): + full = Path(root) / f + paths.append(full) + return paths + + +def get_gradle_subdir(build_dir, paths): + """Get the subdir where the gradle build is based.""" + first_gradle_dir = None + for path in paths: + if not first_gradle_dir: + first_gradle_dir = path.parent.relative_to(build_dir) + if path.exists() and SETTINGS_GRADLE_REGEX.match(path.name): + for m in GRADLE_SUBPROJECT_REGEX.finditer(path.read_text(encoding='utf-8')): + for f in (path.parent / m.group(1)).glob('build.gradle*'): + with f.open(encoding='utf-8') as fp: + for line in fp: + if common.ANDROID_PLUGIN_REGEX.match( + line + ) or APPLICATION_ID_REGEX.match(line): + return f.parent.relative_to(build_dir) + if first_gradle_dir and first_gradle_dir != Path('.'): + return first_gradle_dir + def handle_retree_error_on_windows(function, path, excinfo): """Python can't remove a readonly file on Windows so chmod first.""" @@ -100,6 +130,7 @@ def getrepofrompage(url: str) -> tuple[Optional[str], str]: The found repository type or None if an error occured. address_or_reason The address to the found repository or the reason if an error occured. + """ if not url.startswith('http'): return (None, _('{url} does not start with "http"!'.format(url=url))) @@ -122,7 +153,7 @@ def getrepofrompage(url: str) -> tuple[Optional[str], str]: index = page.find('hg clone') if index != -1: repotype = 'hg' - repo = page[index + 9:] + repo = page[index + 9 :] index = repo.find('<') if index == -1: return (None, _("Error while getting repo address")) @@ -134,7 +165,7 @@ def getrepofrompage(url: str) -> tuple[Optional[str], str]: index = page.find('git clone') if index != -1: repotype = 'git' - repo = page[index + 10:] + repo = page[index + 10 :] index = repo.find('<') if index == -1: return (None, _("Error while getting repo address")) @@ -168,6 +199,7 @@ def get_app_from_url(url: str) -> metadata.App: If the VCS type could not be determined. :exc:`ValueError` If the URL is invalid. + """ parsed = urllib.parse.urlparse(url) invalid_url = False @@ -243,18 +275,29 @@ def main(): # Parse command line... parser = ArgumentParser() common.setup_global_opts(parser) - parser.add_argument("-u", "--url", default=None, - help=_("Project URL to import from.")) - parser.add_argument("-s", "--subdir", default=None, - help=_("Path to main Android project subdirectory, if not in root.")) - parser.add_argument("-c", "--categories", default=None, - help=_("Comma separated list of categories.")) - parser.add_argument("-l", "--license", default=None, - help=_("Overall license of the project.")) - parser.add_argument("--omit-disable", action="store_true", default=False, - help=_("Do not add 'disable:' to the generated build entries")) - parser.add_argument("--rev", default=None, - help=_("Allows a different revision (or git branch) to be specified for the initial import")) + parser.add_argument("-u", "--url", help=_("Project URL to import from.")) + parser.add_argument( + "-s", + "--subdir", + help=_("Path to main Android project subdirectory, if not in root."), + ) + parser.add_argument( + "-c", + "--categories", + help=_("Comma separated list of categories."), + ) + parser.add_argument("-l", "--license", help=_("Overall license of the project.")) + parser.add_argument( + "--omit-disable", + action="store_true", + help=_("Do not add 'disable:' to the generated build entries"), + ) + parser.add_argument( + "--rev", + help=_( + "Allows a different revision (or git branch) to be specified for the initial import" + ), + ) metadata.add_metadata_arguments(parser) options = common.parse_args(parser) metadata.warnings_action = options.W @@ -268,24 +311,20 @@ def main(): local_metadata_files = common.get_local_metadata_files() if local_metadata_files: - raise FDroidException(_("This repo already has local metadata: %s") % local_metadata_files[0]) + raise FDroidException( + _("This repo already has local metadata: %s") % local_metadata_files[0] + ) build = metadata.Build() + app = metadata.App() if options.url is None and Path('.git').is_dir(): - app = metadata.App() - app.AutoName = Path.cwd().name app.RepoType = 'git' - - if Path('build.gradle').exists() or Path('build.gradle.kts').exists(): - build.gradle = ['yes'] - - git_repo = git.Repo(Path.cwd()) + tmp_importer_dir = Path.cwd() + git_repo = git.Repo(tmp_importer_dir) for remote in git.Remote.iter_items(git_repo): if remote.name == 'origin': url = git_repo.remotes.origin.url - if url.startswith('https://git'): # github, gitlab - app.SourceCode = url.rstrip('.git') - app.Repo = url + app = get_app_from_url(url) break write_local_file = True elif options.url: @@ -294,25 +333,28 @@ def main(): git_repo = git.Repo(tmp_importer_dir) if not options.omit_disable: - build.disable = 'Generated by `fdroid import` - check version fields and commitid' + build.disable = ( + 'Generated by `fdroid import` - check version fields and commitid' + ) write_local_file = False else: raise FDroidException("Specify project url.") + app.AutoUpdateMode = 'Version' app.UpdateCheckMode = 'Tags' - build.commit = common.get_head_commit_id(git_repo) + build.commit = common.get_head_commit_id(tmp_importer_dir) # Extract some information... - paths = common.get_all_gradle_and_manifests(tmp_importer_dir) - subdir = common.get_gradle_subdir(tmp_importer_dir, paths) + paths = get_all_gradle_and_manifests(tmp_importer_dir) + gradle_subdir = get_gradle_subdir(tmp_importer_dir, paths) if paths: versionName, versionCode, appid = common.parse_androidmanifests(paths, app) if not appid: raise FDroidException(_("Couldn't find Application ID")) if not versionName: - logging.warning(_('Could not find latest version name')) + logging.warning(_('Could not find latest versionName')) if not versionCode: - logging.warning(_('Could not find latest version code')) + logging.warning(_('Could not find latest versionCode')) else: raise FDroidException(_("No gradle project could be found. Specify --subdir?")) @@ -322,16 +364,15 @@ def main(): # Create a build line... build.versionName = versionName or 'Unknown' + app.CurrentVersion = build.versionName build.versionCode = versionCode or 0 + app.CurrentVersionCode = build.versionCode if options.subdir: build.subdir = options.subdir - build.gradle = ['yes'] - elif subdir: - build.subdir = subdir.as_posix() - build.gradle = ['yes'] - else: - # subdir might be None - subdir = Path() + elif gradle_subdir: + build.subdir = gradle_subdir.as_posix() + # subdir might be None + subdir = Path(tmp_importer_dir / build.subdir) if build.subdir else tmp_importer_dir if options.license: app.License = options.license @@ -339,23 +380,23 @@ def main(): app.Categories = options.categories.split(',') if (subdir / 'jni').exists(): build.buildjni = ['yes'] - if (subdir / 'build.gradle').exists() or (subdir / 'build.gradle').exists(): + if (subdir / 'build.gradle').exists() or (subdir / 'build.gradle.kts').exists(): build.gradle = ['yes'] + app.AutoName = common.fetch_real_name(subdir, build.gradle) + package_json = tmp_importer_dir / 'package.json' # react-native pubspec_yaml = tmp_importer_dir / 'pubspec.yaml' # flutter if package_json.exists(): build.sudo = [ 'sysctl fs.inotify.max_user_watches=524288 || true', - 'curl -Lo node.tar.gz https://nodejs.org/download/release/v19.3.0/node-v19.3.0-linux-x64.tar.gz', - 'echo "b525028ae5bb71b5b32cb7fce903ccce261dbfef4c7dd0f3e0ffc27cd6fc0b3f node.tar.gz" | sha256sum -c -', - 'tar xzf node.tar.gz --strip-components=1 -C /usr/local/', - 'npm -g install yarn', + 'apt-get update', + 'apt-get install -y npm', ] build.init = ['npm install --build-from-source'] with package_json.open() as fp: data = json.load(fp) - app.AutoName = data.get('name', app.AutoName) + app.AutoName = app.AutoName or data.get('name') app.License = data.get('license', app.License) app.Description = data.get('description', app.Description) app.WebSite = data.get('homepage', app.WebSite) @@ -365,11 +406,11 @@ def main(): if app_json.exists(): with app_json.open() as fp: data = json.load(fp) - app.AutoName = data.get('name', app.AutoName) + app.AutoName = app.AutoName or data.get('name') if pubspec_yaml.exists(): with pubspec_yaml.open() as fp: data = yaml.load(fp, Loader=SafeLoader) - app.AutoName = data.get('name', app.AutoName) + app.AutoName = app.AutoName or data.get('name') app.License = data.get('license', app.License) app.Description = data.get('description', app.Description) app.UpdateCheckData = 'pubspec.yaml|version:\\s.+\\+(\\d+)|.|version:\\s(.+)\\+' @@ -405,8 +446,11 @@ def main(): Path('build').mkdir(exist_ok=True) build_dir = Path('build') / appid if build_dir.exists(): - logging.warning(_('{path} already exists, ignoring import results!') - .format(path=build_dir)) + logging.warning( + _('{path} already exists, ignoring import results!').format( + path=build_dir + ) + ) sys.exit(1) elif tmp_importer_dir: # For Windows: Close the repo or a git.exe instance holds handles to repo diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 3fe533bd..b63729e4 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -20,32 +20,49 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +"""Process the index files. + +This module is loaded by all fdroid subcommands since it is loaded in +fdroidserver/__init__.py. Any narrowly used dependencies should be +imported where they are used to limit dependencies for subcommands +like publish/signindex/gpgsign. This eliminates the need to have +these installed on the signing server. + +""" + +import calendar import collections import hashlib import json import logging import os import re -import ruamel.yaml import shutil +import sys import tempfile import urllib.parse import zipfile -import calendar -import qrcode from binascii import hexlify, unhexlify from datetime import datetime, timezone from pathlib import Path from xml.dom.minidom import Document -from . import _ -from . import common -from . import metadata -from . import net -from . import signindex -from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME, CONFIG_CONFIG_NAME, MIRRORS_CONFIG_NAME, RELEASECHANNELS_CONFIG_NAME, DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints +from fdroidserver._yaml import yaml +from fdroidserver.common import ( + ANTIFEATURES_CONFIG_NAME, + CATEGORIES_CONFIG_NAME, + CONFIG_CONFIG_NAME, + DEFAULT_LOCALE, + MIRRORS_CONFIG_NAME, + RELEASECHANNELS_CONFIG_NAME, + FDroidPopen, + FDroidPopenBytes, + load_publish_signer_fingerprints, +) from fdroidserver.exception import FDroidException, VerificationException +from . import _, common, metadata, signindex + def make(apps, apks, repodir, archive): """Generate the repo index files. @@ -77,7 +94,7 @@ def make(apps, apks, repodir, archive): sortedapps[appid] = apps[appid] repodict = collections.OrderedDict() - repodict['timestamp'] = datetime.utcnow().replace(tzinfo=timezone.utc) + repodict['timestamp'] = datetime.now(timezone.utc) repodict['version'] = METADATA_VERSION if common.config['repo_maxage'] != 0: @@ -116,14 +133,13 @@ def make(apps, apks, repodir, archive): raise TypeError(_('only accepts strings, lists, and tuples')) requestsdict[command] = packageNames - fdroid_signing_key_fingerprints = load_stats_fdroid_signing_key_fingerprints() + signer_fingerprints = load_publish_signer_fingerprints() - make_v0(sortedapps, apks, repodir, repodict, requestsdict, - fdroid_signing_key_fingerprints) - make_v1(sortedapps, apks, repodir, repodict, requestsdict, - fdroid_signing_key_fingerprints) - make_v2(sortedapps, apks, repodir, repodict, requestsdict, - fdroid_signing_key_fingerprints, archive) + make_v0(sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints) + make_v1(sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints) + make_v2( + sortedapps, apks, repodir, repodict, requestsdict, signer_fingerprints, archive + ) make_website(sortedapps, repodir, repodict) make_altstore( sortedapps, @@ -144,23 +160,25 @@ def _should_file_be_generated(path, magic_string): def make_website(apps, repodir, repodict): - _ignored, repo_pubkey_fingerprint = extract_pubkey() - repo_pubkey_fingerprint_stripped = repo_pubkey_fingerprint.replace(" ", "") - link = repodict["address"] - link_fingerprinted = ('{link}?fingerprint={fingerprint}' - .format(link=link, fingerprint=repo_pubkey_fingerprint_stripped)) # do not change this string, as it will break updates for files with older versions of this string autogenerate_comment = "auto-generated - fdroid index updates will overwrite this file" if not os.path.exists(repodir): os.makedirs(repodir) - qrcode.make(link_fingerprinted).save(os.path.join(repodir, "index.png")) - html_name = 'index.html' html_file = os.path.join(repodir, html_name) if _should_file_be_generated(html_file, autogenerate_comment): + import qrcode + + _ignored, repo_pubkey_fingerprint = extract_pubkey() + repo_pubkey_fingerprint_stripped = repo_pubkey_fingerprint.replace(" ", "") + link = repodict["address"] + link_fingerprinted = '{link}?fingerprint={fingerprint}'.format( + link=link, fingerprint=repo_pubkey_fingerprint_stripped + ) + qrcode.make(link_fingerprinted).save(os.path.join(repodir, "index.png")) with open(html_file, 'w') as f: name = repodict["name"] description = repodict["description"] @@ -509,7 +527,6 @@ def package_metadata(app, repodir): "AuthorPhone", "AuthorWebSite", "Bitcoin", - "FlattrID", "Liberapay", "Litecoin", "OpenCollective", @@ -578,7 +595,10 @@ def convert_version(version, app, repodir): ver["file"]["ipfsCIDv1"] = ipfsCIDv1 if "srcname" in version: - ver["src"] = common.file_entry(os.path.join(repodir, version["srcname"])) + ver["src"] = common.file_entry( + os.path.join(repodir, version["srcname"]), + version["srcnameSha256"], + ) if "obbMainFile" in version: ver["obbMainFile"] = common.file_entry( @@ -674,9 +694,13 @@ def v2_repo(repodict, repodir, archive): config = common.load_localized_config(CONFIG_CONFIG_NAME, repodir) if config: - repo["name"] = config["archive" if archive else "repo"]["name"] - repo["description"] = config["archive" if archive else "repo"]["description"] - repo["icon"] = config["archive" if archive else "repo"]["icon"] + localized_config = config["archive" if archive else "repo"] + if "name" in localized_config: + repo["name"] = localized_config["name"] + if "description" in localized_config: + repo["description"] = localized_config["description"] + if "icon" in localized_config: + repo["icon"] = localized_config["icon"] repo["address"] = repodict["address"] if "mirrors" in repodict: @@ -701,7 +725,7 @@ def v2_repo(repodict, repodir, archive): return repo -def make_v2(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_fingerprints, archive): +def make_v2(apps, packages, repodir, repodict, requestsdict, signer_fingerprints, archive): def _index_encoder_default(obj): if isinstance(obj, set): @@ -723,7 +747,7 @@ def make_v2(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ output["repo"]["requests"] = requestsdict # establish sort order of the index - v1_sort_packages(packages, fdroid_signing_key_fingerprints) + sort_package_versions(packages, signer_fingerprints) output_packages = collections.OrderedDict() output['packages'] = output_packages @@ -762,7 +786,9 @@ def make_v2(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ # include definitions for "auto-defined" categories, e.g. just used in app metadata for category in sorted(categories_used_by_apps): if category not in output['repo'][CATEGORIES_CONFIG_NAME]: - output['repo'][CATEGORIES_CONFIG_NAME][category] = {"name": {DEFAULT_LOCALE: category}} + output['repo'][CATEGORIES_CONFIG_NAME][category] = dict() + if 'name' not in output['repo'][CATEGORIES_CONFIG_NAME][category]: + output['repo'][CATEGORIES_CONFIG_NAME][category]['name'] = {DEFAULT_LOCALE: category} # do not include defined categories if no apps use them for category in list(output['repo'].get(CATEGORIES_CONFIG_NAME, list())): if category not in categories_used_by_apps: @@ -838,7 +864,7 @@ def make_v2(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ signindex.sign_index(repodir, json_name) -def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_fingerprints): +def make_v1(apps, packages, repodir, repodict, requestsdict, signer_fingerprints): def _index_encoder_default(obj): if isinstance(obj, set): @@ -868,7 +894,7 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ output['repo']['mirrors'] = mirrors # establish sort order of the index - v1_sort_packages(packages, fdroid_signing_key_fingerprints) + sort_package_versions(packages, signer_fingerprints) appslist = [] output['apps'] = appslist @@ -941,7 +967,7 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ for k, v in sorted(package.items()): if not v: continue - if k in ('icon', 'icons', 'icons_src', 'ipfsCIDv1', 'name'): + if k in ('icon', 'icons', 'icons_src', 'ipfsCIDv1', 'name', 'srcnameSha256'): continue if k == 'antiFeatures': d[k] = sorted(v.keys()) @@ -976,8 +1002,8 @@ def _copy_to_local_copy_dir(repodir, f): .format(path=local_copy_dir)) -def v1_sort_packages(packages, fdroid_signing_key_fingerprints): - """Sort the supplied list to ensure a deterministic sort order for package entries in the index file. +def sort_package_versions(packages, signer_fingerprints): + """Sort to ensure a deterministic order for package versions in the index file. This sort-order also expresses installation preference to the clients. @@ -1002,7 +1028,7 @@ def v1_sort_packages(packages, fdroid_signing_key_fingerprints): if dev_signer and dev_signer == signer: group = GROUP_DEV_SIGNED else: - fdroid_signer = fdroid_signing_key_fingerprints.get(packageName, {}).get('signer') + fdroid_signer = signer_fingerprints.get(packageName, {}).get('signer') if fdroid_signer and fdroid_signer == signer: group = GROUP_FDROID_SIGNED @@ -1015,7 +1041,7 @@ def v1_sort_packages(packages, fdroid_signing_key_fingerprints): packages.sort(key=v1_sort_keys) -def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fingerprints): +def make_v0(apps, apks, repodir, repodict, requestsdict, signer_fingerprints): """Aka index.jar aka index.xml.""" doc = Document() @@ -1114,7 +1140,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing if name_from_apk is None: name_from_apk = apk.get('name') for versionCode, apksforver in apksbyversion.items(): - fdroid_signer = fdroid_signing_key_fingerprints.get(appid, {}).get('signer') + fdroid_signer = signer_fingerprints.get(appid, {}).get('signer') fdroid_signed_apk = None name_match_apk = None for x in apksforver: @@ -1169,7 +1195,6 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing addElementNonEmpty('donate', app.Donate, doc, apel) addElementNonEmpty('bitcoin', app.Bitcoin, doc, apel) addElementNonEmpty('litecoin', app.Litecoin, doc, apel) - addElementNonEmpty('flattr', app.FlattrID, doc, apel) addElementNonEmpty('openCollective', app.OpenCollective, doc, apel) # These elements actually refer to the current version (i.e. which @@ -1312,6 +1337,29 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing os.remove(siglinkname) os.symlink(sigfile_path, siglinkname) + if sys.version_info.minor >= 13: + # Python 3.13 changed minidom so it no longer converts " to an XML entity. + # https://github.com/python/cpython/commit/154477be722ae5c4e18d22d0860e284006b09c4f + # This just puts back the previous implementation, with black code format. + import inspect + import xml.dom.minidom + + def _write_data(writer, text, attr): # pylint: disable=unused-argument + if text: + text = ( + text.replace('&', '&') + .replace('<', '<') + .replace('"', '"') + .replace('>', '>') + ) + writer.write(text) + + argnames = tuple(inspect.signature(xml.dom.minidom._write_data).parameters) + if argnames == ('writer', 'text', 'attr'): + xml.dom.minidom._write_data = _write_data + else: + logging.warning('Failed to monkey patch minidom for index.xml support!') + if common.options.pretty: output = doc.toprettyxml(encoding='utf-8') else: @@ -1357,7 +1405,15 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing % repo_icon) os.makedirs(os.path.dirname(iconfilename), exist_ok=True) try: + import qrcode + qrcode.make(common.config['repo_url']).save(iconfilename) + except ModuleNotFoundError as e: + raise ModuleNotFoundError( + _( + 'The "qrcode" Python package is not installed (e.g. apt-get install python3-qrcode)!' + ) + ) from e except Exception: exampleicon = os.path.join(common.get_examples_dir(), common.default_config['repo_icon']) @@ -1424,7 +1480,7 @@ def add_mirrors_to_repodict(repo_section, repodict): ) ) with mirrors_yml.open() as fp: - mirrors_config = ruamel.yaml.YAML(typ='safe').load(fp) + mirrors_config = yaml.load(fp) if not isinstance(mirrors_config, list): msg = _('{path} is not list, but a {datatype}!') raise TypeError( @@ -1478,6 +1534,7 @@ def add_mirrors_to_repodict(repo_section, repodict): repodict['mirrors'] = [] canonical_url = repodict['address'] found_primary = False + errors = 0 for mirror in mirrors: if canonical_url == mirror['url']: found_primary = True @@ -1486,9 +1543,19 @@ def add_mirrors_to_repodict(repo_section, repodict): for k in sorted(mirror.keys()): sortedmirror[k] = mirror[k] repodict['mirrors'].insert(0, sortedmirror) + elif mirror.get('isPrimary'): + errors += 1 + logging.error( + _('Mirror config for {url} contains "isPrimary" key!').format( + url=mirror['url'] + ) + ) else: repodict['mirrors'].append(mirror) + if errors: + raise FDroidException(_('"isPrimary" key should not be added to mirrors!')) + if repodict['mirrors'] and not found_primary: repodict['mirrors'].insert(0, {'isPrimary': True, 'url': repodict['address']}) @@ -1603,6 +1670,8 @@ def download_repo_index_v1(url_str, etag=None, verify_fingerprint=True, timeout= - The new eTag as returned by the HTTP request """ + from . import net + url = urllib.parse.urlsplit(url_str) fingerprint = None @@ -1635,7 +1704,7 @@ def download_repo_index_v1(url_str, etag=None, verify_fingerprint=True, timeout= return index, new_etag -def download_repo_index_v2(url_str, etag=None, verify_fingerprint=True, timeout=600): +def download_repo_index_v2(url_str, etag=None, verify_fingerprint=True, timeout=None): """Download and verifies index v2 file, then returns its data. Downloads the repository index from the given :param url_str and @@ -1654,8 +1723,15 @@ def download_repo_index_v2(url_str, etag=None, verify_fingerprint=True, timeout= - The new eTag as returned by the HTTP request """ + from . import net + + etag # etag is unused but needs to be there to keep the same API as the earlier functions. + url = urllib.parse.urlsplit(url_str) + if timeout is not None: + logging.warning('"timeout" argument of download_repo_index_v2() is deprecated!') + fingerprint = None if verify_fingerprint: query = urllib.parse.parse_qs(url.query) @@ -1667,29 +1743,22 @@ def download_repo_index_v2(url_str, etag=None, verify_fingerprint=True, timeout= path = url.path.rsplit('/', 1)[0] else: path = url.path.rstrip('/') + url = urllib.parse.SplitResult(url.scheme, url.netloc, path, '', '') - url = urllib.parse.SplitResult(url.scheme, url.netloc, path + '/entry.jar', '', '') - download, new_etag = net.http_get(url.geturl(), etag, timeout) + mirrors = common.get_mirrors(url, 'entry.jar') + f = net.download_using_mirrors(mirrors) + entry, public_key, fingerprint = get_index_from_jar(f, fingerprint) - if download is None: - return None, new_etag - - # jarsigner is used to verify the JAR, it requires a file for input - with tempfile.TemporaryDirectory() as dirname: - with (Path(dirname) / 'entry.jar').open('wb') as fp: - fp.write(download) - fp.flush() - entry, public_key, fingerprint = get_index_from_jar(fp.name, fingerprint) - - name = entry['index']['name'] sha256 = entry['index']['sha256'] - url = urllib.parse.SplitResult(url.scheme, url.netloc, path + name, '', '') - index, _ignored = net.http_get(url.geturl(), None, timeout) + mirrors = common.get_mirrors(url, entry['index']['name'][1:]) + f = net.download_using_mirrors(mirrors) + with open(f, 'rb') as fp: + index = fp.read() if sha256 != hashlib.sha256(index).hexdigest(): raise VerificationException( _("SHA-256 of {url} does not match entry!").format(url=url) ) - return json.loads(index), new_etag + return json.loads(index), None def get_index_from_jar(jarfile, fingerprint=None, allow_deprecated=False): diff --git a/fdroidserver/init.py b/fdroidserver/init.py index e27a7092..39b18c1a 100644 --- a/fdroidserver/init.py +++ b/fdroidserver/init.py @@ -19,16 +19,15 @@ # along with this program. If not, see . import glob +import logging import os import re import shutil import socket import sys from argparse import ArgumentParser -import logging -from . import _ -from . import common +from . import _, common from .exception import FDroidException config = {} @@ -38,13 +37,13 @@ def disable_in_config(key, value): """Write a key/value to the local config.yml, then comment it out.""" import yaml - with open('config.yml') as f: - data = f.read() + with open(common.CONFIG_FILE) as fp: + data = fp.read() pattern = r'\n[\s#]*' + key + r':.*' repl = '\n#' + yaml.dump({key: value}, default_flow_style=False) data = re.sub(pattern, repl, data) - with open('config.yml', 'w') as f: - f.writelines(data) + with open(common.CONFIG_FILE, 'w') as fp: + fp.writelines(data) def main(): @@ -82,7 +81,7 @@ def main(): ) options = common.parse_args(parser) - common.set_console_logging(options.verbose) + common.set_console_logging(options.verbose, options.color) fdroiddir = os.getcwd() test_config = dict() @@ -138,24 +137,24 @@ def main(): _("Android SDK not found at {path}!").format(path=test_config['sdk_path']) ) - if not os.path.exists('config.yml') and not os.path.exists('config.py'): + if not os.path.exists(common.CONFIG_FILE): # 'metadata' and 'tmp' are created in fdroid if not os.path.exists('repo'): os.mkdir('repo') - example_config_yml = os.path.join(examplesdir, 'config.yml') + example_config_yml = os.path.join(examplesdir, common.CONFIG_FILE) if os.path.exists(example_config_yml): - shutil.copyfile(example_config_yml, 'config.yml') + shutil.copyfile(example_config_yml, common.CONFIG_FILE) else: from pkg_resources import get_distribution versionstr = get_distribution('fdroidserver').version if not versionstr: versionstr = 'master' - with open('config.yml', 'w') as fp: + with open(common.CONFIG_FILE, 'w') as fp: fp.write('# see https://gitlab.com/fdroid/fdroidserver/blob/') fp.write(versionstr) - fp.write('/examples/config.yml\n') - os.chmod('config.yml', 0o0600) + fp.write(f'/examples/{common.CONFIG_FILE}\n') + os.chmod(common.CONFIG_FILE, 0o0600) # If android_home is None, test_config['sdk_path'] will be used and # "$ANDROID_HOME" may be used if the env var is set up correctly. # If android_home is not None, the path given from the command line diff --git a/fdroidserver/install.py b/fdroidserver/install.py index b9370ee5..8c1dc948 100644 --- a/fdroidserver/install.py +++ b/fdroidserver/install.py @@ -17,35 +17,298 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys -import os import glob -from argparse import ArgumentParser +import locale import logging +import os +import sys +import termios +import tty +from argparse import ArgumentParser, BooleanOptionalAction +from pathlib import Path +from urllib.parse import urlencode, urlparse, urlunparse -from . import _ -from . import common -from .common import SdkToolsPopen +import defusedxml.ElementTree as XMLElementTree + +from . import _, common, github, index, net from .exception import FDroidException -config = None +DEFAULT_IPFS_GATEWAYS = ("https://gateway.ipfs.io/ipfs/",) +MAVEN_CENTRAL_MIRRORS = [ + { + "url": "https://repo1.maven.org/maven2/", + "dnsA": ["199.232.16.209"], + "worksWithoutSNI": True, + }, + { + "url": "https://repo.maven.apache.org/maven2/", + "dnsA": ["199.232.16.215"], + "worksWithoutSNI": True, + }, + { + "url": "https://maven-central-asia.storage-download.googleapis.com/maven2/", + }, + { + "url": "https://maven-central-eu.storage-download.googleapis.com/maven2/", + }, + { + "url": "https://maven-central.storage-download.googleapis.com/maven2/", + }, +] + + +# pylint: disable=unused-argument +def download_apk(appid='org.fdroid.fdroid', privacy_mode=False): + """Download an APK from F-Droid via the first mirror that works.""" + url = urlunparse( + urlparse(common.FDROIDORG_MIRRORS[0]['url'])._replace( + query=urlencode({'fingerprint': common.FDROIDORG_FINGERPRINT}) + ) + ) + + data, _ignored = index.download_repo_index_v2(url) + app = data.get('packages', dict()).get(appid) + preferred_version = None + for version in app['versions'].values(): + if not preferred_version: + # if all else fails, use the first one + preferred_version = version + if not version.get('releaseChannels'): + # prefer APK in default release channel + preferred_version = version + break + + mirrors = common.append_filename_to_mirrors( + preferred_version['file']['name'][1:], common.FDROIDORG_MIRRORS + ) + ipfsCIDv1 = preferred_version['file'].get('ipfsCIDv1') + if ipfsCIDv1: + for gateway in DEFAULT_IPFS_GATEWAYS: + mirrors.append({'url': os.path.join(gateway, ipfsCIDv1)}) + f = net.download_using_mirrors(mirrors) + if f and os.path.exists(f): + versionCode = preferred_version['manifest']['versionCode'] + f = Path(f) + return str(f.rename(f.with_stem(f'{appid}_{versionCode}')).resolve()) + + +def download_fdroid_apk(privacy_mode=False): # pylint: disable=unused-argument + """Directly download the current F-Droid APK and verify it. + + This downloads the "download button" link, which is the version + that is best tested for new installs. + + """ + mirror = common.FDROIDORG_MIRRORS[0] + mirror['url'] = urlunparse(urlparse(mirror['url'])._replace(path='F-Droid.apk')) + return net.download_using_mirrors([mirror]) + + +def download_fdroid_apk_from_github(privacy_mode=False): + """Download F-Droid.apk from F-Droid's GitHub Releases.""" + if common.config and not privacy_mode: + token = common.config.get('github_token') + else: + token = None + gh = github.GithubApi(token, 'https://github.com/f-droid/fdroidclient') + latest_apk = gh.get_latest_apk() + filename = os.path.basename(latest_apk) + return net.download_file(latest_apk, os.path.join(common.get_cachedir(), filename)) + + +def download_fdroid_apk_from_ipns(privacy_mode=False): + """Download the F-Droid APK from an IPNS repo.""" + cid = 'k51qzi5uqu5dl4hbcksbdmplanu9n4hivnqsupqe6vzve1pdbeh418ssptldd3' + mirrors = [ + {"url": f"https://ipfs.io/ipns/{cid}/F-Droid.apk"}, + ] + if not privacy_mode: + mirrors.append({"url": f"https://{cid}.ipns.dweb.link/F-Droid.apk"}) + return net.download_using_mirrors(mirrors) + + +def download_fdroid_apk_from_maven(privacy_mode=False): + """Download F-Droid.apk from Maven Central and official mirrors.""" + path = 'org/fdroid/fdroid/F-Droid' + if privacy_mode: + mirrors = MAVEN_CENTRAL_MIRRORS[:2] # skip the Google servers + else: + mirrors = MAVEN_CENTRAL_MIRRORS + metadata = net.download_using_mirrors( + common.append_filename_to_mirrors( + os.path.join(path, 'maven-metadata.xml'), mirrors + ) + ) + version = XMLElementTree.parse(metadata).getroot().findall('*.//latest')[0].text + mirrors = common.append_filename_to_mirrors( + os.path.join(path, version, f'F-Droid-{version}.apk'), mirrors + ) + return net.download_using_mirrors(mirrors) + + +def install_fdroid_apk(privacy_mode=False): + """Download and install F-Droid.apk using all tricks we can muster. + + By default, this first tries to fetch the official install APK + which is offered when someone clicks the "download" button on + https://f-droid.org/. Then it will try all the mirrors and + methods until it gets something successful, or runs out of + options. + + There is privacy_mode which tries to download from mirrors first, + so that this downloads from a mirror that has many different kinds + of files available, thereby breaking the clear link to F-Droid. + + Returns + ------- + None for success or the error message. + + """ + country_code = locale.getlocale()[0].split('_')[-1] + if privacy_mode is None and country_code in ('CN', 'HK', 'IR', 'TM'): + logging.warning( + _('Privacy mode was enabled based on your locale ({country_code}).').format( + country_code=country_code + ) + ) + privacy_mode = True + + if privacy_mode or not (common.config and common.config.get('jarsigner')): + download_methods = [ + download_fdroid_apk_from_maven, + download_fdroid_apk_from_ipns, + download_fdroid_apk_from_github, + ] + else: + download_methods = [ + download_apk, + download_fdroid_apk_from_maven, + download_fdroid_apk_from_github, + download_fdroid_apk_from_ipns, + download_fdroid_apk, + ] + for method in download_methods: + try: + f = method(privacy_mode=privacy_mode) + break + except Exception as e: + logging.info(e) + else: + return _('F-Droid.apk could not be downloaded from any known source!') + + fingerprint = common.apk_signer_fingerprint(f) + if fingerprint.upper() != common.FDROIDORG_FINGERPRINT: + return _('{path} has the wrong fingerprint ({fingerprint})!').format( + path=f, fingerprint=fingerprint + ) + install_apk(f) + + +def install_apk(f): + if common.config and common.config.get('apksigner'): + # TODO this should always verify, but that requires APK sig verification in Python #94 + logging.info(_('Verifying package {path} with apksigner.').format(path=f)) + common.verify_apk_signature(f) + if common.config and common.config.get('adb'): + if devices(): + install_apks_to_devices([f]) + os.remove(f) + else: + os.remove(f) + return _('No devices found for `adb install`! Please plug one in.') def devices(): - p = SdkToolsPopen(['adb', "devices"]) + """Get the list of device serials for use with adb commands.""" + p = common.SdkToolsPopen(['adb', "devices"]) if p.returncode != 0: raise FDroidException("An error occured when finding devices: %s" % p.output) - lines = [line for line in p.output.splitlines() if not line.startswith('* ')] - if len(lines) < 3: - return [] - lines = lines[1:-1] - return [line.split()[0] for line in lines] + serials = list() + for line in p.output.splitlines(): + columns = line.strip().split("\t", maxsplit=1) + if len(columns) == 2: + serial, status = columns + if status == 'device': + serials.append(serial) + else: + d = {'serial': serial, 'status': status} + logging.warning(_('adb reports {serial} is "{status}"!'.format(**d))) + return serials + + +def install_apks_to_devices(apks): + """Install the list of APKs to all Android devices reported by `adb devices`.""" + for apk in apks: + # Get device list each time to avoid device not found errors + devs = devices() + if not devs: + raise FDroidException(_("No attached devices found")) + logging.info(_("Installing %s...") % apk) + for dev in devs: + logging.info( + _("Installing '{apkfilename}' on {dev}...").format( + apkfilename=apk, dev=dev + ) + ) + p = common.SdkToolsPopen(['adb', "-s", dev, "install", apk]) + fail = "" + for line in p.output.splitlines(): + if line.startswith("Failure"): + fail = line[9:-1] + if not fail: + continue + + if fail == "INSTALL_FAILED_ALREADY_EXISTS": + logging.warning( + _('"{apkfilename}" is already installed on {dev}.').format( + apkfilename=apk, dev=dev + ) + ) + else: + raise FDroidException( + _("Failed to install '{apkfilename}' on {dev}: {error}").format( + apkfilename=apk, dev=dev, error=fail + ) + ) + + +def read_char(): + """Read input from the terminal prompt one char at a time.""" + fd = sys.stdin.fileno() + old_settings = termios.tcgetattr(fd) + try: + tty.setraw(fd) + ch = sys.stdin.read(1) + finally: + termios.tcsetattr(fd, termios.TCSADRAIN, old_settings) + return ch + + +def strtobool(val): + """Convert a localized string representation of truth to True or False.""" + return val.lower() in ('', 'y', 'yes', _('yes'), _('true')) # '' is pressing Enter + + +def prompt_user(yes, msg): + """Prompt user for yes/no, supporting Enter and Esc as accepted answers.""" + run_install = yes + if yes is None and sys.stdout.isatty(): + print(msg, end=' ', flush=True) + answer = '' + while True: + in_char = read_char() + if in_char == '\r': # Enter key + break + if not in_char.isprintable(): + sys.exit(1) + print(in_char, end='', flush=True) + answer += in_char + run_install = strtobool(answer) + print() + return run_install def main(): - global config - - # Parse command line... parser = ArgumentParser( usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]" ) @@ -62,22 +325,56 @@ def main(): default=False, help=_("Install all signed applications available"), ) + parser.add_argument( + "-p", + "--privacy-mode", + action=BooleanOptionalAction, + default=None, + help=_("Download F-Droid.apk using mirrors that leak less to the network"), + ) + parser.add_argument( + "-y", + "--yes", + action="store_true", + default=None, + help=_("Automatic yes to all prompts."), + ) + parser.add_argument( + "-n", + "--no", + action="store_false", + dest='yes', + help=_("Automatic no to all prompts."), + ) options = common.parse_args(parser) - common.set_console_logging(options.verbose) + common.set_console_logging(options.verbose, options.color) + logging.captureWarnings(True) # for SNIMissingWarning + + common.get_config() if not options.appid and not options.all: - parser.error( - _("option %s: If you really want to install all the signed apps, use --all") - % "all" + run_install = prompt_user( + options.yes, + _('Would you like to download and install F-Droid.apk via adb? (YES/no)'), ) - - config = common.read_config() + if run_install: + sys.exit(install_fdroid_apk(options.privacy_mode)) + sys.exit(1) output_dir = 'repo' - if not os.path.isdir(output_dir): - logging.info(_("No signed output directory - nothing to do")) - sys.exit(0) + if (options.appid or options.all) and not os.path.isdir(output_dir): + logging.error(_("No signed output directory - nothing to do")) + run_install = prompt_user( + options.yes, + _('Would you like to download the app(s) from f-droid.org? (YES/no)'), + ) + if run_install: + for appid in options.appid: + f = download_apk(appid) + install_apk(f) + sys.exit(install_fdroid_apk(options.privacy_mode)) + sys.exit(1) if options.appid: vercodes = common.read_pkg_args(options.appid, True) @@ -99,45 +396,14 @@ def main(): for appid, apk in apks.items(): if not apk: raise FDroidException(_("No signed APK available for %s") % appid) + install_apks_to_devices(apks.values()) - else: + elif options.all: apks = { common.publishednameinfo(apkfile)[0]: apkfile for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))) } - - for appid, apk in apks.items(): - # Get device list each time to avoid device not found errors - devs = devices() - if not devs: - raise FDroidException(_("No attached devices found")) - logging.info(_("Installing %s...") % apk) - for dev in devs: - logging.info( - _("Installing '{apkfilename}' on {dev}...").format( - apkfilename=apk, dev=dev - ) - ) - p = SdkToolsPopen(['adb', "-s", dev, "install", apk]) - fail = "" - for line in p.output.splitlines(): - if line.startswith("Failure"): - fail = line[9:-1] - if not fail: - continue - - if fail == "INSTALL_FAILED_ALREADY_EXISTS": - logging.warning( - _('"{apkfilename}" is already installed on {dev}.').format( - apkfilename=apk, dev=dev - ) - ) - else: - raise FDroidException( - _("Failed to install '{apkfilename}' on {dev}: {error}").format( - apkfilename=apk, dev=dev, error=fail - ) - ) + install_apks_to_devices(apks.values()) logging.info('\n' + _('Finished')) diff --git a/fdroidserver/lint.py b/fdroidserver/lint.py index c4568dcb..99b1a392 100644 --- a/fdroidserver/lint.py +++ b/fdroidserver/lint.py @@ -24,7 +24,7 @@ import urllib.parse from argparse import ArgumentParser from pathlib import Path -import ruamel.yaml +from fdroidserver._yaml import yaml from . import _, common, metadata, rewritemeta @@ -159,10 +159,6 @@ regex_checks = { ], 'Donate': http_checks + [ - ( - re.compile(r'.*flattr\.com'), - _("Flattr donation methods belong in the FlattrID: field"), - ), ( re.compile(r'.*liberapay\.com'), _("Liberapay donation methods belong in the Liberapay: field"), @@ -217,6 +213,82 @@ regex_checks = { ], } +# config keys that are currently ignored by lint, but could be supported. +ignore_config_keys = ( + 'github_releases', + 'java_paths', +) + +bool_keys = ( + 'allow_disabled_algorithms', + 'androidobservatory', + 'build_server_always', + 'deploy_process_logs', + 'keep_when_not_allowed', + 'make_current_version_link', + 'nonstandardwebroot', + 'per_app_repos', + 'refresh_scanner', + 'scan_binary', + 'sync_from_local_copy_dir', +) + +check_config_keys = ( + 'ant', + 'apk_signing_key_block_list', + 'archive', + 'archive_description', + 'archive_icon', + 'archive_name', + 'archive_older', + 'archive_url', + 'archive_web_base_url', + 'awsbucket', + 'awsbucket_index_only', + 'binary_transparency_remote', + 'cachedir', + 'char_limits', + 'current_version_name_source', + 'git_mirror_size_limit', + 'github_token', + 'gpghome', + 'gpgkey', + 'gradle', + 'identity_file', + 'install_list', + 'java_paths', + 'keyaliases', + 'keydname', + 'keypass', + 'keystore', + 'keystorepass', + 'lint_licenses', + 'local_copy_dir', + 'mirrors', + 'mvn3', + 'ndk_paths', + 'path_to_custom_rclone_config', + 'rclone_config', + 'repo', + 'repo_description', + 'repo_icon', + 'repo_key_sha256', + 'repo_keyalias', + 'repo_maxage', + 'repo_name', + 'repo_pubkey', + 'repo_url', + 'repo_web_base_url', + 'scanner_signature_sources', + 'sdk_path', + 'servergitmirrors', + 'serverwebroot', + 'smartcardoptions', + 'sync_from_local_copy_dir', + 'uninstall_list', + 'virustotal_apikey', +) + locale_pattern = re.compile(r"[a-z]{2,3}(-([A-Z][a-zA-Z]+|\d+|[a-z]+))*") versioncode_check_pattern = re.compile(r"(\\d|\[(0-9|\\d)_?(a-fA-F)?])[+]") @@ -297,7 +369,7 @@ def check_update_check_data_int(app): # noqa: D403 # codeex can be empty as well if codeex and not versioncode_check_pattern.search(codeex): yield _( - f'UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}' + f'UpdateCheckData must match the versionCode as integer (\\d or [0-9]): {codeex}' ) @@ -505,11 +577,20 @@ def check_format(app): def check_license_tag(app): - """Ensure all license tags contain only valid/approved values.""" - if config['lint_licenses'] is None: - return - if app.License not in config['lint_licenses']: - if config['lint_licenses'] == APPROVED_LICENSES: + """Ensure all license tags contain only valid/approved values. + + It is possible to disable license checking by setting a null or empty value, + e.g. `lint_licenses: ` or `lint_licenses: []` + + """ + if 'lint_licenses' in config: + lint_licenses = config['lint_licenses'] + if lint_licenses is None: + return + else: + lint_licenses = APPROVED_LICENSES + if app.License not in lint_licenses: + if lint_licenses == APPROVED_LICENSES: yield _( 'Unexpected license tag "{}"! Only use FSF or OSI ' 'approved tags from https://spdx.org/license-list' @@ -530,13 +611,23 @@ def check_extlib_dir(apps): used = set() for app in apps: - for build in app.get('Builds', []): + if app.Disabled: + continue + archive_policy = common.calculate_archive_policy( + app, common.config['archive_older'] + ) + builds = [build for build in app.Builds if not build.disable] + + for i in range(len(builds)): + build = builds[i] for path in build.extlibs: path = Path(path) if path not in extlib_files: - yield _( - "{appid}: Unknown extlib {path} in build '{versionName}'" - ).format(appid=app.id, path=path, versionName=build.versionName) + # Don't show error on archived versions + if i >= len(builds) - archive_policy: + yield _( + "{appid}: Unknown extlib {path} in build '{versionName}'" + ).format(appid=app.id, path=path, versionName=build.versionName) else: used.add(path) @@ -761,7 +852,7 @@ def lint_config(arg): passed = False with path.open() as fp: - data = ruamel.yaml.YAML(typ='safe').load(fp) + data = yaml.load(fp) common.config_type_check(arg, data) if path.name == mirrors_name: @@ -785,6 +876,41 @@ def lint_config(arg): msg += ' ' msg += _('Did you mean {code}?').format(code=', '.join(sorted(m))) print(msg) + elif path.name == config_name and path.parent.name != 'config': + valid_keys = set(tuple(common.default_config) + bool_keys + check_config_keys) + for key in ignore_config_keys: + if key in valid_keys: + valid_keys.remove(key) + for key in data: + if key not in valid_keys: + passed = False + msg = _("ERROR: {key} not a valid key!").format(key=key) + m = difflib.get_close_matches(key.lower(), valid_keys, 2, 0.5) + if m: + msg += ' ' + msg += _('Did you mean {code}?').format(code=', '.join(sorted(m))) + print(msg) + continue + + if key in bool_keys: + t = bool + else: + t = type(common.default_config.get(key, "")) + + show_error = False + if t is str: + if type(data[key]) not in (str, list, dict): + passed = False + show_error = True + elif type(data[key]) != t: + passed = False + show_error = True + if show_error: + print( + _("ERROR: {key}'s value should be of type {t}!").format( + key=key, t=t.__name__ + ) + ) elif path.name in (config_name, categories_name, antifeatures_name): for key in data: if path.name == config_name and key not in ('archive', 'repo'): @@ -858,7 +984,7 @@ def main(): paths = list() for arg in options.appid: if ( - arg == 'config.yml' + arg == common.CONFIG_FILE or Path(arg).parent.name == 'config' or Path(arg).parent.parent.name == 'config' # localized ): @@ -882,9 +1008,7 @@ def main(): def lint_metadata(options): - # Get all apps... - allapps = metadata.read_metadata(options.appid) - apps = common.read_app_args(options.appid, allapps, False) + apps = common.read_app_args(options.appid) anywarns = check_for_unsupported_metadata_files() diff --git a/fdroidserver/looseversion.py b/fdroidserver/looseversion.py index 0c785d69..c2a32213 100644 --- a/fdroidserver/looseversion.py +++ b/fdroidserver/looseversion.py @@ -115,7 +115,7 @@ __license__ = "Python License 2.0" # been done in the StrictVersion class above. This works great as long # as everyone can go along with bondage and discipline. Hopefully a # (large) subset of Python module programmers will agree that the -# particular flavour of bondage and discipline provided by StrictVersion +# particular flavor of bondage and discipline provided by StrictVersion # provides enough benefit to be worth using, and will submit their # version numbering scheme to its domination. The free-thinking # anarchists in the lot will never give in, though, and something needs diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index ce7e5ee8..0d9195be 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -18,18 +18,18 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import git -from pathlib import Path -import math -import platform -import os -import re import logging -import ruamel.yaml +import math +import os +import platform +import re from collections import OrderedDict +from pathlib import Path -from . import common -from . import _ +import ruamel.yaml + +from . import _, common +from ._yaml import yaml from .exception import MetaDataException srclibs = None @@ -67,7 +67,6 @@ yaml_app_field_order = [ 'Translation', 'Changelog', 'Donate', - 'FlattrID', 'Liberapay', 'OpenCollective', 'Bitcoin', @@ -128,7 +127,6 @@ class App(dict): self.Translation = '' self.Changelog = '' self.Donate = None - self.FlattrID = None self.Liberapay = None self.OpenCollective = None self.Bitcoin = None @@ -408,10 +406,6 @@ class FieldValidator: # Generic value types valuetypes = { - FieldValidator("Flattr ID", - r'^[0-9a-z]+$', - ['FlattrID']), - FieldValidator("Liberapay", VALID_USERNAME_REGEX, ['Liberapay']), @@ -478,7 +472,6 @@ def parse_yaml_srclib(metadatapath): with metadatapath.open("r", encoding="utf-8") as f: try: - yaml = ruamel.yaml.YAML(typ='safe') data = yaml.load(f) if type(data) is not dict: if platform.system() == 'Windows': @@ -544,14 +537,14 @@ def read_srclibs(): srclibs = {} - srcdir = Path('srclibs') - srcdir.mkdir(exist_ok=True) + srclibs_dir = Path('srclibs') + srclibs_dir.mkdir(exist_ok=True) - for metadatapath in sorted(srcdir.glob('*.yml')): + for metadatapath in sorted(srclibs_dir.glob('*.yml')): srclibs[metadatapath.stem] = parse_yaml_srclib(metadatapath) -def read_metadata(appids={}, sort_by_time=False): +def read_metadata(appid_to_vercode={}, sort_by_time=False): """Return a list of App instances sorted newest first. This reads all of the metadata files in a 'data' repository, then @@ -559,7 +552,7 @@ def read_metadata(appids={}, sort_by_time=False): sorted based on creation time, newest first. Most of the time, the newer files are the most interesting. - appids is a dict with appids a keys and versionCodes as values. + appid_to_vercode is a dict with appids a keys and versionCodes as values. """ # Always read the srclibs before the apps, since they can use a srlib as @@ -571,9 +564,8 @@ def read_metadata(appids={}, sort_by_time=False): for basedir in ('metadata', 'tmp'): Path(basedir).mkdir(exist_ok=True) - if appids: - vercodes = common.read_pkg_args(appids) - metadatafiles = common.get_metadata_files(vercodes) + if appid_to_vercode: + metadatafiles = common.get_metadata_files(appid_to_vercode) else: metadatafiles = list(Path('metadata').glob('*.yml')) + list( Path('.').glob('.fdroid.yml') @@ -665,14 +657,12 @@ def parse_metadata(metadatapath): build_dir = common.get_build_dir(app) metadata_in_repo = build_dir / '.fdroid.yml' if metadata_in_repo.is_file(): - try: - commit_id = common.get_head_commit_id(git.Repo(build_dir)) + commit_id = common.get_head_commit_id(build_dir) + if commit_id is not None: logging.debug( _('Including metadata from %s@%s') % (metadata_in_repo, commit_id) ) - # See https://github.com/PyCQA/pylint/issues/2856 . - # pylint: disable-next=no-member - except git.exc.InvalidGitRepositoryError: + else: logging.debug( _('Including metadata from {path}').format(path=metadata_in_repo) ) @@ -716,8 +706,7 @@ def parse_yaml_metadata(mf): """ try: - yaml = ruamel.yaml.YAML(typ='safe') - yamldata = yaml.load(mf) + yamldata = common.yaml.load(mf) except ruamel.yaml.YAMLError as e: _warn_or_exception( _("could not parse '{path}'").format(path=mf.name) @@ -1256,19 +1245,24 @@ def _app_to_yaml(app): def write_yaml(mf, app): """Write metadata in yaml format. + This requires the 'rt' round trip dumper to maintain order and needs + custom indent settings, so it needs to instantiate its own YAML + instance. Therefore, this function deliberately avoids using any of + the common YAML parser setups. + Parameters ---------- mf active file discriptor for writing app - app metadata to written to the yaml file + app metadata to written to the YAML file """ _del_duplicated_NoSourceSince(app) yaml_app = _app_to_yaml(app) - yaml = ruamel.yaml.YAML() - yaml.indent(mapping=2, sequence=4, offset=2) - yaml.dump(yaml_app, stream=mf) + yamlmf = ruamel.yaml.YAML(typ='rt') + yamlmf.indent(mapping=2, sequence=4, offset=2) + yamlmf.dump(yaml_app, stream=mf) def write_metadata(metadatapath, app): diff --git a/fdroidserver/mirror.py b/fdroidserver/mirror.py index 1483ddf1..b06df3b1 100644 --- a/fdroidserver/mirror.py +++ b/fdroidserver/mirror.py @@ -7,13 +7,10 @@ import posixpath import socket import subprocess import sys -from argparse import ArgumentParser import urllib.parse +from argparse import ArgumentParser -from . import _ -from . import common -from . import index -from . import update +from . import _, common, index, update def _run_wget(path, urls, verbose=False): @@ -91,7 +88,7 @@ def main(): ) options = common.parse_args(parser) - common.set_console_logging(options.verbose) + common.set_console_logging(options.verbose, options.color) if options.all: options.archive = True @@ -133,6 +130,7 @@ def main(): import io import json import zipfile + from . import net url = _append_to_url_path(section, 'index-v1.jar') diff --git a/fdroidserver/net.py b/fdroidserver/net.py index 49d67f2c..fe097fd5 100644 --- a/fdroidserver/net.py +++ b/fdroidserver/net.py @@ -17,13 +17,21 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import copy import logging import os -import requests +import random +import tempfile import time import urllib + +import requests +import urllib3 from requests.adapters import HTTPAdapter, Retry -from requests.exceptions import ChunkedEncodingError + +from . import _, common + +logger = logging.getLogger(__name__) HEADERS = {'User-Agent': 'F-Droid'} @@ -64,14 +72,88 @@ def download_file(url, local_filename=None, dldir='tmp', retries=3, backoff_fact f.write(chunk) f.flush() return local_filename - except ChunkedEncodingError as err: + except requests.exceptions.ChunkedEncodingError as err: if i == retries: raise err - logging.warning('Download interrupted, retrying...') + logger.warning('Download interrupted, retrying...') time.sleep(backoff_factor * 2**i) raise ValueError("retries must be >= 0") +def download_using_mirrors(mirrors, local_filename=None): + """Try to download the file from any working mirror. + + Download the file that all URLs in the mirrors list point to, + trying all the tricks, starting with the most private methods + first. The list of mirrors is converted into a list of mirror + configurations to try, in order that the should be attempted. + + This builds mirror_configs_to_try using all possible combos to + try. If a mirror is marked with worksWithoutSNI: True, then this + logic will try it twice: first without SNI, then again with SNI. + + """ + mirrors = common.parse_list_of_dicts(mirrors) + mirror_configs_to_try = [] + for mirror in mirrors: + mirror_configs_to_try.append(mirror) + if mirror.get('worksWithoutSNI'): + m = copy.deepcopy(mirror) + del m['worksWithoutSNI'] + mirror_configs_to_try.append(m) + + if not local_filename: + for mirror in mirrors: + filename = urllib.parse.urlparse(mirror['url']).path.split('/')[-1] + if filename: + break + if filename: + local_filename = os.path.join(common.get_cachedir(), filename) + else: + local_filename = tempfile.mkstemp(prefix='fdroid-') + + timeouts = (2, 10, 100) + last_exception = None + for timeout in timeouts: + for mirror in mirror_configs_to_try: + last_exception = None + urllib3.util.ssl_.HAS_SNI = not mirror.get('worksWithoutSNI') + try: + # the stream=True parameter keeps memory usage low + r = requests.get( + mirror['url'], + stream=True, + allow_redirects=False, + headers=HEADERS, + # add jitter to the timeout to be less predictable + timeout=timeout + random.randint(0, timeout), # nosec B311 + ) + if r.status_code != 200: + raise requests.exceptions.HTTPError(r.status_code, response=r) + with open(local_filename, 'wb') as f: + for chunk in r.iter_content(chunk_size=1024): + if chunk: # filter out keep-alive new chunks + f.write(chunk) + f.flush() + return local_filename + except ( + ConnectionError, + requests.exceptions.ChunkedEncodingError, + requests.exceptions.ConnectionError, + requests.exceptions.ContentDecodingError, + requests.exceptions.HTTPError, + requests.exceptions.SSLError, + requests.exceptions.StreamConsumedError, + requests.exceptions.Timeout, + requests.exceptions.UnrewindableBodyError, + ) as e: + last_exception = e + logger.debug(_('Retrying failed download: %s') % str(e)) + # if it hasn't succeeded by now, then give up and raise last exception + if last_exception: + raise last_exception + + def http_get(url, etag=None, timeout=600): """Download the content from the given URL by making a GET request. diff --git a/fdroidserver/nightly.py b/fdroidserver/nightly.py index 1b7251ee..372390ea 100644 --- a/fdroidserver/nightly.py +++ b/fdroidserver/nightly.py @@ -19,24 +19,25 @@ import base64 import datetime -import git import hashlib +import inspect import logging import os -import paramiko import platform import shutil import ssl import subprocess import sys import tempfile -import yaml -from urllib.parse import urlparse from argparse import ArgumentParser from typing import Optional +from urllib.parse import urlparse -from . import _ -from . import common +import git +import paramiko +import yaml + +from . import _, common from .exception import VCSException # hard coded defaults for Android ~/.android/debug.keystore files @@ -176,7 +177,9 @@ def _ssh_key_from_debug_keystore(keystore: Optional[str] = None) -> str: return ssh_private_key_file -def get_repo_base_url(clone_url: str, repo_git_base: str, force_type: Optional[str] = None) -> str: +def get_repo_base_url( + clone_url: str, repo_git_base: str, force_type: Optional[str] = None +) -> str: """Generate the base URL for the F-Droid repository. Parameters @@ -203,6 +206,41 @@ def get_repo_base_url(clone_url: str, repo_git_base: str, force_type: Optional[s sys.exit(1) +def clone_git_repo(clone_url, git_mirror_path): + """Clone a git repo into the given path, failing if a password is required. + + If GitPython's safe mode is present, this will use that. Otherwise, + this includes a very limited version of the safe mode just to ensure + this won't hang on password prompts. + + https://github.com/gitpython-developers/GitPython/pull/2029 + + """ + logging.debug(_('cloning {url}').format(url=clone_url)) + try: + sig = inspect.signature(git.Repo.clone_from) + if 'safe' in sig.parameters: + git.Repo.clone_from(clone_url, git_mirror_path, safe=True) + else: + git.Repo.clone_from( + clone_url, + git_mirror_path, + env={ + 'GIT_ASKPASS': '/bin/true', + 'SSH_ASKPASS': '/bin/true', + 'GIT_USERNAME': 'u', + 'GIT_PASSWORD': 'p', + 'GIT_HTTP_USERNAME': 'u', + 'GIT_HTTP_PASSWORD': 'p', + 'GIT_SSH': '/bin/false', # for git < 2.3 + 'GIT_TERMINAL_PROMPT': '0', + }, + ) + except git.exc.GitCommandError as e: + logging.warning(_('WARNING: only public git repos are supported!')) + raise VCSException(f'git clone {clone_url} failed:', str(e)) from e + + def main(): """Deploy to F-Droid repository or generate SSH private key from keystore. @@ -288,19 +326,27 @@ def main(): # we are in GitLab CI repo_git_base = os.getenv('CI_PROJECT_PATH') + NIGHTLY clone_url = os.getenv('CI_PROJECT_URL') + NIGHTLY - repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='gitlab.com') + repo_base = get_repo_base_url( + clone_url, repo_git_base, force_type='gitlab.com' + ) servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base - deploy_key_url = clone_url + '/-/settings/repository#js-deploy-keys-settings' + deploy_key_url = ( + f'{clone_url}/-/settings/repository#js-deploy-keys-settings' + ) git_user_name = os.getenv('GITLAB_USER_NAME') git_user_email = os.getenv('GITLAB_USER_EMAIL') elif 'TRAVIS_REPO_SLUG' in os.environ: # we are in Travis CI repo_git_base = os.getenv('TRAVIS_REPO_SLUG') + NIGHTLY clone_url = 'https://github.com/' + repo_git_base - repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') + repo_base = get_repo_base_url( + clone_url, repo_git_base, force_type='github.com' + ) servergitmirror = 'git@github.com:' + repo_git_base - deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' - + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') + deploy_key_url = ( + f'https://github.com/{repo_git_base}/settings/keys' + + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys' + ) git_user_name = repo_git_base git_user_email = os.getenv('USER') + '@' + platform.node() elif ( @@ -309,23 +355,35 @@ def main(): and 'CIRCLE_PROJECT_REPONAME' in os.environ ): # we are in Circle CI - repo_git_base = (os.getenv('CIRCLE_PROJECT_USERNAME') - + '/' + os.getenv('CIRCLE_PROJECT_REPONAME') + NIGHTLY) + repo_git_base = ( + os.getenv('CIRCLE_PROJECT_USERNAME') + + '/' + + os.getenv('CIRCLE_PROJECT_REPONAME') + + NIGHTLY + ) clone_url = os.getenv('CIRCLE_REPOSITORY_URL') + NIGHTLY - repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') + repo_base = get_repo_base_url( + clone_url, repo_git_base, force_type='github.com' + ) servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base - deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' - + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') + deploy_key_url = ( + f'https://github.com/{repo_git_base}/settings/keys' + + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys' + ) git_user_name = os.getenv('CIRCLE_USERNAME') git_user_email = git_user_name + '@' + platform.node() elif 'GITHUB_ACTIONS' in os.environ: # we are in Github actions - repo_git_base = (os.getenv('GITHUB_REPOSITORY') + NIGHTLY) - clone_url = (os.getenv('GITHUB_SERVER_URL') + '/' + repo_git_base) - repo_base = get_repo_base_url(clone_url, repo_git_base, force_type='github.com') + repo_git_base = os.getenv('GITHUB_REPOSITORY') + NIGHTLY + clone_url = os.getenv('GITHUB_SERVER_URL') + '/' + repo_git_base + repo_base = get_repo_base_url( + clone_url, repo_git_base, force_type='github.com' + ) servergitmirror = 'git@' + urlparse(clone_url).netloc + ':' + repo_git_base - deploy_key_url = ('https://github.com/' + repo_git_base + '/settings/keys' - + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys') + deploy_key_url = ( + f'https://github.com/{repo_git_base}/settings/keys' + + '\nhttps://developer.github.com/v3/guides/managing-deploy-keys/#deploy-keys' + ) git_user_name = os.getenv('GITHUB_ACTOR') git_user_email = git_user_name + '@' + platform.node() else: @@ -337,16 +395,12 @@ def main(): git_mirror_fdroiddir = os.path.join(git_mirror_path, 'fdroid') git_mirror_repodir = os.path.join(git_mirror_fdroiddir, 'repo') git_mirror_metadatadir = os.path.join(git_mirror_fdroiddir, 'metadata') - git_mirror_statsdir = os.path.join(git_mirror_fdroiddir, 'stats') if not os.path.isdir(git_mirror_repodir): - logging.debug(_('cloning {url}').format(url=clone_url)) - vcs = common.getvcs('git', clone_url, git_mirror_path) - p = vcs.git(['clone', '--', vcs.remote, str(vcs.local)]) - if p.returncode != 0: - print('WARNING: only public git repos are supported!') - raise VCSException('git clone %s failed:' % clone_url, p.output) + clone_git_repo(clone_url, git_mirror_path) if not os.path.isdir(git_mirror_repodir): os.makedirs(git_mirror_repodir, mode=0o755) + if os.path.exists('LICENSE'): + shutil.copy2('LICENSE', git_mirror_path) mirror_git_repo = git.Repo.init(git_mirror_path) writer = mirror_git_repo.config_writer() @@ -365,9 +419,13 @@ You can use it with the [F-Droid](https://f-droid.org/) Android app. [![{repo_url}]({repo_url}/icons/icon.png)](https://fdroid.link/#{repo_url}) -Last updated: {date}'''.format(repo_git_base=repo_git_base, - repo_url=repo_url, - date=datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S UTC')) +Last updated: {date}'''.format( + repo_git_base=repo_git_base, + repo_url=repo_url, + date=datetime.datetime.now(datetime.timezone.utc).strftime( + '%Y-%m-%d %H:%M:%S UTC' + ), + ) with open(readme_path, 'w') as fp: fp.write(readme) mirror_git_repo.git.add(all=True) @@ -381,8 +439,6 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, common.local_rsync(options, [git_mirror_repodir + '/'], 'repo/') if os.path.isdir(git_mirror_metadatadir): common.local_rsync(options, [git_mirror_metadatadir + '/'], 'metadata/') - if os.path.isdir(git_mirror_statsdir): - common.local_rsync(options, [git_mirror_statsdir + '/'], 'stats/') ssh_private_key_file = _ssh_key_from_debug_keystore() # this is needed for GitPython to find the SSH key @@ -422,19 +478,17 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, 'keypass': PASSWORD, 'keydname': DISTINGUISHED_NAME, 'make_current_version_link': False, - 'update_stats': True, } - with open('config.yml', 'w') as fp: + with open(common.CONFIG_FILE, 'w', encoding='utf-8') as fp: yaml.dump(config, fp, default_flow_style=False) - os.chmod('config.yml', 0o600) + os.chmod(common.CONFIG_FILE, 0o600) config = common.read_config() common.assert_config_keystore(config) logging.debug( - _('Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}').format( - cibase=cibase, - repo_basedir=repo_basedir - ) + _( + 'Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}' + ).format(cibase=cibase, repo_basedir=repo_basedir) ) for root, dirs, files in os.walk(cibase): @@ -496,7 +550,6 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, common.local_rsync( options, [repo_basedir + '/metadata/'], git_mirror_metadatadir + '/' ) - common.local_rsync(options, [repo_basedir + '/stats/'], git_mirror_statsdir + '/') mirror_git_repo.git.add(all=True) mirror_git_repo.index.commit("update app metadata") @@ -523,10 +576,16 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base, if not os.path.exists(androiddir): os.mkdir(androiddir) logging.info(_('created {path}').format(path=androiddir)) - logging.error(_('{path} does not exist! Create it by running:').format(path=options.keystore) - + '\n keytool -genkey -v -keystore ' + options.keystore + ' -storepass android \\' - + '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\' - + '\n -dname "CN=Android Debug,O=Android,C=US"') + logging.error( + _('{path} does not exist! Create it by running:').format( + path=options.keystore + ) + + '\n keytool -genkey -v -keystore ' + + options.keystore + + ' -storepass android \\' + + '\n -alias androiddebugkey -keypass android -keyalg RSA -keysize 2048 -validity 10000 \\' + + '\n -dname "CN=Android Debug,O=Android,C=US"' + ) sys.exit(1) ssh_dir = os.path.join(os.getenv('HOME'), '.ssh') privkey = _ssh_key_from_debug_keystore(options.keystore) diff --git a/fdroidserver/publish.py b/fdroidserver/publish.py index 0b499717..42945166 100644 --- a/fdroidserver/publish.py +++ b/fdroidserver/publish.py @@ -28,23 +28,21 @@ mostly reports success by moving an APK from unsigned/ to repo/ """ -import sys +import glob +import hashlib +import json +import logging import os import re import shutil -import glob -import hashlib -from argparse import ArgumentParser -from collections import OrderedDict -import logging -from gettext import ngettext -import json +import sys import time import zipfile +from argparse import ArgumentParser +from collections import OrderedDict +from gettext import ngettext -from . import _ -from . import common -from . import metadata +from . import _, common, metadata from .common import FDroidPopen from .exception import BuildException, FDroidException @@ -139,13 +137,13 @@ def sign_sig_key_fingerprint_list(jar_file): raise FDroidException("Failed to sign '{}'!".format(jar_file)) -def store_stats_fdroid_signing_key_fingerprints(appids, indent=None): +def store_publish_signer_fingerprints(appids, indent=None): """Store list of all signing-key fingerprints for given appids to HD. This list will later on be needed by fdroid update. """ - if not os.path.exists('stats'): - os.makedirs('stats') + if not os.path.exists('repo'): + os.makedirs('repo') data = OrderedDict() fps = read_fingerprints_from_keystore() for appid in sorted(appids): @@ -153,9 +151,12 @@ def store_stats_fdroid_signing_key_fingerprints(appids, indent=None): if alias in fps: data[appid] = {'signer': fps[key_alias(appid)]} - jar_file = os.path.join('stats', 'publishsigkeys.jar') + jar_file = os.path.join('repo', 'signer-index.jar') + output = json.dumps(data, indent=indent) with zipfile.ZipFile(jar_file, 'w', zipfile.ZIP_DEFLATED) as jar: - jar.writestr('publishsigkeys.json', json.dumps(data, indent=indent)) + jar.writestr('signer-index.json', output) + with open(os.path.join('repo', 'signer-index.json'), 'w') as fp: + fp.write(output) sign_sig_key_fingerprint_list(jar_file) @@ -344,7 +345,6 @@ def main(): glob.glob(os.path.join(unsigned_dir, '*.apk')) + glob.glob(os.path.join(unsigned_dir, '*.zip')) ): - appid, vercode = common.publishednameinfo(apkfile) apkfilename = os.path.basename(apkfile) if vercodes and appid not in vercodes: @@ -368,7 +368,6 @@ def main(): if b.get("versionCode") == vercode: build = b if app.Binaries or (build and build.binary): - # It's an app where we build from source, and verify the apk # contents against a developer's binary, and then publish their # version if everything checks out. @@ -379,15 +378,21 @@ def main(): srcapk = srcapk.replace(unsigned_dir, binaries_dir) if not os.path.isfile(srcapk): - logging.error("...reference binary missing - publish skipped: " - "'{refpath}'".format(refpath=srcapk)) + logging.error( + "...reference binary missing - publish skipped: '{refpath}'".format( + refpath=srcapk + ) + ) failed += 1 else: # Compare our unsigned one with the downloaded one... compare_result = common.verify_apks(srcapk, apkfile, tmp_dir) if compare_result: - logging.error("...verification failed - publish skipped : " - "{result}".format(result=compare_result)) + logging.error( + "...verification failed - publish skipped : {result}".format( + result=compare_result + ) + ) failed += 1 else: # Success! So move the downloaded file to the repo, and remove @@ -399,7 +404,6 @@ def main(): logging.info('Published ' + apkfilename) elif apkfile.endswith('.zip'): - # OTA ZIPs built by fdroid do not need to be signed by jarsigner, # just to be moved into place in the repo shutil.move(apkfile, os.path.join(output_dir, apkfilename)) @@ -407,7 +411,6 @@ def main(): logging.info('Published ' + apkfilename) else: - # It's a 'normal' app, i.e. we sign and publish it... skipsigning = False @@ -446,10 +449,11 @@ def main(): signed_apk_path = os.path.join(output_dir, apkfilename) if os.path.exists(signed_apk_path): - raise BuildException("Refusing to sign '{0}' file exists in both " - "{1} and {2} folder.".format(apkfilename, - unsigned_dir, - output_dir)) + raise BuildException( + _( + "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." + ).format(path=apkfilename, dir1=unsigned_dir, dir2=output_dir) + ) # Sign the application... common.sign_apk(apkfile, signed_apk_path, keyalias) @@ -460,7 +464,7 @@ def main(): publish_source_tarball(apkfilename, unsigned_dir, output_dir) logging.info('Published ' + apkfilename) - store_stats_fdroid_signing_key_fingerprints(allapps.keys()) + store_publish_signer_fingerprints(allapps.keys()) status_update_json(generated_keys, signed_apks) logging.info('published list signing-key fingerprints') diff --git a/fdroidserver/readmeta.py b/fdroidserver/readmeta.py index b8049a9f..b3ef7c3b 100644 --- a/fdroidserver/readmeta.py +++ b/fdroidserver/readmeta.py @@ -17,8 +17,8 @@ # along with this program. If not, see . from argparse import ArgumentParser -from . import common -from . import metadata + +from . import common, metadata def main(): diff --git a/fdroidserver/rewritemeta.py b/fdroidserver/rewritemeta.py index 7f003ac3..4bbe810d 100644 --- a/fdroidserver/rewritemeta.py +++ b/fdroidserver/rewritemeta.py @@ -17,16 +17,14 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from argparse import ArgumentParser -import logging import io -import tempfile +import logging import shutil +import tempfile +from argparse import ArgumentParser from pathlib import Path -from . import _ -from . import common -from . import metadata +from . import _, common, metadata config = None @@ -81,9 +79,7 @@ def main(): config = common.read_config() - # Get all apps... - allapps = metadata.read_metadata(options.appid) - apps = common.read_app_args(options.appid, allapps, False) + apps = common.read_app_args(options.appid) for appid, app in apps.items(): path = Path(app.metadatapath) diff --git a/fdroidserver/scanner.py b/fdroidserver/scanner.py index 62bf9ff2..f28e3803 100644 --- a/fdroidserver/scanner.py +++ b/fdroidserver/scanner.py @@ -16,7 +16,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import imghdr import itertools import json import logging @@ -29,10 +28,21 @@ import urllib.request import zipfile from argparse import ArgumentParser from dataclasses import dataclass, field, fields -from datetime import datetime, timedelta +from datetime import datetime, timedelta, timezone from enum import IntEnum from pathlib import Path from tempfile import TemporaryDirectory +from typing import Union + +try: + import magic +except ImportError: + import puremagic as magic + +if sys.version_info >= (3, 11): + import tomllib +else: + import tomli as tomllib from . import _, common, metadata, scanner from .exception import BuildException, ConfigurationException, VCSException @@ -53,18 +63,198 @@ MAVEN_URL_REGEX = re.compile( DEPFILE = { "Cargo.toml": ["Cargo.lock"], "pubspec.yaml": ["pubspec.lock"], - "package.json": ["package-lock.json", "yarn.lock", "pnpm-lock.yaml"], + "package.json": ["package-lock.json", "yarn.lock", "pnpm-lock.yaml", "bun.lock"], } SCANNER_CACHE_VERSION = 1 +DEFAULT_CATALOG_PREFIX_REGEX = re.compile( + r'''defaultLibrariesExtensionName\s*=\s*['"](\w+)['"]''' +) +GRADLE_CATALOG_FILE_REGEX = re.compile( + r'''(?:create\()?['"]?(\w+)['"]?\)?\s*\{[^}]*from\(files\(['"]([^"]+)['"]\)\)''' +) +VERSION_CATALOG_REGEX = re.compile(r'versionCatalogs\s*\{') + +APK_SIGNING_BLOCK_IDS = { + # https://source.android.com/docs/security/features/apksigning/v2#apk-signing-block + # 0x7109871a: 'APK signature scheme v2', + # https://source.android.com/docs/security/features/apksigning/v3#apk-signing-block + # 0xf05368c0: 'APK signature scheme v3', + # See "Security metadata in early 2018" + # https://android-developers.googleblog.com/2017/12/improving-app-security-and-performance.html + 0x2146444E: 'Google Play Signature aka "Frosting"', + # 0x42726577: 'Verity padding', + # 0x6DFF800D: 'Source stamp V2 X509 cert', + # JSON with some metadata, used by Chinese company Meituan + 0x71777777: 'Meituan payload', + # Dependencies metadata generated by Gradle and encrypted by Google Play. + # '...The data is compressed, encrypted by a Google Play signing key...' + # https://developer.android.com/studio/releases/gradle-plugin#dependency-metadata + 0x504B4453: 'Dependency metadata', +} + class ExitCode(IntEnum): NONFREE_CODE = 1 +class GradleVersionCatalog: + """Parse catalog from libs.versions.toml. + + https://docs.gradle.org/current/userguide/platforms.html + """ + + def __init__(self, catalog): + self.version = { + alias: self.get_version(version) + for alias, version in catalog.get("versions", {}).items() + } + self.libraries = { + self.alias_to_accessor(alias): self.library_to_coordinate(library) + for alias, library in catalog.get("libraries", {}).items() + } + self.plugins = { + self.alias_to_accessor(alias): self.plugin_to_coordinate(plugin) + for alias, plugin in catalog.get("plugins", {}).items() + } + self.bundles = { + self.alias_to_accessor(alias): self.bundle_to_coordinates(bundle) + for alias, bundle in catalog.get("bundles", {}).items() + } + + @staticmethod + def alias_to_accessor(alias: str) -> str: + """Covert alias to accessor. + + https://docs.gradle.org/current/userguide/platforms.html#sub:mapping-aliases-to-accessors + Alias is used to define a lib in catalog. Accessor is used to access it. + """ + return alias.replace("-", ".").replace("_", ".") + + def get_version(self, version: Union[dict, str]) -> str: + if isinstance(version, str): + return version + ref = version.get("ref") + if ref: + return self.version.get(ref, "") + return ( + version.get("prefer", "") + or version.get("require", "") + or version.get("strictly", "") + ) + + def library_to_coordinate(self, library: Union[dict, str]) -> str: + """Generate the Gradle dependency coordinate from catalog.""" + if isinstance(library, str): + return library + module = library.get("module") + if not module: + group = library.get("group") + name = library.get("name") + if group and name: + module = f"{group}:{name}" + else: + return "" + + version = library.get("version") + if version: + return f"{module}:{self.get_version(version)}" + else: + return module + + def plugin_to_coordinate(self, plugin: Union[dict, str]) -> str: + """Generate the Gradle plugin coordinate from catalog.""" + if isinstance(plugin, str): + return plugin + id = plugin.get("id") + if not id: + return "" + + version = plugin.get("version") + if version: + return f"{id}:{self.get_version(version)}" + else: + return id + + def bundle_to_coordinates(self, bundle: list[str]) -> list[str]: + """Generate the Gradle dependency bundle coordinate from catalog.""" + coordinates = [] + for alias in bundle: + library = self.libraries.get(self.alias_to_accessor(alias)) + if library: + coordinates.append(library) + return coordinates + + def get_coordinate(self, accessor: str) -> list[str]: + """Get the Gradle coordinate from the catalog with an accessor.""" + if accessor.startswith("plugins."): + return [ + self.plugins.get(accessor[8:].removesuffix(".asLibraryDependency"), "") + ] + if accessor.startswith("bundles."): + return self.bundles.get(accessor[8:], []) + return [self.libraries.get(accessor, "")] + + +def get_catalogs(root: str) -> dict[str, GradleVersionCatalog]: + """Get all Gradle dependency catalogs from settings.gradle[.kts]. + + Returns a dict with the extension and the corresponding catalog. + The extension is used as the prefix of the accessor to access libs in the catalog. + """ + root = Path(root) + catalogs = {} + default_prefix = "libs" + catalog_files_m = [] + + def find_block_end(s, start): + pat = re.compile("[{}]") + depth = 1 + for m in pat.finditer(s, pos=start): + if m.group() == "{": + depth += 1 + else: + depth -= 1 + if depth == 0: + return m.start() + else: + return -1 + + groovy_file = root / "settings.gradle" + kotlin_file = root / "settings.gradle.kts" + if groovy_file.is_file(): + gradle_file = groovy_file + elif kotlin_file.is_file(): + gradle_file = kotlin_file + else: + return {} + + s = gradle_file.read_text(encoding="utf-8") + version_catalogs_m = VERSION_CATALOG_REGEX.search(s) + if version_catalogs_m: + start = version_catalogs_m.end() + end = find_block_end(s, start) + catalog_files_m = GRADLE_CATALOG_FILE_REGEX.finditer(s, start, end) + + m_default = DEFAULT_CATALOG_PREFIX_REGEX.search(s) + if m_default: + default_prefix = m_default.group(1) + default_catalog_file = Path(root) / "gradle/libs.versions.toml" + if default_catalog_file.is_file(): + with default_catalog_file.open("rb") as f: + catalogs[default_prefix] = GradleVersionCatalog(tomllib.load(f)) + for m in catalog_files_m: + catalog_file = Path(root) / m.group(2).replace("$rootDir/", "") + if catalog_file.is_file(): + with catalog_file.open("rb") as f: + catalogs[m.group(1)] = GradleVersionCatalog(tomllib.load(f)) + return catalogs + + def get_gradle_compile_commands(build): compileCommands = [ + 'alias', 'api', 'apk', 'classpath', @@ -76,19 +266,30 @@ def get_gradle_compile_commands(build): 'runtimeOnly', ] buildTypes = ['', 'release'] - flavors = [''] if build.gradle and build.gradle != ['yes']: - flavors += build.gradle + flavors = common.calculate_gradle_flavor_combination(build.gradle) + else: + flavors = [''] - commands = [ - ''.join(c) for c in itertools.product(flavors, buildTypes, compileCommands) + return [''.join(c) for c in itertools.product(flavors, buildTypes, compileCommands)] + + +def get_gradle_compile_commands_without_catalog(build): + return [ + re.compile(rf'''\s*{c}.*\s*\(?['"].*['"]''', re.IGNORECASE) + for c in get_gradle_compile_commands(build) + ] + + +def get_gradle_compile_commands_with_catalog(build, prefix): + return [ + re.compile(rf'\s*{c}.*\s*\(?{prefix}\.([a-z0-9.]+)', re.IGNORECASE) + for c in get_gradle_compile_commands(build) ] - return [re.compile(r'\s*' + c, re.IGNORECASE) for c in commands] def get_embedded_classes(apkfile, depth=0): - """ - Get the list of Java classes embedded into all DEX files. + """Get the list of Java classes embedded into all DEX files. :return: set of Java classes names as string """ @@ -134,7 +335,7 @@ def get_embedded_classes(apkfile, depth=0): def _datetime_now(): """Get datetime.now(), using this funciton allows mocking it for testing.""" - return datetime.utcnow() + return datetime.now(timezone.utc) def _scanner_cachedir(): @@ -183,8 +384,7 @@ class SignatureDataController: raise SignatureDataVersionMismatchException() def check_last_updated(self): - """ - Check if the last_updated value is ok and raise an exception if expired or inaccessible. + """Check if the last_updated value is ok and raise an exception if expired or inaccessible. :raises SignatureDataMalformedException: when timestamp value is inaccessible or not parse-able @@ -194,7 +394,7 @@ class SignatureDataController: last_updated = self.data.get("last_updated", None) if last_updated: try: - last_updated = datetime.fromtimestamp(last_updated) + last_updated = datetime.fromtimestamp(last_updated, timezone.utc) except ValueError as e: raise SignatureDataMalformedException() from e except TypeError as e: @@ -259,8 +459,7 @@ class SignatureDataController: logging.debug("write '{}' to cache".format(self.filename)) def verify_data(self): - """ - Clean and validate `self.data`. + """Clean and validate `self.data`. Right now this function does just a basic key sanitation. """ @@ -354,6 +553,8 @@ class SUSSDataController(SignatureDataController): class ScannerTool: + refresh_allowed = True + def __init__(self): # we could add support for loading additional signature source # definitions from config.yml here @@ -362,7 +563,9 @@ class ScannerTool: options = common.get_options() options_refresh_scanner = ( - hasattr(options, "refresh_scanner") and options.refresh_scanner + hasattr(options, "refresh_scanner") + and options.refresh_scanner + and ScannerTool.refresh_allowed ) if options_refresh_scanner or common.get_config().get('refresh_scanner'): self.refresh() @@ -447,8 +650,7 @@ _SCANNER_TOOL = None def _get_tool(): - """ - Lazy loading function for getting a ScannerTool instance. + """Lazy loading function for getting a ScannerTool instance. ScannerTool initialization need to access `common.config` values. Those are only available after initialization through `common.read_config()`. So this factory assumes config was called at an erlier point in time. """ @@ -471,6 +673,17 @@ def scan_binary(apkfile): if regexp.match(classname): logging.debug("Problem: found class '%s'" % classname) problems += 1 + + logging.info(_('Scanning APK for extra signing blocks.')) + a = common.get_androguard_APK(str(apkfile)) + a.parse_v2_v3_signature() + for b in a._v2_blocks: + if b in APK_SIGNING_BLOCK_IDS: + logging.debug( + f"Problem: found extra signing block '{APK_SIGNING_BLOCK_IDS[b]}'" + ) + problems += 1 + if warnings: logging.warning( _("Found {count} warnings in {filename}").format( @@ -492,6 +705,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): Returns ------- the number of fatal problems encountered. + """ count = 0 @@ -507,11 +721,11 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): re.compile(r'^https://' + re.escape(repo) + r'/*') for repo in [ 'repo1.maven.org/maven2', # mavenCentral() - 'jcenter.bintray.com', # jcenter() 'jitpack.io', 'www.jitpack.io', 'repo.maven.apache.org/maven2', 'oss.jfrog.org/artifactory/oss-snapshot-local', + 'central.sonatype.com/repository/maven-snapshots', 'oss.sonatype.org/content/repositories/snapshots', 'oss.sonatype.org/content/repositories/releases', 'oss.sonatype.org/content/groups/public', @@ -533,8 +747,12 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): ] ] - scanignore = common.getpaths_map(build_dir, build.scanignore) - scandelete = common.getpaths_map(build_dir, build.scandelete) + scanignore, scanignore_not_found_paths = common.getpaths_map( + build_dir, build.scanignore + ) + scandelete, scandelete_not_found_paths = common.getpaths_map( + build_dir, build.scandelete + ) scanignore_worked = set() scandelete_worked = set() @@ -568,6 +786,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): Returns ------- 0 as we explicitly ignore the file, so don't count an error + """ msg = 'Ignoring %s at %s' % (what, path_in_build_dir) logging.info(msg) @@ -590,6 +809,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): Returns ------- 0 as we deleted the offending file + """ msg = 'Removing %s at %s' % (what, path_in_build_dir) logging.info(msg) @@ -617,6 +837,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): Returns ------- 0, as warnings don't count as errors + """ if toignore(path_in_build_dir): return 0 @@ -642,6 +863,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): Returns ------- 0 if the problem was ignored/deleted/is only a warning, 1 otherwise + """ options = common.get_options() if toignore(path_in_build_dir): @@ -679,8 +901,12 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): ] def is_image_file(path): - if imghdr.what(path) is not None: - return True + try: + mimetype = magic.from_file(path, mime=True) + if mimetype and mimetype.startswith('image/'): + return True + except Exception as e: + logging.info(e) def safe_path(path_in_build_dir): for sp in safe_paths: @@ -688,11 +914,21 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): return True return False - gradle_compile_commands = get_gradle_compile_commands(build) + def is_used_by_gradle_without_catalog(line): + return any( + command.match(line) + for command in get_gradle_compile_commands_without_catalog(build) + ) - def is_used_by_gradle(line): - return any(command.match(line) for command in gradle_compile_commands) + def is_used_by_gradle_with_catalog(line, prefix): + for m in ( + command.match(line) + for command in get_gradle_compile_commands_with_catalog(build, prefix) + ): + if m: + return m + all_catalogs = {} # Iterate through all files in the source code for root, dirs, files in os.walk(build_dir, topdown=True): # It's topdown, so checking the basename is enough @@ -700,6 +936,9 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): if ignoredir in dirs: dirs.remove(ignoredir) + if "settings.gradle" in files or "settings.gradle.kts" in files: + all_catalogs[str(root)] = get_catalogs(root) + for curfile in files: if curfile in ['.DS_Store']: continue @@ -765,6 +1004,13 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): count += handleproblem( _('Java JAR file'), path_in_build_dir, filepath, json_per_build ) + elif curfile.endswith('.wasm'): + count += handleproblem( + _('WebAssembly binary file'), + path_in_build_dir, + filepath, + json_per_build, + ) elif curfile.endswith('.java'): if not os.path.isfile(filepath): @@ -781,19 +1027,40 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): break elif curfile.endswith('.gradle') or curfile.endswith('.gradle.kts'): + catalog_path = str(build_dir) + # Find the longest path of dir that the curfile is in + for p in all_catalogs: + if os.path.commonpath([root, p]) == p: + catalog_path = p + catalogs = all_catalogs.get(catalog_path, {}) + if not os.path.isfile(filepath): continue with open(filepath, 'r', errors='replace') as f: lines = f.readlines() for i, line in enumerate(lines): - if is_used_by_gradle(line): + if is_used_by_gradle_without_catalog(line): for name in suspects_found(line): count += handleproblem( - "usual suspect '%s'" % (name), + f"usual suspect '{name}'", path_in_build_dir, filepath, json_per_build, ) + for prefix, catalog in catalogs.items(): + m = is_used_by_gradle_with_catalog(line, prefix) + if not m: + continue + accessor = m[1] + coordinates = catalog.get_coordinate(accessor) + for coordinate in coordinates: + for name in suspects_found(coordinate): + count += handleproblem( + f"usual suspect '{prefix}.{accessor}: {name}'", + path_in_build_dir, + filepath, + json_per_build, + ) noncomment_lines = [ line for line in lines if not common.gradle_comment.match(line) ] @@ -843,11 +1110,19 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None): json_per_build, ) + for p in scanignore_not_found_paths: + logging.error(_("Non-exist scanignore path: %s") % p) + count += 1 + for p in scanignore: if p not in scanignore_worked: logging.error(_('Unused scanignore path: %s') % p) count += 1 + for p in scandelete_not_found_paths: + logging.error(_("Non-exist scandelete path: %s") % p) + count += 1 + for p in scandelete: if p not in scandelete_worked: logging.error(_('Unused scandelete path: %s') % p) @@ -928,10 +1203,7 @@ def main(): _get_tool() return - # Read all app and srclib metadata - - allapps = metadata.read_metadata() - apps = common.read_app_args(appids, allapps, True) + apps = common.read_app_args(appids, allow_version_codes=True) build_dir = 'build' if not os.path.isdir(build_dir): @@ -1032,7 +1304,7 @@ def main(): logging.info(_("Finished")) if options.json: print(json.dumps(json_output)) - else: + elif probcount or options.verbose: print(_("%d problems found") % probcount) @@ -1955,13 +2227,13 @@ SUSS_DEFAULT = r'''{ "https://www.android.com/gms/" ], "gradle_signatures": [ - "com.google.android.gms(?!.oss-licenses-plugin)", + "com.google.android.gms(?!.(oss-licenses-plugin|strict-version-matcher-plugin))", "com.google.android.ump", "androidx.core:core-google-shortcuts", - "androidx.credentials:credentials", "androidx.credentials:credentials-play-services-auth", "androidx.media3:media3-cast", "androidx.media3:media3-datasource-cronet", + "androidx.wear:wear-remote-interactions", "androidx.work:work-gcm", "com.google.android.exoplayer:extension-cast", "com.google.android.exoplayer:extension-cronet", @@ -1969,9 +2241,21 @@ SUSS_DEFAULT = r'''{ "com.cloudinary:cloudinary-android.*:2\\.[12]\\.", "com.pierfrancescosoffritti.androidyoutubeplayer:chromecast-sender", "com.yayandroid:locationmanager", - "play-services", + "(?Crunchbase and Exodus Privacy.", "license": "NonFree" }, + "com.revenuecat.purchases": { + "code_signatures": [ + "com/revenuecat/purchases" + ], + "documentation": [ + "https://www.revenuecat.com/" + ], + "gradle_signatures": [ + "com.revenuecat.purchases" + ], + "license": "NonFree", + "name": "RevenueCat Purchases" + }, "com.samsung.accessory": { "anti_features": [ "NonFreeComp" @@ -2468,6 +2769,9 @@ SUSS_DEFAULT = r'''{ "com.wei.android.lib:fingerprintidentify", "com.github.uccmawei:FingerprintIdentify" ], + "gradle_signatures_positive_examples": [ + "implementation \"com.github.uccmawei:fingerprintidentify:${safeExtGet(\"fingerprintidentify\", \"1.2.6\")}\"" + ], "license": "NonFree", "name": "FingerprintIdentify" }, @@ -2651,6 +2955,16 @@ SUSS_DEFAULT = r'''{ "license": "NonFree", "name": "Pushy" }, + "org.gradle.toolchains.foojay-resolver-convention": { + "documentation": [ + "https://github.com/gradle/foojay-toolchains" + ], + "gradle_signatures": [ + "org.gradle.toolchains.foojay-resolver" + ], + "license": "Apache-2.0", + "name": "Foojay Toolchains Plugin" + }, "org.mariuszgromada.math": { "code_signatures": [ "org/mariuszgromada/math/mxparser/parsertokens/SyntaxStringBuilder", @@ -2683,7 +2997,7 @@ SUSS_DEFAULT = r'''{ "license": "NonFree" } }, - "timestamp": 1725205987.66681, + "timestamp": 1747829076.702502, "version": 1, - "last_updated": 1725950235.569432 + "last_updated": 1750710966.431471 }''' diff --git a/fdroidserver/signatures.py b/fdroidserver/signatures.py index 4f683344..00c9d264 100644 --- a/fdroidserver/signatures.py +++ b/fdroidserver/signatures.py @@ -15,16 +15,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +import logging +import os +import re +import sys from argparse import ArgumentParser -import re -import os -import sys -import logging - -from . import _ -from . import common -from . import net +from . import _, common from .exception import FDroidException @@ -68,6 +65,8 @@ def extract(options): elif httpre.match(apk): if apk.startswith('https') or options.no_check_https: try: + from . import net + tmp_apk = os.path.join(tmp_dir, 'signed.apk') net.download_file(apk, tmp_apk) sigdir = extract_signature(tmp_apk) @@ -104,7 +103,7 @@ def main(): ) parser.add_argument("--no-check-https", action="store_true", default=False) options = common.parse_args(parser) - common.set_console_logging(options.verbose) + common.set_console_logging(options.verbose, options.color) common.read_config() extract(options) diff --git a/fdroidserver/signindex.py b/fdroidserver/signindex.py index 4ca2d569..47cd5ec2 100644 --- a/fdroidserver/signindex.py +++ b/fdroidserver/signindex.py @@ -17,15 +17,13 @@ # along with this program. If not, see . import json +import logging import os import time import zipfile from argparse import ArgumentParser -import logging -from . import _ -from . import common -from . import metadata +from . import _, common, metadata from .exception import FDroidException config = None diff --git a/fdroidserver/tail.py b/fdroidserver/tail.py index 8107f10d..2bea3504 100644 --- a/fdroidserver/tail.py +++ b/fdroidserver/tail.py @@ -28,8 +28,8 @@ Example import os import sys -import time import threading +import time class Tail(object): diff --git a/fdroidserver/update.py b/fdroidserver/update.py index dac7b038..75c4d907 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -20,25 +20,27 @@ # along with this program. If not, see . import argparse -import sys -import os -import shutil +import copy +import filecmp import glob -import logging -import re -import socket -import warnings -import zipfile import hashlib import json +import logging +import os +import re +import shutil +import socket +import sys import time -import yaml -import copy +import warnings +import zipfile +from argparse import ArgumentParser +from datetime import datetime, timezone +from pathlib import Path + import asn1crypto.cms import defusedxml.ElementTree as ElementTree -from datetime import datetime, timezone -from argparse import ArgumentParser -from pathlib import Path +import yaml try: from yaml import CSafeLoader as SafeLoader @@ -48,14 +50,13 @@ except ImportError: import collections from binascii import hexlify -from . import _ -from . import common -from . import metadata -from .common import DEFAULT_LOCALE -from .exception import BuildException, FDroidException, VerificationException +from PIL import Image, PngImagePlugin + import fdroidserver.index -from PIL import Image, PngImagePlugin +from . import _, common, metadata +from .common import DEFAULT_LOCALE +from .exception import BuildException, FDroidException, NoVersionCodeException, VerificationException if hasattr(Image, 'DecompressionBombWarning'): warnings.simplefilter('error', Image.DecompressionBombWarning) @@ -133,7 +134,7 @@ def disabled_algorithms_allowed(): or common.default_config['allow_disabled_algorithms']) -def status_update_json(apps, apks): +def status_update_json(output, apps, apks): """Output a JSON file with metadata about this `fdroid update` run. Parameters @@ -145,7 +146,6 @@ def status_update_json(apps, apks): """ logging.debug(_('Outputting JSON')) - output = common.setup_status_output(start_timestamp) output['antiFeatures'] = dict() output['disabled'] = [] output['archivePolicy0'] = [] @@ -202,6 +202,13 @@ def status_update_json(apps, apks): common.write_status_json(output, options.pretty) +def output_status_stage(output, stage): + if 'stages' not in output: + output['stages'] = dict() + output['stages'][stage] = common.epoch_millis_now() + common.write_running_status_json(output) + + def delete_disabled_builds(apps, apkcache, repodirs): """Delete disabled build outputs. @@ -316,6 +323,13 @@ def get_cache_file(): return os.path.join('tmp', 'apkcache.json') +def get_cache_mtime(): + apkcachefile = get_cache_file() + if os.path.exists(apkcachefile): + return os.stat(apkcachefile).st_mtime + return 0 + + def get_cache(): """Get the cached dict of the APK index. @@ -355,7 +369,13 @@ def get_cache(): if not isinstance(v['antiFeatures'], dict): v['antiFeatures'] = {k: {} for k in sorted(v['antiFeatures'])} if 'added' in v: - v['added'] = datetime.fromtimestamp(v['added']) + v['added'] = datetime.fromtimestamp(v['added'], tz=timezone.utc) + if v.get('srcname') and not v.get('srcnameSha256'): + f = f'archive/{v["srcname"]}' + if not os.path.exists(f): + f = f'repo/{v["srcname"]}' + if os.path.exists(f): + v['srcnameSha256'] = common.sha256sum(f) return apkcache @@ -491,7 +511,7 @@ def insert_obbs(repodir, apps, apks): obbWarnDelete(f, _('OBB filename must start with "main." or "patch.":')) continue if not re.match(r'^-?[0-9]+$', chunks[1]): - obbWarnDelete(f, _('The OBB version code must come after "{name}.":') + obbWarnDelete(f, _('The OBB versionCode must come after "{name}.":') .format(name=chunks[0])) continue versionCode = int(chunks[1]) @@ -530,7 +550,7 @@ VERSION_STRING_RE = re.compile(r'^([0-9]+)\.([0-9]+)\.([0-9]+)$') def version_string_to_int(version): """ - Convert sermver version designation to version code. + Convert semantic version designation to versionCode. Approximately convert a [Major].[Minor].[Patch] version string consisting of numeric characters (0-9) and periods to a number. The @@ -683,7 +703,7 @@ def scan_repo_for_ipas(apkcache, repodir, knownapks): apkcache[ipa_name] = ipa cachechanged = True - added = knownapks.recordapk(ipa_name, ipa['packageName']) + added = knownapks.recordapk(ipa_name) if added: ipa['added'] = added @@ -787,16 +807,20 @@ def _strip_and_copy_image(in_file, outpath): It is not used at all in the F-Droid ecosystem, so its much safer just to remove it entirely. - This uses size+mtime to check for a new file since this process - actually modifies the resulting file to strip out the EXIF. + This only uses ctime/mtime to check for a new file since this + process actually modifies the resulting file to strip out the EXIF. + Therefore, whenever the file needs to be stripped, it will have a + newer ctime and most likely a different size. The mtime is copied + from the source to the destination, so it can be the same. outpath can be path to either a file or dir. The dir that outpath refers to must exist before calling this. Potential source of Python code to strip JPEGs without dependencies: http://www.fetidcascade.com/public/minimal_exif_writer.py + """ - logging.debug('copying ' + in_file + ' ' + outpath) + logging.debug('copying %s %s', in_file, outpath) if not os.path.exists(in_file): if os.path.islink(in_file): @@ -810,12 +834,11 @@ def _strip_and_copy_image(in_file, outpath): else: out_file = outpath - if os.path.exists(out_file): - in_stat = os.stat(in_file) - out_stat = os.stat(out_file) - if in_stat.st_size == out_stat.st_size \ - and in_stat.st_mtime == out_stat.st_mtime: - return + if os.path.exists(out_file) and ( + os.path.getmtime(in_file) <= os.path.getmtime(out_file) + and os.path.getctime(in_file) <= os.path.getctime(out_file) + ): + return extension = common.get_extension(in_file)[1] if extension == 'png': @@ -1019,16 +1042,20 @@ def copy_triple_t_store_metadata(apps): for packageName, app in apps.items(): builds = app.get('Builds', []) gradle_subdirs = set() - if builds and builds[-1].subdir: + if builds: + subdir = builds[-1].subdir or '' for flavor in builds[-1].gradle: if flavor not in ('yes', 'no', True, False): - p = os.path.join('build', packageName, builds[-1].subdir, 'src', flavor, 'play') + p = os.path.join('build', packageName, subdir, 'src', flavor, 'play') if os.path.exists(p): gradle_subdirs.add(p) if not gradle_subdirs: - gradle_subdirs.update(glob.glob(os.path.join('build', packageName, builds[-1].subdir, 'src', '*', 'play'))) + gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, 'src', '*', 'play'))) if not gradle_subdirs: - gradle_subdirs.update(glob.glob(os.path.join('build', packageName, builds[-1].subdir, '*', 'src', '*', 'play'))) + gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, '*', 'src', '*', 'play'))) + if not gradle_subdirs: + # Flutter-style android subdir + gradle_subdirs.update(glob.glob(os.path.join('build', packageName, subdir, 'android', 'app', 'src', '*', 'play'))) if not gradle_subdirs: sg_list = sorted(glob.glob(os.path.join('build', packageName, 'settings.gradle*'))) if sg_list: @@ -1097,6 +1124,9 @@ def copy_triple_t_store_metadata(apps): repofilename = os.path.basename(f) if segments[-2] == 'listing': locale = segments[-3] + if dirname in GRAPHIC_NAMES: + repofilename = dirname + '.' + extension + dirname = '' elif segments[-4] == 'listings': # v2.x locale = segments[-3] if dirname in tt_graphic_names: @@ -1124,6 +1154,7 @@ def insert_localized_app_metadata(apps): metadata// fastlane/metadata/android// + /fastlane/metadata/android// src//fastlane/metadata/android// ...as well as the /metadata// directory. @@ -1143,7 +1174,7 @@ def insert_localized_app_metadata(apps): https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/#in-the-apps-build-metadata-in-an-fdroiddata-collection """ sourcedirs = glob.glob(os.path.join('build', '[A-Za-z]*', 'src', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) - sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'fastlane', 'metadata', 'android', '[a-z][a-z]*')) + sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', '**', 'fastlane', 'metadata', 'android', '[a-z][a-z]*'), recursive=True) sourcedirs += glob.glob(os.path.join('build', '[A-Za-z]*', 'metadata', '[a-z][a-z]*')) sourcedirs += glob.glob(os.path.join('metadata', '[A-Za-z]*', '[a-z][a-z]*')) @@ -1159,17 +1190,40 @@ def insert_localized_app_metadata(apps): locale = segments[-1] destdir = os.path.join('repo', packageName, locale) - # flavours specified in build receipt - build_flavours = "" - if ( - apps[packageName] - and len(apps[packageName].get('Builds', [])) > 0 - and 'gradle' in apps[packageName]['Builds'][-1] - ): - build_flavours = apps[packageName]['Builds'][-1]['gradle'] + builds = apps.get(packageName, {}).get('Builds', []) + found_in_subdir = ( + builds + and len(segments) > 6 + and segments[-4] == "fastlane" + and segments[-3] == "metadata" + and segments[-2] == "android" + and '/'.join(segments[2:-4]) == builds[-1].get('subdir') + ) - if len(segments) >= 5 and segments[4] == "fastlane" and segments[3] not in build_flavours: - logging.debug("ignoring due to wrong flavour") + # flavors specified in build receipt + build_flavors = [] + if builds and 'gradle' in builds[-1] and builds[-1]['gradle'] != ['yes']: + build_flavors = common.calculate_gradle_flavor_combination( + builds[-1]['gradle'] + ) + found_in_flavor = ( + len(segments) > 7 + and segments[2] == 'src' + and segments[4] == "fastlane" + and segments[3] in build_flavors + ) + + if ( + not found_in_subdir + and not found_in_flavor + and segments[0] == 'build' + and segments[2] not in ('metadata', 'fastlane') + ): + logging.debug( + 'Not scanning "{dir}" with unknown subdir or gradle flavor "{value}"'.format( + dir=os.path.relpath(root), value=segments[3] + ) + ) continue for f in files: @@ -1207,9 +1261,7 @@ def insert_localized_app_metadata(apps): try: versionCode = int(base) locale = segments[-2] - if versionCode in [ - a["versionCode"] for a in apps[packageName]["Builds"] - ]: + if versionCode in [b["versionCode"] for b in builds]: _set_localized_text_entry( apps[packageName], locale, @@ -1434,19 +1486,18 @@ def insert_localized_ios_app_metadata(apps_with_packages): fdroidserver.update.copy_ios_screenshots_to_repo(screenshots, package_name) # lookup icons, copy them and put them into app - icon_path = _get_ipa_icon(Path('build') / package_name) + icon_src = _get_ipa_icon(Path('build') / package_name) icon_dest = Path('repo') / package_name / 'icon.png' # for now just assume png - icon_stat = os.stat(icon_path) app['iconv2'] = { DEFAULT_LOCALE: { 'name': str(icon_dest).lstrip('repo'), 'sha256': common.sha256sum(icon_dest), - 'size': icon_stat.st_size, + 'size': os.path.getsize(icon_src), } } - if not icon_dest.exists(): + if not icon_dest.exists() or not filecmp.cmp(icon_src, icon_dest): icon_dest.parent.mkdir(parents=True, exist_ok=True) - shutil.copy(icon_path, icon_dest) + shutil.copy2(icon_src, icon_dest) def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): @@ -1525,8 +1576,10 @@ def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): repo_file['packageName'] = m.group(1) repo_file['versionCode'] = int(m.group(2)) srcfilename = name + b'_src.tar.gz' - if os.path.exists(os.path.join(repodir, srcfilename)): + srcpath = os.path.join(repodir, srcfilename) + if os.path.exists(srcpath): repo_file['srcname'] = srcfilename.decode() + repo_file['srcnameSha256'] = common.sha256sum(srcpath.decode()) repo_file['size'] = stat.st_size apkcache[name_utf8] = repo_file @@ -1539,8 +1592,9 @@ def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False): default_date_param = None # Record in knownapks, getting the added date at the same time.. - added = knownapks.recordapk(repo_file['apkName'], repo_file['packageName'], - default_date=default_date_param) + added = knownapks.recordapk( + repo_file['apkName'], default_date=default_date_param + ) if added: repo_file['added'] = added @@ -1747,6 +1801,7 @@ def scan_apk_androguard(apk, apkfile): xml = apkobject.get_android_manifest_xml() androidmanifest_xml = apkobject.xml['AndroidManifest.xml'] + if len(xml.nsmap) > 0: # one of them surely will be the Android one, or its corrupt xmlns = common.XMLNS_ANDROID @@ -1756,8 +1811,12 @@ def scan_apk_androguard(apk, apkfile): xmlns = '{}' vcstr = androidmanifest_xml.get(xmlns + 'versionCode') + logging.debug("Version Code: %r (%s)" % (vcstr, apkfile)) - if vcstr.startswith('0x'): + if not vcstr: + raise NoVersionCodeException(_("APK file {path} does not have a version code " + "in its manifest").format(path=apkfile)) + elif vcstr.startswith('0x'): apk['versionCode'] = int(vcstr, 16) else: apk['versionCode'] = int(vcstr) @@ -1850,7 +1909,7 @@ def scan_apk_androguard(apk, apkfile): def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=False, - allow_disabled_algorithms=False, archive_bad_sig=False, apps=None): + allow_disabled_algorithms=False, archive_bad_sig=False, apps=None, cache_timestamp=0): """Process the apk with the given filename in the given repo directory. This also extracts the icons. @@ -1872,6 +1931,8 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal disabled algorithms in the signature (e.g. MD5) archive_bad_sig move APKs with a bad signature to the archive + cache_timestamp + the timestamp of the cache file Returns ------- @@ -1885,7 +1946,8 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal usecache = False if apkfilename in apkcache: apk = apkcache[apkfilename] - if apk.get('hash') == common.sha256sum(apkfile): + stat = os.stat(apkfile) + if apk.get('size') == stat.st_size and stat.st_mtime < cache_timestamp: logging.debug(_("Reading {apkfilename} from cache") .format(apkfilename=apkfilename)) usecache = True @@ -1902,6 +1964,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal logging.warning(_("Skipping '{apkfilename}' with invalid signature!") .format(apkfilename=apkfilename)) return True, None, False + except NoVersionCodeException: + logging.warning(_("Skipping '{apkfilename}' without versionCode!") + .format(apkfilename=apkfilename)) + return True, None, False if apps: if apk['packageName'] in apps: @@ -1940,8 +2006,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal apk['apkName'] = apkfilename srcfilename = apkfilename[:-4] + "_src.tar.gz" - if os.path.exists(os.path.join(repodir, srcfilename)): + srcpath = os.path.join(repodir, srcfilename) + if os.path.exists(srcpath): apk['srcname'] = srcfilename + apk['srcnameSha256'] = common.sha256sum(srcpath) # verify the jar signature is correct, allow deprecated # algorithms only if the APK is in the archive. @@ -1988,13 +2056,12 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal fill_missing_icon_densities(empty_densities, iconfilename, apk, repodir) if use_date_from_apk: - default_date_param = datetime.fromtimestamp(os.stat(apkfile).st_mtime) + default_date_param = datetime.fromtimestamp(os.stat(apkfile).st_mtime, tz=timezone.utc) else: default_date_param = None # Record in known apks, getting the added date at the same time.. - added = knownapks.recordapk(apk['apkName'], apk['packageName'], - default_date=default_date_param) + added = knownapks.recordapk(apk['apkName'], default_date=default_date_param) if added: apk['added'] = added @@ -2004,7 +2071,7 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal return False, apk, cachechanged -def process_apks(apkcache, repodir, knownapks, use_date_from_apk=False, apps=None): +def process_apks(apkcache, repodir, knownapks, use_date_from_apk=False, apps=None, cache_timestamp=0): """Process the apks in the given repo directory. This also extracts the icons. @@ -2019,6 +2086,8 @@ def process_apks(apkcache, repodir, knownapks, use_date_from_apk=False, apps=Non b known apks info use_date_from_apk use date from APK (instead of current date) for newly added APKs + cache_timestamp + the timestamp of the cache file Returns ------- @@ -2040,7 +2109,7 @@ def process_apks(apkcache, repodir, knownapks, use_date_from_apk=False, apps=Non apkfilename = apkfile[len(repodir) + 1:] ada = disabled_algorithms_allowed() (skip, apk, cachethis) = process_apk(apkcache, apkfilename, repodir, knownapks, - use_date_from_apk, ada, True, apps) + use_date_from_apk, ada, True, apps, cache_timestamp) if skip: continue apks.append(apk) @@ -2253,7 +2322,7 @@ def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversi continue apkList.append(apk) - # Sort the apk list by version code. First is highest/newest. + # Sort the apk list by versionCode. First is highest/newest. sorted_list = sorted(apkList, key=lambda apk: apk['versionCode'], reverse=True) if currentVersionApk: # Insert apk which corresponds to currentVersion at the front @@ -2261,15 +2330,9 @@ def archive_old_apks(apps, apks, archapks, repodir, archivedir, defaultkeepversi return sorted_list for appid, app in apps.items(): - - if app.get('ArchivePolicy') is not None: - keepversions = app['ArchivePolicy'] - else: - keepversions = defaultkeepversions - if app.get('VercodeOperation'): - keepversions *= len(app['VercodeOperation']) - if common.metadata_find_developer_signing_files(appid, app['CurrentVersionCode']): - keepversions *= 2 + keepversions = common.calculate_archive_policy(app, defaultkeepversions) + if common.metadata_find_developer_signing_files(appid, app['CurrentVersionCode']): + keepversions *= 2 logging.debug(_("Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}") .format(appid=appid, integer=len(apks), keep=keepversions, arch=len(archapks))) @@ -2405,12 +2468,12 @@ def create_metadata_from_template(apk): def read_added_date_from_all_apks(apps, apks): """No summary. - Added dates come from the stats/known_apks.txt file but are + Added dates come from the repo/index-v2.json file but are read when scanning apks and thus need to be applied form apk level to app level for _all_ apps and not only from non-archived ones - TODO: read the added dates directly from known_apks.txt instead of + TODO: read the added dates directly from index-v2.json instead of going through apks that way it also works for for repos that don't keep an archive of apks. """ @@ -2578,7 +2641,7 @@ def main(): metadata.warnings_action = options.W config = common.read_config() - common.setup_status_output(start_timestamp) + status_output = common.setup_status_output(start_timestamp) if not (('jarsigner' in config or 'apksigner' in config) and 'keytool' in config): @@ -2638,14 +2701,18 @@ def main(): # Get APK cache apkcache = get_cache() + cache_timestamp = get_cache_mtime() # Delete builds for disabled apps + output_status_stage(status_output, 'delete_disabled_builds') delete_disabled_builds(apps, apkcache, repodirs) # Scan all apks in the main repo + output_status_stage(status_output, 'process_apks') apks, cachechanged = process_apks(apkcache, repodirs[0], knownapks, - options.use_date_from_apk, apps) + options.use_date_from_apk, apps, cache_timestamp) + output_status_stage(status_output, 'scan_repo_files') files, fcachechanged = scan_repo_files(apkcache, repodirs[0], knownapks, options.use_date_from_apk) cachechanged = cachechanged or fcachechanged @@ -2655,10 +2722,23 @@ def main(): cachechanged = cachechanged or icachechanged apks += ipas + output_status_stage(status_output, 'remove_apks') appid_has_apks = set() appid_has_repo_files = set() + sha256_has_files = collections.defaultdict(list) + errors = 0 remove_apks = [] for apk in apks: + sha256 = apk['hash'] + if sha256 in sha256_has_files: + errors += 1 + for path2 in sha256_has_files[sha256]: + logging.error( + _('{path1} is a duplicate of {path2}, remove one!').format( + path1=apk["apkName"], path2=path2 + ) + ) + sha256_has_files[sha256].append(apk['apkName']) to_remove = get_apks_without_allowed_signatures(apps.get(apk['packageName']), apk) if to_remove: remove_apks.append(apk) @@ -2701,19 +2781,22 @@ def main(): for apk in remove_apks: apks.remove(apk) - mismatch_errors = '' for appid in appid_has_apks: if appid in appid_has_repo_files: appid_files = ', '.join(glob.glob(os.path.join('repo', appid + '_[0-9]*.*'))) - mismatch_errors += (_('{appid} has both APKs and files: {files}') - .format(appid=appid, files=appid_files)) + '\n' - if mismatch_errors: - raise FDroidException(mismatch_errors) + errors += 1 + logging.error( + _('{appid} has both APKs and files: {files}').format( + appid=appid, files=appid_files + ) + ) + if errors: + sys.exit(errors) # Scan the archive repo for apks as well if len(repodirs) > 1: archapks, cc = process_apks(apkcache, repodirs[1], knownapks, - options.use_date_from_apk, apps) + options.use_date_from_apk, apps, cache_timestamp) if cc: cachechanged = True else: @@ -2722,18 +2805,25 @@ def main(): if cachechanged: write_cache(apkcache) + output_status_stage(status_output, 'read_added_date_from_all_apks') # The added date currently comes from the oldest apk which might be in the archive. # So we need this populated at app level before continuing with only processing /repo # or /archive read_added_date_from_all_apks(apps, apks + archapks) if len(repodirs) > 1: + output_status_stage(status_output, 'archive_old_apks archive') archive_old_apks(apps, apks, archapks, repodirs[0], repodirs[1], config['archive_older']) + output_status_stage(status_output, 'prepare_apps archive') archived_apps = prepare_apps(apps, archapks, repodirs[1]) + output_status_stage(status_output, 'index.make archive') fdroidserver.index.make(archived_apps, archapks, repodirs[1], True) + output_status_stage(status_output, 'prepare_apps repo') repoapps = prepare_apps(apps, apks, repodirs[0]) + output_status_stage(status_output, 'index.make repo') + # APKs are placed into multiple repos based on the app package, providing # per-app subscription feeds for nightly builds and things like it if config['per_app_repos']: @@ -2754,13 +2844,10 @@ def main(): git_remote = config.get('binary_transparency_remote') if git_remote or os.path.isdir(os.path.join('binary_transparency', '.git')): from . import btlog + output_status_stage(status_output, 'make_binary_transparency_log') btlog.make_binary_transparency_log(repodirs) - if config['update_stats']: - # Update known apks info... - knownapks.writeifchanged() - - status_update_json(apps, apks + archapks) + status_update_json(status_output, apps, apks + archapks) logging.info(_("Finished")) diff --git a/fdroidserver/verify.py b/fdroidserver/verify.py index 41b46ada..897463ae 100644 --- a/fdroidserver/verify.py +++ b/fdroidserver/verify.py @@ -16,18 +16,17 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -import sys -import os import glob import json import logging -import requests +import os +import sys from argparse import ArgumentParser from collections import OrderedDict -from . import _ -from . import common -from . import net +import requests + +from . import _, common, net from .exception import FDroidException config = None @@ -58,8 +57,8 @@ def _add_diffoscope_info(d): ] d['diffoscope']['External-Tools-Required'] = external_tools - from diffoscope.tools import OS_NAMES, get_current_os from diffoscope.external_tools import EXTERNAL_TOOLS + from diffoscope.tools import OS_NAMES, get_current_os current_os = get_current_os() os_list = [current_os] if (current_os in OS_NAMES) else iter(OS_NAMES) @@ -80,6 +79,30 @@ def _add_diffoscope_info(d): pass +def get_verified_json(path): + """Get the full collection of reports that is written out to verified.json.""" + if os.path.exists(path): + try: + with open(path) as fp: + return json.load(fp) + except Exception as e: + logging.info(f'{path}: {e}') + + data = OrderedDict() + data['packages'] = OrderedDict() + + for f in glob.glob(os.path.join(os.path.dirname(path), '*.apk.json')): + with open(f) as fp: + reports = json.load(fp) + for report in reports.values(): + packageName = report['local']['packageName'] + if packageName not in data['packages']: + data['packages'][packageName] = [] + data['packages'][packageName].append(report) + + return data + + def write_json_report(url, remote_apk, unsigned_apk, compare_result): """Write out the results of the verify run to JSON. @@ -120,28 +143,44 @@ def write_json_report(url, remote_apk, unsigned_apk, compare_result): with open(jsonfile, 'w') as fp: json.dump(data, fp, sort_keys=True) - if output['verified']: - jsonfile = 'unsigned/verified.json' - if os.path.exists(jsonfile): - with open(jsonfile) as fp: - data = json.load(fp) - else: - data = OrderedDict() - data['packages'] = OrderedDict() - packageName = output['local']['packageName'] + appid, version_code = os.path.basename(unsigned_apk[:-4]).rsplit('_', 1) + appid_base = unsigned_apk.rsplit('_', 1)[0] + apkReports = sorted( + glob.glob(f'{appid_base}_[0-9]*.json'), # don't include .json + key=lambda s: int(s[:-9].rsplit('_', 1)[1]), # numeric sort by versionCode + ) + with open(apkReports[-1]) as fp: + reports = json.load(fp) + appid_output = {'apkReports': apkReports} + most_recent = 0 + for report_time, run in reports.items(): + if float(report_time) > most_recent: + most_recent = float(report_time) + appid_output['lastRunVerified'] = run['verified'] + with open(f'{appid_base}.json', 'w') as fp: + json.dump(appid_output, fp, cls=common.Encoder, sort_keys=True) - if packageName not in data['packages']: - data['packages'][packageName] = [] - found = False - output_dump = json.dumps(output, sort_keys=True) - for p in data['packages'][packageName]: - if output_dump == json.dumps(p, sort_keys=True): - found = True - break - if not found: - data['packages'][packageName].insert(0, json.loads(output_dump)) - with open(jsonfile, 'w') as fp: - json.dump(data, fp, cls=common.Encoder, sort_keys=True) + if output['verified']: + write_verified_json(output) + + +def write_verified_json(output): + jsonfile = 'unsigned/verified.json' + data = get_verified_json(jsonfile) + packageName = output['local']['packageName'] + + if packageName not in data['packages']: + data['packages'][packageName] = [] + found = False + output_dump = json.dumps(output, sort_keys=True) + for p in data['packages'][packageName]: + if output_dump == json.dumps(p, sort_keys=True): + found = True + break + if not found: + data['packages'][packageName].insert(0, json.loads(output_dump)) + with open(jsonfile, 'w') as fp: + json.dump(data, fp, cls=common.Encoder, sort_keys=True) def main(): @@ -157,6 +196,12 @@ def main(): nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"), ) + parser.add_argument( + "--clean-up-verified", + action="store_true", + default=False, + help=_("Remove source tarball and any APKs if successfully verified."), + ) parser.add_argument( "--reuse-remote-apk", action="store_true", @@ -224,12 +269,26 @@ def main(): ) from e unsigned_apk = os.path.join(unsigned_dir, apkfilename) - compare_result = common.verify_apks(remote_apk, unsigned_apk, tmp_dir) + compare_result = common.verify_apks( + remote_apk, + unsigned_apk, + tmp_dir, + clean_up_verified=options.clean_up_verified, + ) if options.output_json: write_json_report(url, remote_apk, unsigned_apk, compare_result) if compare_result: raise FDroidException(compare_result) + if options.clean_up_verified: + src_tarball = os.path.join( + unsigned_dir, common.get_src_tarball_name(appid, vercode) + ) + for f in (remote_apk, unsigned_apk, src_tarball): + if os.path.exists(f): + logging.info(f"...cleaned up {f} after successful verification") + os.remove(f) + logging.info("...successfully verified") verified += 1 diff --git a/fdroidserver/vmtools.py b/fdroidserver/vmtools.py index 0251e179..2ba92ad6 100644 --- a/fdroidserver/vmtools.py +++ b/fdroidserver/vmtools.py @@ -16,16 +16,16 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -from os.path import isdir, isfile, basename, abspath, expanduser -import os import json +import logging +import os import shutil import subprocess import textwrap -import logging -from .common import FDroidException - import threading +from os.path import abspath, basename, expanduser, isdir, isfile + +from .common import FDroidException lock = threading.Lock() diff --git a/gradlew-fdroid b/gradlew-fdroid deleted file mode 100755 index 576fcf98..00000000 --- a/gradlew-fdroid +++ /dev/null @@ -1,302 +0,0 @@ -#!/bin/bash - -bindir="$(dirname $0)" -basedir="$(dirname $bindir)" -# Check if GRADLE_VERSION_DIR/CACHEDIR is set from environment -if [ -z "$GRADLE_VERSION_DIR" ]; then - gradle_version_dir="${basedir}/versions" -else - gradle_version_dir="$GRADLE_VERSION_DIR" -fi -BUILDSERVER_CACHEDIR=/vagrant/cache -if [ -n "$CACHEDIR" ]; then - cachedir="$CACHEDIR" -elif [ -d $BUILDSERVER_CACHEDIR ]; then - cachedir=$BUILDSERVER_CACHEDIR -fi -args=("$@") - -run_gradle() { - if [ ! -d "${gradle_version_dir}/${v_found}" ]; then - download_gradle ${v_found} - fi - # shellcheck disable=SC2145 - echo "Running ${gradle_version_dir}/${v_found}/bin/gradle ${args[@]}" - "${gradle_version_dir}/${v_found}/bin/gradle" "${args[@]}" - exit $? -} - -download_gradle() { - URL="https://downloads.gradle.org/distributions/gradle-${1}-bin.zip" - shasum=$(get_sha $1) - if [ $? != 0 ]; then - echo "No hash for gradle version $1! Exiting..." - exit 1 - fi - if [ -n "${cachedir}" ] && [ -e "${cachedir}/gradle-$1-bin.zip" ]; then - echo "Using cached ${cachedir}/gradle-$1-bin.zip ..." - gradle_zip="${cachedir}/gradle-$1-bin.zip" - else - echo "Downloading missing gradle version $1" - echo cachedir $cachedir - if [[ -n "${cachedir}" && ! -d "${cachedir}" ]]; then - mkdir -p "${cachedir}" - fi - if [[ -n "${cachedir}" && -d "${cachedir}" && -w "${cachedir}" ]]; then - tmpdir="${cachedir}" - else - tmpdir=$(mktemp -d) - fi - curl -o "${tmpdir}/gradle-$1-bin.zip" --silent --fail --show-error --location --retry 3 --retry-all-errors "${URL}" - gradle_zip="${tmpdir}/gradle-$1-bin.zip" - fi - echo "${shasum} ${gradle_zip}" | sha256sum -c - - if [ $? != 0 ]; then - echo "gradle download checksum mismatch! Exiting..." - exit 1 - fi - mkdir -p "${gradle_version_dir}/" - unzip -q -d "${gradle_version_dir}" "${gradle_zip}" - mv "${gradle_version_dir}/gradle-$1" "${gradle_version_dir}/${v_found}" -} - -get_sha() { - case $1 in - '0.7') echo '4e354fcb0d5c0b0e7789cd6ee900456edaf993f6dd890c4a1c217d90d2a6a6ad' ;; - '0.8') echo '940e623ea98e40ea9ad398770a6ebb91a61c0869d394dda81aa86b0f4f0025e7' ;; - '0.9') echo '994e46d4b467254a0f25ce92b602618331b9b3ac8b32a094fd84ff0e0ceec135' ;; - '0.9.1') echo '5d48cba95db031ec109ae9ab60561e960b6507046036e8191aa78572ec27e2a5' ;; - '0.9.2') echo 'f94d7642348c558fc05ab5fd6fb947fb1ed8fed5931ddb73dd04fb0de22d669b' ;; - '1.0') echo '894bca0360a7e2040815096788f118a2dd106ff6694221b274efb9c32bce0384' ;; - '1.1') echo '552c1fc9f3a1b9668b79cc447370f0263e664ffb6d5c6e1c21e77ce0c8a20d4c' ;; - '1.2') echo 'eb53da3704d24cabb7565f34a3bf16bcd863c4b0c139917606fb15d4f27c7bdf' ;; - '1.3') echo 'ada68561efbb9f1cae0f9063974cbde15c180351a2f92bc2f1106e39ddcae5ba' ;; - '1.4') echo 'cd99e85fbcd0ae8b99e81c9992a2f10cceb7b5f009c3720ef3a0078f4f92e94e' ;; - '1.5') echo 'a5511a0659caa47d9d74fd2844c9da43157d2f78e63a0223c6289d88f5aaecbe' ;; - '1.6') echo 'de3e89d2113923dcc2e0def62d69be0947ceac910abd38b75ec333230183fac4' ;; - '1.7') echo '360c97d51621b5a1ecf66748c718594e5f790ae4fbc1499543e0c006033c9d30' ;; - '1.8') echo 'a342bbfa15fd18e2482287da4959588f45a41b60910970a16e6d97959aea5703' ;; - '1.9') echo '097ddc2bcbc9da2bb08cbf6bf8079585e35ad088bafd42e8716bc96405db98e9' ;; - '1.10') echo '6e6db4fc595f27ceda059d23693b6f6848583950606112b37dfd0e97a0a0a4fe' ;; - '1.11') echo '07e235df824964f0e19e73ea2327ce345c44bcd06d44a0123d29ab287fc34091' ;; - '1.12') echo '8734b13a401f4311ee418173ed6ca8662d2b0a535be8ff2a43ecb1c13cd406ea' ;; - '2.0') echo 'a1eb880c8755333c4d33c4351b269bebe517002532d3142c0b6164c9e8c081c3' ;; - '2.1') echo '3eee4f9ea2ab0221b89f8e4747a96d4554d00ae46d8d633f11cfda60988bf878' ;; - '2.2') echo '91e5655fe11ef414449f218c4fa2985b3a49b7903c57556da109c84fa26e1dfb' ;; - '2.2.1') echo '420aa50738299327b611c10b8304b749e8d3a579407ee9e755b15921d95ff418' ;; - '2.3') echo '010dd9f31849abc3d5644e282943b1c1c355f8e2635c5789833979ce590a3774' ;; - '2.4') echo 'c4eaecc621a81f567ded1aede4a5ddb281cc02a03a6a87c4f5502add8fc2f16f' ;; - '2.5') echo '3f953e0cb14bb3f9ebbe11946e84071547bf5dfd575d90cfe9cc4e788da38555' ;; - '2.6') echo '18a98c560af231dfa0d3f8e0802c20103ae986f12428bb0a6f5396e8f14e9c83' ;; - '2.7') echo 'cde43b90945b5304c43ee36e58aab4cc6fb3a3d5f9bd9449bb1709a68371cb06' ;; - '2.8') echo 'a88db9c2f104defdaa8011c58cf6cda6c114298ae3695ecfb8beb30da3a903cb' ;; - '2.9') echo 'c9159ec4362284c0a38d73237e224deae6139cbde0db4f0f44e1c7691dd3de2f' ;; - '2.10') echo '66406247f745fc6f05ab382d3f8d3e120c339f34ef54b86f6dc5f6efc18fbb13' ;; - '2.11') echo '8d7437082356c9fd6309a4479c8db307673965546daea445c6c72759cd6b1ed6' ;; - '2.12') echo 'e77064981906cd0476ff1e0de3e6fef747bd18e140960f1915cca8ff6c33ab5c' ;; - '2.13') echo '0f665ec6a5a67865faf7ba0d825afb19c26705ea0597cec80dd191b0f2cbb664' ;; - '2.14') echo '993b4f33b652c689e9721917d8e021cab6bbd3eae81b39ab2fd46fdb19a928d5' ;; - '2.14.1') echo 'cfc61eda71f2d12a572822644ce13d2919407595c2aec3e3566d2aab6f97ef39' ;; - '3.0') echo '39c906941a474444afbddc38144ed44166825acb0a57b0551dddb04bbf157f80' ;; - '3.1') echo 'c7de3442432253525902f7e8d7eac8b5fd6ce1623f96d76916af6d0e383010fc' ;; - '3.2') echo '5321b36837226dc0377047a328f12010f42c7bf88ee4a3b1cee0c11040082935' ;; - '3.2.1') echo '9843a3654d3e57dce54db06d05f18b664b95c22bf90c6becccb61fc63ce60689' ;; - '3.3') echo 'c58650c278d8cf0696cab65108ae3c8d95eea9c1938e0eb8b997095d5ca9a292' ;; - '3.4') echo '72d0cd4dcdd5e3be165eb7cd7bbd25cf8968baf400323d9ab1bba622c3f72205' ;; - '3.4.1') echo 'db1db193d479cc1202be843f17e4526660cfb0b21b57d62f3a87f88c878af9b2' ;; - '3.5') echo '0b7450798c190ff76b9f9a3d02e18b33d94553f708ebc08ebe09bdf99111d110' ;; - '3.5.1') echo '8dce35f52d4c7b4a4946df73aa2830e76ba7148850753d8b5e94c5dc325ceef8' ;; - '4.0') echo '56bd2dde29ba2a93903c557da1745cafd72cdd8b6b0b83c05a40ed7896b79dfe' ;; - '4.0.1') echo 'd717e46200d1359893f891dab047fdab98784143ac76861b53c50dbd03b44fd4' ;; - '4.0.2') echo '79ac421342bd11f6a4f404e0988baa9c1f5fabf07e3c6fa65b0c15c1c31dda22' ;; - '4.1') echo 'd55dfa9cfb5a3da86a1c9e75bb0b9507f9a8c8c100793ccec7beb6e259f9ed43' ;; - '4.2') echo '515dd63d32e55a9c05667809c5e40a947529de3054444ad274b3b75af5582eae' ;; - '4.2.1') echo 'b551cc04f2ca51c78dd14edb060621f0e5439bdfafa6fd167032a09ac708fbc0' ;; - '4.3') echo '8dcbf44eef92575b475dcb1ce12b5f19d38dc79e84c662670248dc8b8247654c' ;; - '4.3.1') echo '15ebe098ce0392a2d06d252bff24143cc88c4e963346582c8d88814758d93ac7' ;; - '4.4') echo 'fa4873ae2c7f5e8c02ec6948ba95848cedced6134772a0169718eadcb39e0a2f' ;; - '4.4.1') echo 'e7cf7d1853dfc30c1c44f571d3919eeeedef002823b66b6a988d27e919686389' ;; - '4.5') echo '03f2a43a314ff0fb843a85ef68078e06d181c4549c1e5fb983f289382b59b5e3' ;; - '4.5.1') echo '3e2ea0d8b96605b7c528768f646e0975bd9822f06df1f04a64fd279b1a17805e' ;; - '4.6') echo '98bd5fd2b30e070517e03c51cbb32beee3e2ee1a84003a5a5d748996d4b1b915' ;; - '4.7') echo 'fca5087dc8b50c64655c000989635664a73b11b9bd3703c7d6cabd31b7dcdb04' ;; - '4.8') echo 'f3e29692a8faa94eb0b02ebf36fa263a642b3ae8694ef806c45c345b8683f1ba' ;; - '4.8.1') echo 'af334d994b5e69e439ab55b5d2b7d086da5ea6763d78054f49f147b06370ed71' ;; - '4.9') echo 'e66e69dce8173dd2004b39ba93586a184628bc6c28461bc771d6835f7f9b0d28' ;; - '4.10') echo '248cfd92104ce12c5431ddb8309cf713fe58de8e330c63176543320022f59f18' ;; - '4.10.1') echo 'e53ce3a01cf016b5d294eef20977ad4e3c13e761ac1e475f1ffad4c6141a92bd' ;; - '4.10.2') echo 'b49c6da1b2cb67a0caf6c7480630b51c70a11ca2016ff2f555eaeda863143a29' ;; - '4.10.3') echo '8626cbf206b4e201ade7b87779090690447054bc93f052954c78480fa6ed186e' ;; - '5.0') echo '6157ac9f3410bc63644625b3b3e9e96c963afd7910ae0697792db57813ee79a6' ;; - '5.1') echo '7506638a380092a0406364c79d6c87d03d23017fc25a5770379d1ce23c3fcd4d' ;; - '5.1.1') echo '4953323605c5d7b89e97d0dc7779e275bccedefcdac090aec123375eae0cc798' ;; - '5.2') echo 'ff322863250159595e93b5a4d17a6f0d21c59a1a0497c1e1cf1d53826485503f' ;; - '5.2.1') echo '748c33ff8d216736723be4037085b8dc342c6a0f309081acf682c9803e407357' ;; - '5.3') echo 'bed2bdd3955be5a09ca7e0201e9d131f194f7f6c466e1795a733733ccfb09f25' ;; - '5.3.1') echo '1c59a17a054e9c82f0dd881871c9646e943ec4c71dd52ebc6137d17f82337436' ;; - '5.4') echo 'c8c17574245ecee9ed7fe4f6b593b696d1692d1adbfef425bef9b333e3a0e8de' ;; - '5.4.1') echo '7bdbad1e4f54f13c8a78abc00c26d44dd8709d4aedb704d913fb1bb78ac025dc' ;; - '5.5') echo '8d78b2ed63e7f07ad169c1186d119761c4773e681f332cfe1901045b1b0141bc' ;; - '5.5.1') echo '222a03fcf2fcaf3691767ce9549f78ebd4a77e73f9e23a396899fb70b420cd00' ;; - '5.6') echo '15c02ef5dd3631ec02ac52e8725703e0285d9a7eecbf4e5939aa9e924604d01d' ;; - '5.6.1') echo '0986244820e4a35d32d91df2ec4b768b5ba5d6c8246753794f85159f9963ec12' ;; - '5.6.2') echo '32fce6628848f799b0ad3205ae8db67d0d828c10ffe62b748a7c0d9f4a5d9ee0' ;; - '5.6.3') echo '60a6d8f687e3e7a4bc901cc6bc3db190efae0f02f0cc697e323e0f9336f224a3' ;; - '5.6.4') echo '1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d' ;; - '6.0') echo '5a3578b9f0bb162f5e08cf119f447dfb8fa950cedebb4d2a977e912a11a74b91' ;; - '6.0.1') echo 'd364b7098b9f2e58579a3603dc0a12a1991353ac58ed339316e6762b21efba44' ;; - '6.1') echo 'd0c43d14e1c70a48b82442f435d06186351a2d290d72afd5b8866f15e6d7038a' ;; - '6.1.1') echo '9d94e6e4a28ad328072ef6e56bce79a810494ae756751fdcedffdeaf27c093b1' ;; - '6.2') echo 'b93a5f30d01195ec201e240f029c8b42d59c24086b8d1864112c83558e23cf8a' ;; - '6.2.1') echo 'a68ca7ba57f3404c3f6fc1f70a02d3a7d78652e6b46bbfaff83fc9a17168c279' ;; - '6.2.2') echo '0f6ba231b986276d8221d7a870b4d98e0df76e6daf1f42e7c0baec5032fb7d17' ;; - '6.3') echo '038794feef1f4745c6347107b6726279d1c824f3fc634b60f86ace1e9fbd1768' ;; - '6.4') echo 'b888659f637887e759749f6226ddfcb1cb04f828c58c41279de73c463fdbacc9' ;; - '6.4.1') echo 'e58cdff0cee6d9b422dcd08ebeb3177bc44eaa09bd9a2e838ff74c408fe1cbcd' ;; - '6.5') echo '23e7d37e9bb4f8dabb8a3ea7fdee9dd0428b9b1a71d298aefd65b11dccea220f' ;; - '6.5.1') echo '50a7d30529fa939721fe9268a0205142f3f2302bcac5fb45b27a3902e58db54a' ;; - '6.6') echo 'e6f83508f0970452f56197f610d13c5f593baaf43c0e3c6a571e5967be754025' ;; - '6.6.1') echo '7873ed5287f47ca03549ab8dcb6dc877ac7f0e3d7b1eb12685161d10080910ac' ;; - '6.7') echo '8ad57759019a9233dc7dc4d1a530cefe109dc122000d57f7e623f8cf4ba9dfc4' ;; - '6.7.1') echo '3239b5ed86c3838a37d983ac100573f64c1f3fd8e1eb6c89fa5f9529b5ec091d' ;; - '6.8') echo 'e2774e6fb77c43657decde25542dea710aafd78c4022d19b196e7e78d79d8c6c' ;; - '6.8.1') echo 'fd591a34af7385730970399f473afabdb8b28d57fd97d6625c388d090039d6fd' ;; - '6.8.2') echo '8de6efc274ab52332a9c820366dd5cf5fc9d35ec7078fd70c8ec6913431ee610' ;; - '6.8.3') echo '7faa7198769f872826c8ef4f1450f839ec27f0b4d5d1e51bade63667cbccd205' ;; - '6.9') echo '765442b8069c6bee2ea70713861c027587591c6b1df2c857a23361512560894e' ;; - '6.9.1') echo '8c12154228a502b784f451179846e518733cf856efc7d45b2e6691012977b2fe' ;; - '6.9.2') echo '8b356fd8702d5ffa2e066ed0be45a023a779bba4dd1a68fd11bc2a6bdc981e8f' ;; - '6.9.3') echo 'dcf350b8ae1aa192fc299aed6efc77b43825d4fedb224c94118ae7faf5fb035d' ;; - '6.9.4') echo '3e240228538de9f18772a574e99a0ba959e83d6ef351014381acd9631781389a' ;; - '7.0') echo 'eb8b89184261025b0430f5b2233701ff1377f96da1ef5e278af6ae8bac5cc305' ;; - '7.0.1') echo 'dccda8aa069563c8ba2f6cdfd0777df0e34a5b4d15138ca8b9757e94f4e8a8cb' ;; - '7.0.2') echo '0e46229820205440b48a5501122002842b82886e76af35f0f3a069243dca4b3c' ;; - '7.1') echo '2debee19271e1b82c6e41137d78e44e6e841035230a1a169ca47fd3fb09ed87b' ;; - '7.1.1') echo 'bf8b869948901d422e9bb7d1fa61da6a6e19411baa7ad6ee929073df85d6365d' ;; - '7.2') echo 'f581709a9c35e9cb92e16f585d2c4bc99b2b1a5f85d2badbd3dc6bff59e1e6dd' ;; - '7.3') echo 'de8f52ad49bdc759164f72439a3bf56ddb1589c4cde802d3cec7d6ad0e0ee410' ;; - '7.3.1') echo '9afb3ca688fc12c761a0e9e4321e4d24e977a4a8916c8a768b1fe05ddb4d6b66' ;; - '7.3.2') echo '23b89f8eac363f5f4b8336e0530c7295c55b728a9caa5268fdd4a532610d5392' ;; - '7.3.3') echo 'b586e04868a22fd817c8971330fec37e298f3242eb85c374181b12d637f80302' ;; - '7.4') echo '8cc27038d5dbd815759851ba53e70cf62e481b87494cc97cfd97982ada5ba634' ;; - '7.4.1') echo 'e5444a57cda4a95f90b0c9446a9e1b47d3d7f69057765bfb54bd4f482542d548' ;; - '7.4.2') echo '29e49b10984e585d8118b7d0bc452f944e386458df27371b49b4ac1dec4b7fda' ;; - '7.5') echo 'cb87f222c5585bd46838ad4db78463a5c5f3d336e5e2b98dc7c0c586527351c2' ;; - '7.5.1') echo 'f6b8596b10cce501591e92f229816aa4046424f3b24d771751b06779d58c8ec4' ;; - '7.6') echo '7ba68c54029790ab444b39d7e293d3236b2632631fb5f2e012bb28b4ff669e4b' ;; - '7.6.1') echo '6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87' ;; - '7.6.2') echo 'a01b6587e15fe7ed120a0ee299c25982a1eee045abd6a9dd5e216b2f628ef9ac' ;; - '7.6.3') echo '740c2e472ee4326c33bf75a5c9f5cd1e69ecf3f9b580f6e236c86d1f3d98cfac' ;; - '7.6.4') echo 'bed1da33cca0f557ab13691c77f38bb67388119e4794d113e051039b80af9bb1' ;; - '8.0') echo '4159b938ec734a8388ce03f52aa8f3c7ed0d31f5438622545de4f83a89b79788' ;; - '8.0.1') echo '1b6b558be93f29438d3df94b7dfee02e794b94d9aca4611a92cdb79b6b88e909' ;; - '8.0.2') echo 'ff7bf6a86f09b9b2c40bb8f48b25fc19cf2b2664fd1d220cd7ab833ec758d0d7' ;; - '8.1') echo 'a62c5f99585dd9e1f95dab7b9415a0e698fa9dd1e6c38537faa81ac078f4d23e' ;; - '8.1.1') echo 'e111cb9948407e26351227dabce49822fb88c37ee72f1d1582a69c68af2e702f' ;; - '8.2') echo '38f66cd6eef217b4c35855bb11ea4e9fbc53594ccccb5fb82dfd317ef8c2c5a3' ;; - '8.2.1') echo '03ec176d388f2aa99defcadc3ac6adf8dd2bce5145a129659537c0874dea5ad1' ;; - '8.3') echo '591855b517fc635b9e04de1d05d5e76ada3f89f5fc76f87978d1b245b4f69225' ;; - '8.4') echo '3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae' ;; - '8.5') echo '9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026' ;; - '8.6') echo '9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c' ;; - '8.7') echo '544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d' ;; - '8.8') echo 'a4b4158601f8636cdeeab09bd76afb640030bb5b144aafe261a5e8af027dc612' ;; - '8.9') echo 'd725d707bfabd4dfdc958c624003b3c80accc03f7037b5122c4b1d0ef15cecab' ;; - '8.10') echo '5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a' ;; - '8.10.1') echo '1541fa36599e12857140465f3c91a97409b4512501c26f9631fb113e392c5bd1' ;; - *) exit 1 - esac -} - -contains() { - local e - for e in $2; do - [[ $e == $1 ]] && return 0; - done - return 1 -} - -# key-value pairs of what gradle version (value) each gradle plugin version -# (key) should accept. plugin versions are actually prefixes and catch sub- -# versions as well. Pairs are taken from: -# https://developer.android.com/studio/releases/gradle-plugin#updating-gradle -d_gradle_plugin_ver_k=(8.4 8.3 8.2 8.1 8.0 7.4 7.3 7.2.0 7.1 7.0 4.2 4.1 4.0 3.6 3.5 3.4 3.3 3.2 3.1 3.0 2.3 2.2 2.1.3 2.1 2.0) -d_plugin_min_gradle_v=(8.6 8.4 8.2 8.0 8.0 7.5 7.4 7.3.3 7.2 7.0.2 6.7.1 6.5 6.1.1 5.6.4 5.4.1 5.1.1 4.10.1 4.6 4.4 4.1 3.3 2.14.1 2.14.1 2.12 2.12 2.4 2.4 2.3 2.2.1 2.2.1 2.1 2.1 1.12 1.12 1.12 1.11 1.10 1.9 1.8 1.6 1.6 1.4 1.4) - -# All gradle versions we know about -plugin_v=(8.10.1 8.10 8.9 8.8 8.7 8.6 8.5 8.4 8.3 8.2.1 8.2 8.1.1 8.1 8.0.2 8.0.1 8.0 7.6.4 7.6.3 7.6.2 7.6.1 7.6 7.5.1 7.5 7.4.2 7.4.1 7.4 7.3.3 7.3.2 7.3.1 7.3 7.2 7.1.1 7.1 7.0.2 7.0.1 7.0 6.9.4 6.9.3 6.9.2 6.9.1 6.9 6.8.3 6.8.2 6.8.1 6.8 6.7.1 6.7 6.6.1 6.6 6.5.1 6.5 6.4.1 6.4 6.3 6.2.2 6.2.1 6.2 6.1.1 6.1 6.0.1 6.0 5.6.4 5.6.3 5.6.2 5.6.1 5.6 5.5.1 5.5 5.4.1 5.4 5.3.1 5.3 5.2.1 5.2 5.1.1 5.1 5.0 4.10.3 4.10.2 4.10.1 4.10 4.9 4.8.1 4.8 4.7 4.6 4.5.1 4.5 4.4.1 4.4 4.3.1 4.3 4.2.1 4.2 4.1 4.0.2 4.0.1 4.0 3.5.1 3.5 3.4.1 3.4 3.3 3.2.1 3.2 3.1 3.0 2.14.1 2.14 2.13 2.12 2.11 2.10 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2.1 2.2 2.1 2.0 1.12 1.11 1.10 1.9 1.8 1.7 1.6 1.5 1.4 1.3 1.2 1.1 1.0 0.9.2 0.9.1 0.9 0.8 0.7) - -v_all=${plugin_v[@]} - -# Earliest file takes priority -# Last key takes priority if there are duplicates (matching java.util.Properties) -for f in {.,..}/gradle/wrapper/gradle-wrapper.properties; do - [[ -f $f ]] || continue - while IFS='' read -r line || [ -n "$line" ]; do - line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds - if [[ $line == 'distributionUrl='* ]]; then - wrapper_ver=${line#*/gradle-} - wrapper_ver=${wrapper_ver%-*.zip} - fi - done < $f - [[ -n $wrapper_ver ]] && break -done - -if [[ -n $wrapper_ver ]]; then - v_found=$wrapper_ver - echo "Found $v_found via distributionUrl" - run_gradle -fi - -# Earliest takes priority -for f in {.,..}/build.gradle{,.kts}; do - [[ -f $f ]] || continue - while IFS='' read -r line || [ -n "$line" ]; do - line=$(printf "$line" | tr -d '\r') # strip Windows linefeeds - if [[ -z "$plugin_pver" && $line == *'com.android.tools.build:gradle:'* ]]; then - plugin_pver=${line#*[\'\"]com.android.tools.build:gradle:} - plugin_pver=${plugin_pver%[\'\"]*} - elif [[ -z "$wrapper_ver" && $line == *'gradleVersion = '* ]]; then - wrapper_ver=${line#*gradleVersion*=*[\'\"]} - wrapper_ver=${wrapper_ver%[\'\"]*} - fi - done < $f -done - -if [[ -n $wrapper_ver ]]; then - v_found=$wrapper_ver - echo "Found $v_found via gradleVersion" - run_gradle -fi - -if [[ -n $plugin_pver ]]; then - i=0 - match=false - for k in "${d_gradle_plugin_ver_k[@]}"; do - if [[ $plugin_pver == ${k}* ]]; then - plugin_ver=${d_plugin_min_gradle_v[$i]} - match=true - break - fi - let i++ - done - if $match; then - v_found=$plugin_ver - echo "Found $v_found via gradle plugin version $k" - fi -fi - -# Find the highest version available -for v in ${plugin_v[*]}; do - if contains $v "${v_all[*]}"; then - v_def=$v - break - fi -done - -if [[ -z $v_found ]]; then - echo "No suitable gradle version found - defaulting to $v_def" - v_found=$v_def -fi - -run_gradle diff --git a/hooks/install-hooks.sh b/hooks/install-hooks.sh index 69b314d4..e266301b 100755 --- a/hooks/install-hooks.sh +++ b/hooks/install-hooks.sh @@ -2,7 +2,7 @@ # # Install all the client hooks -BASE_DIR="$(cd $(dirname $0); pwd -P)" +BASE_DIR="$(cd $(dirname $0) || exit; pwd -P)" HOOK_NAMES="applypatch-msg pre-applypatch post-applypatch pre-commit prepare-commit-msg commit-msg post-commit pre-rebase post-checkout post-merge pre-receive update post-receive post-update pre-auto-gc" HOOK_DIR="$(git rev-parse --show-toplevel)/.git/hooks" diff --git a/hooks/pre-commit b/hooks/pre-commit index c1761aa8..a147e689 100755 --- a/hooks/pre-commit +++ b/hooks/pre-commit @@ -9,9 +9,9 @@ exec 1>&2 files=`git diff-index --cached HEAD 2>&1 | sed 's/^:.* //' | uniq | cut -b100-500` if [ -z "$files" ]; then PY_FILES="fdroid makebuildserver setup.py fdroidserver/*.py examples/*.py tests/*-release-checksums.py" - PY_TEST_FILES="tests/*.TestCase" + PY_TEST_FILES="tests/test_*.py" SH_FILES="hooks/pre-commit" - BASH_FILES="gradlew-fdroid jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*" + BASH_FILES="jenkins-build-all jenkins-setup-build-environment jenkins-test completion/bash-completion buildserver/provision-*" RB_FILES="buildserver/Vagrantfile" YML_FILES=".*.yml .yamllint */*.yml */*.yaml" else @@ -27,16 +27,16 @@ else for f in $files; do test -e $f || continue case $f in + test_*.py) + PY_TEST_FILES+=" $f" + ;; *.py) PY_FILES+=" $f" ;; - *.TestCase) - PY_TEST_FILES+=" $f" - ;; *.rb) RB_FILES+=" $f" ;; - *.yml|.*.yml|.yamllint) + *.yml|*.yaml|.yamllint) YML_FILES+=" $f" ;; *) @@ -66,7 +66,7 @@ cmd_exists() { } find_command() { - for name in $@; do + for name in "$@"; do for suff in "3" "-3" "-python3" ""; do cmd=${name}${suff} if cmd_exists $cmd; then @@ -91,7 +91,7 @@ if [ "$PY_FILES $PY_TEST_FILES" != " " ]; then err "pyflakes tests failed!" fi # ignore vendored files - if ! $PYDOCSTYLE --match='(?!apksigcopier|looseversion).*\.py' $PY_FILES $PY_TEST_FILES; then + if ! $PYDOCSTYLE --match='(?!apksigcopier|looseversion|setup|test_).*\.py' $PY_FILES $PY_TEST_FILES; then err "pydocstyle tests failed!" fi fi diff --git a/locale/Makefile b/locale/Makefile index cbb16b90..933aaf3c 100644 --- a/locale/Makefile +++ b/locale/Makefile @@ -1,8 +1,7 @@ -FILES = ../fdroid $(wildcard ../fdroidserver/*.py) \ +FILES = $(wildcard ../fdroidserver/*.py) \ $(wildcard /usr/lib/python3.*/argparse.py) \ - $(wildcard /usr/lib/python3.*/optparse.py) \ - $(wildcard /usr/lib/python3.*/getopt.py) + ../fdroid # these are the supported languages ALL_LINGUAS = $(shell sed -En 's,include locale/([^/]+)/.*,\1,p' ../MANIFEST.in) diff --git a/locale/POTFILES.in b/locale/POTFILES.in deleted file mode 100644 index 07ad4fcc..00000000 --- a/locale/POTFILES.in +++ /dev/null @@ -1,17 +0,0 @@ -fdroid -fdroidserver/btlog.py -fdroidserver/build.py -fdroidserver/checkupdates.py -fdroidserver/common.py -fdroidserver/deploy.py -fdroidserver/import.py -fdroidserver/init.py -fdroidserver/install.py -fdroidserver/lint.py -fdroidserver/metadata.py -fdroidserver/publish.py -fdroidserver/rewritemeta.py -fdroidserver/scanner.py -fdroidserver/stats.py -fdroidserver/update.py -fdroidserver/verify.py diff --git a/locale/ar/LC_MESSAGES/fdroidserver.po b/locale/ar/LC_MESSAGES/fdroidserver.po index 9980ff5a..ca0c3426 100644 --- a/locale/ar/LC_MESSAGES/fdroidserver.po +++ b/locale/ar/LC_MESSAGES/fdroidserver.po @@ -4,20 +4,21 @@ # Rex_sa , 2023. # PD , 2023. # Laachir , 2024. +# Cool Man , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-01-17 16:52+0000\n" -"Last-Translator: Laachir \n" +"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"PO-Revision-Date: 2024-09-21 19:31+0000\n" +"Last-Translator: Cool Man \n" "Language-Team: Arabic \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 ? 4 : 5;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -37,6 +38,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -47,11 +52,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -77,17 +77,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -103,14 +92,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [خيارات]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -131,13 +112,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -158,8 +132,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -173,11 +145,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -188,7 +155,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -198,13 +165,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() غير محدد" @@ -295,10 +264,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -325,6 +290,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -334,7 +307,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -390,11 +362,13 @@ msgstr[1] "" msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -417,6 +391,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -430,6 +408,10 @@ msgstr "اﻷمر '%s' لم يتم التعرف عليه.\n" msgid "Commit changes" msgstr "التزم بالتغييرات" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -439,20 +421,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -472,6 +451,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -498,6 +478,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -560,11 +545,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -613,15 +593,14 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "جاري التحميل %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" @@ -655,12 +634,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -670,6 +643,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -687,6 +680,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -703,6 +705,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -772,10 +778,6 @@ msgstr "" msgid "Finished" msgstr "تم الانتهاء" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -807,7 +809,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -872,15 +873,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -925,6 +924,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -970,7 +974,7 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" -msgstr "" +msgstr "تثبيت الحزم المدمجة على الأجهزة" #: ../fdroidserver/install.py #, python-format @@ -984,7 +988,7 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" -msgstr "" +msgstr "التفاعل مع خادم HTTP للمستودع" #: ../fdroidserver/update.py msgid "Invalid APK" @@ -1010,16 +1014,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1132,6 +1132,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1161,6 +1166,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1221,7 +1230,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1237,7 +1245,6 @@ msgstr "" #: ../fdroidserver/__main__.py #, fuzzy -#| msgid "no version information found" msgid "No version information could be found." msgstr "لم يتم العثور على معلومات النسخة" @@ -1258,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1276,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1293,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "خيارات" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1354,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1440,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1453,14 +1483,6 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1474,6 +1496,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1487,6 +1514,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1534,6 +1566,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1654,6 +1690,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1718,6 +1758,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1739,11 +1783,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1753,7 +1792,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "تم العثور على استثناء غير معروف!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1791,6 +1829,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1821,11 +1860,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1839,6 +1873,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1858,11 +1893,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1877,27 +1908,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "استخدام" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "الاستخدام: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1915,6 +1929,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1931,11 +1950,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1946,6 +1960,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1967,6 +1986,11 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." @@ -1976,6 +2000,10 @@ msgstr "" msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1988,6 +2016,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2000,6 +2036,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2010,18 +2051,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2032,11 +2069,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2047,8 +2086,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2067,7 +2104,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2081,14 +2118,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2107,14 +2140,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "مركب" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2145,10 +2170,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2164,13 +2185,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2189,8 +2212,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2198,20 +2219,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2224,10 +2239,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2240,8 +2251,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2255,35 +2264,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "عدد صحيح" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2321,8 +2316,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2341,30 +2334,15 @@ msgstr "لا يوجد \"أيقونة\" في {appid}" msgid "no APK supplied" msgstr "لم يتم توفير ملف APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "لم يتم العثور على معلومات الإصدار!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "لم يتم العثور على معلومات النسخة" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "غير مسموح به مع الوسيط %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2374,72 +2352,6 @@ msgstr "أحد الوسائط %s مطلوب" msgid "only accepts strings, lists, and tuples" msgstr "يقبل فقط السلاسل والقوائم والأنساق" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "لم يتم التعرف على الإختيار -%s" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "الخيار - %s يتطلب وسيطة" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "الخيار --%s لم يتم التعرف عليه" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "مناقشات اختيارية" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2450,8 +2362,6 @@ msgstr "خيارات" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2484,13 +2394,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2506,17 +2417,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "اظهار رقم واصدار نسخة البرنامج والخروج" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "اظهر رسالة المساعدة واخرج" @@ -2550,29 +2451,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2583,9 +2480,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "الإستخدام: " @@ -2598,6 +2493,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2610,21 +2509,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2645,7 +2542,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2686,9 +2582,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2711,6 +2607,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/az/LC_MESSAGES/fdroidserver.po b/locale/az/LC_MESSAGES/fdroidserver.po index a1bc9f88..48050f95 100644 --- a/locale/az/LC_MESSAGES/fdroidserver.po +++ b/locale/az/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-05-26 19:39+0000\n" "Last-Translator: Mehrab Poladov \n" "Language-Team: Azerbaijani \n" @@ -34,6 +34,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +48,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,17 +73,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +88,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +108,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +128,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +141,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +151,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +161,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -292,10 +260,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +286,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +303,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -382,16 +353,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -414,6 +392,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -427,6 +409,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -436,20 +422,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -469,6 +452,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -495,6 +479,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -557,11 +546,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,13 +594,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -652,12 +635,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -667,6 +644,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -684,6 +681,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -700,6 +706,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -769,10 +779,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -804,7 +810,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -869,15 +874,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -922,6 +925,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1007,16 +1015,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1129,6 +1133,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1158,6 +1167,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1218,7 +1231,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1253,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1271,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1288,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1349,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1435,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1448,12 +1483,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1469,6 +1501,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1482,6 +1519,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1529,6 +1571,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1649,6 +1695,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1713,6 +1763,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1734,11 +1788,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1748,7 +1797,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1786,6 +1834,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1816,11 +1865,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1834,6 +1878,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1853,11 +1898,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1872,27 +1913,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1910,6 +1934,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,11 +1955,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1941,6 +1965,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1962,15 +1991,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1983,6 +2025,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1995,6 +2045,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2005,18 +2060,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2027,11 +2078,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2042,8 +2095,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2062,7 +2113,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2076,14 +2127,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,14 +2149,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2140,10 +2179,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2159,13 +2194,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2183,8 +2220,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2192,20 +2227,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2218,10 +2247,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2234,8 +2259,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2249,35 +2272,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2315,8 +2324,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2335,30 +2342,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2368,72 +2360,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2443,8 +2369,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2477,13 +2401,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2499,17 +2424,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2543,29 +2458,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2576,9 +2487,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2591,6 +2500,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2603,21 +2516,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2638,7 +2549,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2679,9 +2589,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2704,6 +2614,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ba/LC_MESSAGES/fdroidserver.po b/locale/ba/LC_MESSAGES/fdroidserver.po new file mode 100644 index 00000000..9804a4f7 --- /dev/null +++ b/locale/ba/LC_MESSAGES/fdroidserver.po @@ -0,0 +1,2695 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# Zulfar , 2025. +msgid "" +msgstr "" +"Project-Id-Version: fdroidserver 2.4.0\n" +"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-06-22 06:50+0000\n" +"Last-Translator: Zulfar \n" +"Language-Team: Bashkir \n" +"Language: ba\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.13-dev\n" + +#: ../fdroidserver/nightly.py +msgid "" +"\n" +"SSH public key to be used as deploy key:" +msgstr "" +"\n" +"Урынлаштырыу асҡысы итеп ҡулланыу өсөн SSH асыҡ асҡысы:" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "" +"\n" +"{path} encoded for the DEBUG_KEYSTORE secret variable:" +msgstr "" +"\n" +"{path} DEBUG_KEYSTORE йәшерен үҙгәреүсәне өсөн кодланған:" + +#: ../fdroidserver/lint.py +#, python-format +msgid "\"%s/\" has no matching metadata file!" +msgstr "\"%s/\" өсөн ярашлы мета-мәғлүмәт файлы юҡ!" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\" асҡысы көҙгөләргә өҫтәлергә тейеш түгел!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "\"local_copy_dir\" {path} does not exist!" +msgstr "\"local_copy_dir\" {path} каталогы юҡ!" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "\"{apkfilename}\" {dev} ҡоролмаһында инде ҡуйылған." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" contains recent {name} ({version})" +msgstr "\"{path}\" эсендә {name} ({version}) ҡушымтаһының яңы версияһы бар." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "\"{path}\" exists but s3cmd is not installed!" +msgstr "\"{path}\" бар, ләкин s3cmd ҡуйылмаған!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" +msgstr "\"{path}\" — яраҡлы файл форматы түгел (ҡулланығыҙ: metadata/*.yml)" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" is signed by a key that is not allowed:" +msgstr "\"{path}\" рөхсәт ителмәгән асҡыс менән тамғаланған:" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "\"{url}\" is not a valid URL!" +msgstr "\"{url}\" — дөрөҫ URL түгел!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%(prog)s: error: %(message)s\n" +msgstr "%(prog)s: хата: %(message)s\n" + +#: ../fdroidserver/publish.py +#, python-format +msgid "%d APKs failed to be signed or verified!" +msgstr "%d APK тамғаланманы йәки тикшерелмәне!" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "%d problems found" +msgstr "%d проблема табылды" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%r is not callable" +msgstr "%r саҡырылмалы түгел" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s did not produce a dict!" +msgstr "%s һүҙлек (dict) ҡайтарманы!" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s has bad SHA-256: %s" +msgstr "%s файлының SHA-256 суммаһы дөрөҫ түгел: %s" + +#: ../fdroidserver/lint.py +#, python-format +msgid "%s is not an accepted build field" +msgstr "%s — рөхсәт ителгән йыйыу яланы түгел" + +#: ../fdroidserver/common.py +msgid "'keypass' not found in config.yml!" +msgstr "config.yml файлында 'keypass' табылманы!" + +#: ../fdroidserver/common.py +msgid "'keystore' is NONE and 'smartcardoptions' is blank!" +msgstr "'keystore' күрһәтелмәгән һәм 'smartcardoptions' буш!" + +#: ../fdroidserver/common.py +msgid "'keystore' not found in config.yml!" +msgstr "config.yml файлында 'keystore' табылманы!" + +#: ../fdroidserver/common.py +msgid "'keystorepass' not found in config.yml!" +msgstr "config.yml файлында 'keystorepass' табылманы!" + +#: ../fdroidserver/common.py +msgid "'repo_keyalias' not found in config.yml!" +msgstr "config.yml файлында 'repo_keyalias' табылманы!" + +#: /usr/lib/python3.11/argparse.py +msgid "'required' is an invalid argument for positionals" +msgstr "Позицион аргументтар өсөн 'required' — дөрөҫ булмаған аргумент" + +#: ../fdroidserver/common.py +msgid "'sdk_path' not set in config.yml!" +msgstr "config.yml файлында 'sdk_path' күрһәтелмәгән!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" +msgstr "'{aapt}' бигерәк иҫке, F-Droid өсөн build-tools-{version} йәки яңыраҡ версияһы кәрәк!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{path}' failed to execute!" +msgstr "'{path}' башҡарылманы!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{path}' has invalid format, it should be a dictionary!" +msgstr "'{path}' форматы дөрөҫ түгел, ул һүҙлек булырға тейеш!" + +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" +msgstr "'{appid}' өсөн '{value}' — дөрөҫ булмаған {field} ҡиммәте. Regex ҡалыбы: {pattern}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field}, should be {pattern}" +msgstr "'{value}' — яраҡлы {field} түгел, {pattern} булырға тейеш" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request тик бер appid менән генә эшләй!" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "...checkupdate failed for {appid} : {error}" +msgstr "...{appid} өсөн checkupdate уңышһыҙ үтте: {error}" + +#: /usr/lib/python3.11/argparse.py +msgid ".__call__() not defined" +msgstr ".__call__() билдәләнмәгән" + +#: ../fdroidserver/lint.py +msgid "/issues is missing" +msgstr "/issues юҡ" + +#: ../fdroidserver/mirror.py +msgid "A URL is required as an argument!" +msgstr "Аргумент итеп URL күрһәтеү мотлаҡ!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "APK signatures have different certificates in {path}:" +msgstr "{path} эсендәге APK-имзаларҙың сертификаттары төрлө:" + +#: ../fdroidserver/__main__.py +msgid "Add PGP signatures using GnuPG for packages in repo" +msgstr "Репозиторийҙағы пакеттарға GnuPG ярҙамында PGP-имзалар өҫтәү" + +#: ../fdroidserver/update.py +msgid "Add a repo signing key to an unsigned repo" +msgstr "Тамғаланмаған репозиторийға репо-имзалау асҡысын өҫтәү" + +#: ../fdroidserver/update.py +msgid "Add skeleton metadata files for APKs that are missing them" +msgstr "Мета-мәғлүмәт файлдары булмаған APK-лар өсөн ҡалыптар өҫтәү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Adding new repo for only {name}" +msgstr "Тик {name} өсөн генә яңы репозиторий өҫтәү" + +#: ../fdroidserver/init.py +msgid "Alias of the repo signing key in the keystore" +msgstr "Асҡыстар һаҡлағысындағы репо-имзалау асҡысының псевдонимы" + +#: ../fdroidserver/build.py +msgid "AllowedAPKSigningKeys missing but reference binary supplied" +msgstr "AllowedAPKSigningKeys юҡ, ләкин өлгө бинар файл бирелгән" + +#: ../fdroidserver/import_subcommand.py +msgid "Allows a different revision (or git branch) to be specified for the initial import" +msgstr "Башланғыс импорт өсөн икенсе ревизия (йәки git ботағын) күрһәтергә мөмкинлек бирә" + +#: ../fdroidserver/mirror.py +msgid "Also mirror the full archive section" +msgstr "Шулай уҡ архив бүлегенең тулы күсермәһен яһау" + +#: ../fdroidserver/lint.py +msgid "Also warn about formatting issues, like rewritemeta -l" +msgstr "Шулай уҡ rewritemeta -l кеүек форматлау проблемалары тураһында иҫкәртеү" + +#: ../fdroidserver/scanner.py +msgid "Android AAR library" +msgstr "Android AAR китапханаһы" + +#: ../fdroidserver/scanner.py +msgid "Android APK file" +msgstr "Android APK файлы" + +#: ../fdroidserver/scanner.py +msgid "Android DEX code" +msgstr "Android DEX коды" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Android SDK not found at {path}!" +msgstr "Android SDK {path} юлында табылманы!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' does not exist!" +msgstr "'{path}' Android SDK юлы юҡ!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' is not a directory!" +msgstr "'{path}' Android SDK юлы — каталог түгел!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK tool {cmd} not found!" +msgstr "{cmd} Android SDK ҡоралы табылманы!" + +#: ../fdroidserver/lint.py +msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Ҡушымтала Binaries бар, ләкин сертификатты беркетеү өсөн тейешле AllowedAPKSigningKeys юҡ." + +#: ../fdroidserver/lint.py +msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" +msgstr "Ҡушымтала NoSourceSince йәки ArchivePolicy \"0 versions\" йәки 0 ҡуйылған, ләкин AutoUpdateMode йәки UpdateCheckMode None түгел" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "App is in '{repo}' but has a link to {url}" +msgstr "Ҡушымта '{repo}' эсендә, ләкин {url} адресына һылтанмаһы бар" + +#: ../fdroidserver/lint.py +msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Ҡушымта версияһында бинар файл бар, ләкин сертификатты беркетеү өсөн тейешле AllowedAPKSigningKeys юҡ." + +#: ../fdroidserver/lint.py +msgid "Appending .git is not necessary" +msgstr ".git ҡушып яҙыу мотлаҡ түгел" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Archiving {apkfilename} with invalid signature!" +msgstr "{apkfilename} дөрөҫ булмаған имза менән архивлана!" + +#: ../fdroidserver/lint.py +msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." +msgstr "AutoUpdateMode-ла UpdateCheckMode: HTTP өсөн ҡалып булырға тейеш." + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Барлыҡ һорауҙарға автоматик рәүештә \"юҡ\" тигән яуап." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Барлыҡ һорауҙарға автоматик рәүештә \"эйе\" тигән яуап." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" +msgstr "Көҙгөләр көйләүҙәрендә дөрөҫ булмаған яҙма төрө \"{mirrortype}\": {mirror}" + +#: ../fdroidserver/mirror.py +msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" +msgstr "Көҙгө яһау өсөн төп URL, һорау юлы аша индекс имзалау асҡысын ҡушырға мөмкин: ?fingerprint=" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in build '{versionName}'" +msgstr "'{versionName}' йыйылмаһында '{branch}' ботағы коммит булараҡ ҡулланылған" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in srclib '{srclib}'" +msgstr "'{srclib}' сығанаҡ китапханаһында '{branch}' ботағы коммит булараҡ ҡулланылған" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Broken symlink: {path}" +msgstr "Өҙөлгән символик һылтанма: {path}" + +#: ../fdroidserver/__main__.py +msgid "Build a package from source" +msgstr "Пакетты сығанаҡ кодтан йыйыу" + +#: ../fdroidserver/build.py +msgid "Build all applications available" +msgstr "Барлыҡ ҡушымталарҙы йыйыу" + +#: ../fdroidserver/lint.py +msgid "Build generated by `fdroid import` - remove disable line once ready" +msgstr "`fdroid import` менән яһалған йыйылма — әҙер булғас, һүндереү юлын алып ташлағыҙ" + +#: ../fdroidserver/checkupdates.py +msgid "Build metadata git repo has uncommited changes!" +msgstr "Йыйыу мета-мәғлүмәттәренең git репозиторийында һаҡланмаған үҙгәрештәр бар!" + +#: ../fdroidserver/build.py +msgid "Build only the latest version of each package" +msgstr "Һәр пакеттың һуңғы версияһын ғына йыйыу" + +#: ../fdroidserver/init.py +#, python-format +msgid "Built repo based in \"%s\" with this config:" +msgstr "\"%s\" каталогында ошо көйләүҙәр менән репозиторий төҙөлдө:" + +#: ../fdroidserver/checkupdates.py +msgid "Can't auto-update app with no CurrentVersionCode" +msgstr "CurrentVersionCode булмаған ҡушымтаны автоматик яңыртып булмай" + +#: ../fdroidserver/build.py +msgid "Can't build due to {} error while scanning" +msgid_plural "Can't build due to {} errors while scanning" +msgstr[0] "Сканлау ваҡытындағы {} хата арҡаһында йыйып булмай" +msgstr[1] "Сканлау ваҡытындағы {} хата арҡаһында йыйып булмай" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path} уҡылманы: {error}" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Cannot rewrite \"{path}\"" +msgstr "\"{path}\" файлын үҙгәртеп яҙып булмай" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +#, python-format +msgid "Categories '%s' is not valid" +msgstr "'%s' категориялары дөрөҫ түгел" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +msgid "Categories are not set" +msgstr "Категориялар күрһәтелмәгән" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Category \"{category}\" defined but not used for any apps!" +msgstr "\"{category}\" категорияһы билдәләнгән, ләкин бер ҡушымтала ла ҡулланылмай!" + +#: ../fdroidserver/__main__.py +msgid "Check for updates to applications" +msgstr "Ҡушымталар өсөн яңыртыуҙарҙы тикшереү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" +msgstr "{appid} өсөн архивлауҙы тикшереү - apk:{integer}, һаҡларға:{keep}, архивта:{arch}" + +#: ../fdroidserver/update.py +msgid "Clean update - don't uses caches, reprocess all APKs" +msgstr "Таҙа яңыртыу — кештарҙы ҡулланмаҫҡа, бөтә APK-ларҙы яңынан эшкәртергә" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Лог сығарылышын төҫлө итеү" + +#: ../fdroidserver/import_subcommand.py +msgid "Comma separated list of categories." +msgstr "Өтөр менән айырылған категориялар исемлеге." + +#: ../fdroidserver/__main__.py +#, python-format +msgid "Command '%s' not recognised.\n" +msgstr "'%s' командаһы танылманы.\n" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes" +msgstr "Үҙгәрештәрҙе һаҡлау (commit)" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Үҙгәрештәрҙе һаҡларға (commit), ебәрергә (push), шунан берләштереүгә һорау яһарға" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Conflicting \"{field}\" definitions between .yml and localized files:" +msgstr ".yml һәм локалләштерелгән файлдар араһында \"{field}\" өсөн ҡапма-ҡаршылыҡлы билдәләмәләр:" + +#: ../fdroidserver/__main__.py +msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." +msgstr "Ҡапма-ҡаршылыҡлы аргументтар: '--verbose' һәм '--quiet' бер үк ваҡытта күрһәтелә алмай." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not find '{command}' on your system" +msgstr "Системала '{command}' табылманы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version code" +msgstr "Һуңғы версияның кодын табып булманы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version name" +msgstr "Һуңғы версияның исемен табып булманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not find {path} to remove it" +msgstr "Юйыу өсөн {path} табылманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not open APK {path} for analysis: " +msgstr "Анализ өсөн {path} APK файлын асып булманы: " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not parse size \"{size}\", wrong type \"{type}\"" +msgstr "\"{size}\" үлсәмен танып булманы, дөрөҫ булмаған тип \"{type}\"" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/import_subcommand.py +msgid "Couldn't find Application ID" +msgstr "Ҡушымтаның идентификаторын (Application ID) табып булманы" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find any version information" +msgstr "Бер ниндәй ҙә версия мәғлүмәте табылманы" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find package ID" +msgstr "Пакет идентификаторын табып булманы" + +#: ../fdroidserver/update.py +msgid "Cowardily refusing to overwrite existing signing key setup!" +msgstr "Инде булған имзалау асҡысы көйләүҙәрен өҫтөнән яҙҙырыуҙан ҡурҡаҡтарса баш тартам!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Created new container \"{name}\"" +msgstr "Яңы \"{name}\" контейнеры булдырылды" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating \"{path}\" for configuring s3cmd." +msgstr "s3cmd-ты көйләү өсөн \"{path}\" булдырыла." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Буш {config_file} булдырыла" + +#: ../fdroidserver/publish.py +msgid "Creating log directory" +msgstr "Логтар каталогы булдырыла" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating new S3 bucket: {url}" +msgstr "Яңы S3 биҙрәһе булдырыла: {url}" + +#: ../fdroidserver/publish.py +msgid "Creating output directory" +msgstr "Сығарыу каталогы булдырыла" + +#: ../fdroidserver/index.py +msgid "Creating signed index with this key (SHA256):" +msgstr "Ошо асҡыс менән тамғаланған индекс булдырыла (SHA256):" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "Creating temporary directory" +msgstr "Ваҡытлыса каталог булдырыла" + +#: ../fdroidserver/index.py +msgid "Creating unsigned index in preparation for signing" +msgstr "Тамғалауға әҙерлек өсөн тамғаланмаған индекс булдырыла" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" +msgstr "Ағымдағы CurrentVersionCode {cv} иң иҫке йыйылма яҙмаһынан {versionCode} бәләкәйерәк" + +#: ../fdroidserver/nightly.py +msgid "DEBUG_KEYSTORE is not set or the value is incomplete" +msgstr "DEBUG_KEYSTORE күрһәтелмәгән йәки уның ҡиммәте тулы түгел" + +#: ../fdroidserver/update.py +msgid "Delete APKs and/or OBBs without metadata from the repo" +msgstr "Репозиторийҙан мета-мәғлүмәттәрһеҙ APK-ларҙы һәм/йәки OBB-ларҙы юйыу" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting archive, repo is too big ({size} max {limit})" +msgstr "Архив юйыла, репозиторий бигерәк ҙур ({size} макс. {limit})" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" +msgstr "git-көҙгөнөң тарихы юйыла, репозиторий бигерәк ҙур ({size} макс. {limit})" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Deleting unknown file: {path}" +msgstr "Билдәһеҙ файл юйыла: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Description '%s' is just the app's summary" +msgstr "'%s' тасуирламаһы — ул ҡушымтаның ҡыҫҡаса аңлатмаһы ғына" + +#: ../fdroidserver/lint.py +msgid "Description has a duplicate line" +msgstr "Тасуирламала ҡабатланған юл бар" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Description of length {length} is over the {limit} char limit" +msgstr "{length} оҙонлоғондағы тасуирлама {limit} символ сикләүенән артып китә" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Did you mean config/{name}.yml?" +msgstr "Һеҙ config/{name}.yml-ды күҙ уңында тоттоғоҙмо?" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Did you mean {code}?" +msgstr "Һеҙ {code}-ты күҙ уңында тоттоғоҙмо?" + +#: ../fdroidserver/import_subcommand.py +msgid "Do not add 'disable:' to the generated build entries" +msgstr "Булдырылған йыйылма яҙмаларына 'disable:' өҫтәмәгеҙ" + +#: ../fdroidserver/nightly.py +msgid "Do not deploy the new files to the repo" +msgstr "Яңы файлдарҙы репозиторийға урынлаштырмағыҙ" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Do not include \"{path}\" in URL!" +msgstr "URL-ға \"{path}\"-ты индермәгеҙ!" + +#: ../fdroidserver/init.py +msgid "Do not prompt for Android SDK path, just fail" +msgstr "Android SDK юлын һорамаҫҡа, шунда уҡ уңышһыҙлыҡ менән тамамларға" + +#: ../fdroidserver/nightly.py +msgid "Do not remove the private keys generated from the keystore" +msgstr "Асҡыстар һаҡлағысынан булдырылған шәхси асҡыстарҙы юймағыҙ" + +#: ../fdroidserver/build.py +msgid "Don't create a source tarball, useful when testing a build" +msgstr "Сығанаҡ кодтарҙың tarball-ын яһамаҫҡа, йыйылманы һынағанда файҙалы" + +#: ../fdroidserver/build.py +msgid "Don't refresh the repository, useful when testing a build with no internet connection" +msgstr "Репозиторийҙы яңыртмаҫҡа, интернетһыҙ йыйылманы һынағанда файҙалы" + +#: ../fdroidserver/deploy.py ../fdroidserver/nightly.py +msgid "Don't use rsync checksums" +msgstr "rsync контроль суммаларын ҡулланмаҫҡа" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "F-Droid.apk-ны селтәргә аҙыраҡ мәғлүмәт ебәргән көҙгөләр аша йөкмәтергә" + +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" +msgstr "Бәләкәй репозиторийҙарҙың тулы көҙгөләрен йөкмәтеү" + +#: ../fdroidserver/common.py +msgid "Downloading the repository already failed once, not trying again." +msgstr "Репозиторийҙы йөкмәтеү бер тапҡыр уңышһыҙ булды инде, яңынан ҡабатланмаясаҡ." + +#: ../fdroidserver/verify.py +#, python-brace-format +msgid "Downloading {url} failed. {error}" +msgstr "{url} йөкмәтелмәне. {error}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Duplicate Anti-Feature declaration at {path} was ignored!" +msgstr "{path} юлындағы ҡабатланған Anti-Feature декларацияһы иғтибарһыҙ ҡалдырылды!" + +#: ../fdroidserver/index.py +#, python-format +msgid "Duplicate entry \"%s\" in mirrors config!" +msgstr "Көҙгөләр көйләүҙәрендә ҡабатланған \"%s\" яҙмаһы!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Duplicate link in '{field}': {url}" +msgstr "'{field}' яланында ҡабатланған һылтанма: {url}" + +#: ../fdroidserver/common.py +#, python-format +msgid "ERROR: %(message)s" +msgstr "ХАТА: %(message)s" + +#: ../fdroidserver/__main__.py +msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" +msgstr "ХАТА: \"server\" аҫкомандаһы алынды, \"deploy\" командаһын ҡулланығыҙ!" + +#: ../fdroidserver/nightly.py +msgid "ERROR: unsupported CI type, patches welcome!" +msgstr "ХАТА: яраҡһыҙ CI төрө, төҙәтмәләр хуплана!" + +#: ../fdroidserver/nightly.py +#, python-format +msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "ХАТА: яраҡһыҙ git хосты \"%s\", төҙәтмәләр хуплана!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "ХАТА: {path} эсендәге {key} асҡысы \"archive\" йәки \"repo\" түгел!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ХАТА: {key} — дөрөҫ асҡыс түгел!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ХАТА: {key} асҡысының ҡиммәте {t} тибында булырға тейеш!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "ХАТА: {path} эсендәге {key}:{subkey} рөхсәт ителгән асҡыстар исемлегендә юҡ: {allowed_keys}!" + +#: ../fdroidserver/__main__.py +#, python-brace-format +msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." +msgstr "Кодировка '{enc}' итеп ҡуйылған, F-Droid-та кодировка проблемалары булыуы мөмкин. Иң яҡшы һөҙөмтә өсөн уны 'UTF-8'-гә ҡуйығыҙ." + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"Enter the path to the Android SDK (%s) here:\n" +"> " +msgstr "" +"Android SDK-ның юлын (%s) бында яҙығыҙ:\n" +"> " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {var} from {configname} is not set!" +msgstr "{configname} эсенән {var} мөхит үҙгәреүсәне күрһәтелмәгән!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "{{env: {var}}} мөхит үҙгәреүсәне күрһәтелмәгән!" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "'github_releases' урынлаштырыу хатаһы, {} юҡ. (Башта `fdroid update` командаһын эшләтеп алырға кәрәк булыуы мөмкин.)" + +#: ../fdroidserver/import_subcommand.py +msgid "Error while getting repo address" +msgstr "Репозиторий адресын алғанда хата" + +#: ../fdroidserver/scanner.py +msgid "Exit with a non-zero code if problems were found" +msgstr "Проблемалар табылһа, нулдән айырмалы код менән сығырға" + +#: ../fdroidserver/__main__.py +msgid "Extract application metadata from a source repository" +msgstr "Сығанаҡ репозиторийынан ҡушымтаның мета-мәғлүмәттәрен сығарыу" + +#: ../fdroidserver/__main__.py +msgid "Extract signatures from APKs" +msgstr "APK-ларҙан имзаларҙы сығарыу" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk-ны билдәле сығанаҡтарҙың береһенән дә йөкмәтеп булманы!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed copying {path}: {error}" +msgstr "{path} күсерелмәне: {error}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Failed fetching signatures for '{apkfilename}': {error}" +msgstr "'{apkfilename}' өсөн имзаларҙы алып булманы: {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed reading {path}: {error}" +msgstr "{path} уҡылманы: {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed resizing {path}: {error}" +msgstr "{path} үлсәме үҙгәртелмәне: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Failed to create S3 bucket: {url}" +msgstr "S3 контейнерын булдырып булманы: {url}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, deleting {path}" +msgstr "APK тураһында мәғлүмәт алып булманы, {path} юйыла" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, skipping {path}" +msgstr "APK тураһында мәғлүмәт алып булманы, {path} үткәреп ебәрелә" + +#: ../fdroidserver/update.py +msgid "Failed to get APK signing key fingerprint" +msgstr "APK имзалау асҡысының бармаҡ эҙен алып булманы" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Failed to install '{apkfilename}' on {dev}: {error}" +msgstr "'{apkfilename}' {dev} ҡоролмаһына ҡуйылманы: {error}" + +#: ../fdroidserver/common.py +msgid "Failed to sign application" +msgstr "Ҡушымтаны тамғалап булманы" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Fetched buildserverid from VM: {buildserverid}" +msgstr "VM-дан йыйыу-серверының ID-һы алынды: {buildserverid}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" +msgstr "'{apkfilename}' өсөн имзалар алынды -> '{sigdir}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "File disappeared while processing it: {path}" +msgstr "Файл эшкәртелгән ваҡытта юғалды: {path}" + +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py +#: ../fdroidserver/update.py +msgid "Finished" +msgstr "Тамамланды" + +#: ../fdroidserver/lint.py +msgid "Forbidden HTML tags" +msgstr "Тыйылған HTML тегтары" + +#: ../fdroidserver/build.py +msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." +msgstr "Һүндерелгән ҡушымталарҙы мәжбүри йыйыу һәм сканлау проблемаларына ҡарамаҫтан дауам итеү. Тик һынау режимында ғына рөхсәт ителә." + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Force halting build after {0} sec timeout!" +msgstr "{0} секундлыҡ тайм-ауттан һуң йыйыуҙы мәжбүри туҡтатыу!" + +#: ../fdroidserver/scanner.py +msgid "Force scan of disabled apps and builds." +msgstr "Һүндерелгән ҡушымталарҙы һәм йыйылмаларҙы мәжбүри сканлау." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" +msgstr "\"{name}\" ҡушымтаһы өсөн мета-мәғлүмәтһеҙ \"{path}\" графикаһы табылды!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found bad funding file \"{path}\" for \"{name}\":" +msgstr "\"{name}\" өсөн дөрөҫ булмаған \"{path}\" финанслау файлы табылды:" + +#: ../fdroidserver/common.py +msgid "Found invalid appids in arguments" +msgstr "Аргументтарҙа дөрөҫ булмаған appid-ҙар табылды" + +#: ../fdroidserver/common.py +msgid "Found invalid versionCodes for some apps" +msgstr "Ҡайһы бер ҡушымталар өсөн дөрөҫ булмаған versionCode-тар табылды" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Found multiple JAR Signature Block Files in {path}" +msgstr "{path} эсендә бер нисә JAR имза блок файлы табылды" + +#: ../fdroidserver/common.py +msgid "Found multiple Signer Certificates!" +msgstr "Бер нисә имзалаусы сертификаты табылды!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Found multiple metadata files for {appid}" +msgstr "{appid} өсөн бер нисә мета-мәғлүмәт файлы табылды" + +#: ../fdroidserver/index.py +msgid "Found multiple signing certificates for repository." +msgstr "Репозиторий өсөн бер нисә имзалау сертификаты табылды." + +#: ../fdroidserver/index.py +msgid "Found no signing certificates for repository." +msgstr "Репозиторий өсөн имзалау сертификаттары табылманы." + +#: ../fdroidserver/lint.py +#, python-format +msgid "Found non-file at %s" +msgstr "%s юлында файл булмаған объект табылды" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Found {apkfilename} at {url}" +msgstr "{apkfilename} {url} адресында табылды" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} problems in {filename}" +msgstr "{filename} эсендә {count} проблема табылды" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} warnings in {filename}" +msgstr "{filename} эсендә {count} иҫкәрмә табылды" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Generated skeleton metadata for {appid}" +msgstr "{appid} өсөн мета-мәғлүмәт ҡалыбы булдырылды" + +#: ../fdroidserver/common.py +#, python-format +msgid "Git checkout of '%s' failed" +msgstr "'%s' Git checkout-ы уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git clean failed" +msgstr "Git clean уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git fetch failed" +msgstr "Git fetch уңышһыҙ булды" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +#, python-format +msgid "Git remote set-head failed: \"%s\"" +msgstr "Git remote set-head уңышһыҙ булды: \"%s\"" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Git reset failed" +msgstr "Git reset уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule deinit failed" +msgstr "Git submodule deinit уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule sync failed" +msgstr "Git submodule sync уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "Git submodule update failed" +msgstr "Git submodule update уңышһыҙ булды" + +#: ../fdroidserver/common.py +msgid "HTTPS must be used with Subversion URLs!" +msgstr "Subversion URL-дары менән HTTPS ҡулланылырға тейеш!" + +#: ../fdroidserver/deploy.py +msgid "If a git mirror gets to big, allow the archive to be deleted" +msgstr "git көҙгөһө бигерәк ҙурайып китһә, архивты юйырға рөхсәт итеү" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "If this upload fails, try manually uploading to {url}" +msgstr "Был йөкмәү уңышһыҙ булһа, {url} адресына ҡулдан йөкмәп ҡарағыҙ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." +msgstr "'{metapath}' мета-мәғлүмәттәрендәге '{field}' иҫкергән булғанға иғтибарһыҙ ҡалдырыла." + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring FUNDING.yml entry longer than 2048: %s" +msgstr "2048-ҙән оҙонораҡ FUNDING.yml яҙмаһы иғтибарһыҙ ҡалдырыла: %s" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring bad element in manifest: %s" +msgstr "Манифестағы дөрөҫ булмаған элемент иғтибарһыҙ ҡалдырыла: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Иҫкергән {oldfile} иғтибарһыҙ ҡалдырыла, {newfile} ҡулланығыҙ!" + +#: ../fdroidserver/index.py +msgid "Ignoring package without metadata: " +msgstr "Мета-мәғлүмәтһеҙ пакет иғтибарһыҙ ҡалдырыла: " + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Ignoring stale cache data for {apkfilename}" +msgstr "{apkfilename} өсөн иҫкергән кеш мәғлүмәттәре иғтибарһыҙ ҡалдырыла" + +#: ../fdroidserver/update.py +msgid "Include APKs that are signed with disabled algorithms like MD5" +msgstr "MD5 кеүек һүндерелгән алгоритмдар менән тамғаланған APK-ларҙы индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the PGP signature .asc files in the mirror" +msgstr "Көҙгөгә PGP-имзалы .asc файлдарын индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the build logs in the mirror" +msgstr "Көҙгөгә йыйыу логтарын индереү" + +#: ../fdroidserver/mirror.py +msgid "Include the source tarballs in the mirror" +msgstr "Көҙгөгә сығанаҡ tarball-дарҙы индереү" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Including metadata from %s@%s" +msgstr "%s@%s версияһынан мета-мәғлүмәттәр индерелә" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Including metadata from {path}" +msgstr "{path} юлынан мета-мәғлүмәттәр индерелә" + +#: ../fdroidserver/common.py +msgid "Initialising submodules" +msgstr "Аҫмодулдәрҙе инициализациялау" + +#: ../fdroidserver/install.py +msgid "Install all signed applications available" +msgstr "Барлыҡ тамғаланған ҡушымталарҙы ҡуйыу" + +#: ../fdroidserver/__main__.py +msgid "Install built packages on devices" +msgstr "Йыйылған пакеттарҙы ҡоролмаларға ҡуйыу" + +#: ../fdroidserver/install.py +#, python-format +msgid "Installing %s..." +msgstr "%s ҡуйыла..." + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Installing '{apkfilename}' on {dev}..." +msgstr "'{apkfilename}' {dev} ҡоролмаһына ҡуйыла..." + +#: ../fdroidserver/__main__.py +msgid "Interact with the repo HTTP server" +msgstr "Репоның HTTP-серверы менән эш итеү" + +#: ../fdroidserver/update.py +msgid "Invalid APK" +msgstr "Дөрөҫ булмаған APK" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid AutoUpdateMode: {mode}" +msgstr "Дөрөҫ булмаған AutoUpdateMode: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid UpdateCheckMode: {mode}" +msgstr "Дөрөҫ булмаған UpdateCheckMode: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid VercodeOperation: {field}" +msgstr "Дөрөҫ булмаған VercodeOperation: {field}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Invalid VercodeOperation: {invalid_ops}" +msgstr "Дөрөҫ булмаған VercodeOperation: {invalid_ops}" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid application ID {appid}" +msgstr "Дөрөҫ булмаған ҡушымта идентификаторы {appid}" + +#: ../fdroidserver/lint.py +msgid "Invalid bulleted list" +msgstr "Дөрөҫ булмаған маркировкалы исемлек" + +#: ../fdroidserver/common.py +#, python-format +msgid "Invalid name for published file: %s" +msgstr "Баҫтырылған файл өсөн дөрөҫ булмаған исем: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid ndk: entry in build: \"{ndk}\"" +msgstr "Йыйылмала дөрөҫ булмаған ndk: яҙмаһы: \"{ndk}\"" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid redirect to non-HTTPS: {before} -> {after} " +msgstr "HTTPS булмаған адресҡа дөрөҫ булмаған йүнәлтеү: {before} -> {after} " + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid scrlib metadata: '{file}' does not exist" +msgstr "Дөрөҫ булмаған scrlib мета-мәғлүмәте: '{file}' юҡ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: could not parse '{file}'" +msgstr "Дөрөҫ булмаған srclib мета-мәғлүмәте: '{file}' танылманы" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" +msgstr "Дөрөҫ булмаған srclib мета-мәғлүмәте: '{file}' эсендә билдәһеҙ '{key}' асҡысы" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature failed to verify: {path}" +msgstr "JAR имзаһы тикшерелмәне: {path}" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature verified: {path}" +msgstr "JAR имзаһы тикшерелде: {path}" + +#: ../fdroidserver/scanner.py +msgid "Java JAR file" +msgstr "Java JAR файлы" + +#: ../fdroidserver/mirror.py ../fdroidserver/publish.py +#: ../fdroidserver/update.py +msgid "Java JDK not found! Install in standard location or set java_paths!" +msgstr "Java JDK табылманы! Стандарт урынға ҡуйығыҙ йәки java_paths-ты күрһәтегеҙ!" + +#: ../fdroidserver/scanner.py +msgid "Java compiled class" +msgstr "Компиляцияланған Java класы" + +#: ../fdroidserver/signindex.py +msgid "Java jarsigner not found! Install in standard location or set java_paths!" +msgstr "Java jarsigner табылманы! Стандарт урынға ҡуйығыҙ йәки java_paths-ты күрһәтегеҙ!" + +#: ../fdroidserver/lint.py +msgid "Javascript in HTML src attributes" +msgstr "HTML-дың src атрибуттарында Javascript" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Keeping failed build \"{apkfilename}\"" +msgstr "Уңышһыҙ йыйылған \"{apkfilename}\" һаҡлана" + +#: ../fdroidserver/init.py +msgid "Keystore for signing key:\t" +msgstr "Имзалау асҡысы өсөн асҡыстар һаҡлағысы:\t" + +#: ../fdroidserver/lint.py +msgid "Known debug key is used in AllowedAPKSigningKeys: " +msgstr "AllowedAPKSigningKeys-та билдәле төҙәтеү асҡысы ҡулланыла: " + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" +msgstr "Һуңғы ҡулланылған '{commit}' коммиты тегҡа оҡшаған, ләкин UpdateCheckMode '{ucm}' итеп ҡуйылған" + +#: ../fdroidserver/lint.py +msgid "Liberapay donation methods belong in the Liberapay: field" +msgstr "Liberapay иғәнә ысулдары Liberapay: яланында булырға тейеш" + +#: ../fdroidserver/rewritemeta.py +msgid "List files that would be reformatted (dry run)" +msgstr "Яңынан форматланасаҡ файлдарҙың исемлеге (ҡоро эшләтеп ҡарау)" + +#: ../fdroidserver/lint.py +msgid "Locale included in f-droid.org URL" +msgstr "f-droid.org URL-ында локаль бар" + +#: ../fdroidserver/build.py +msgid "Make the build stop on exceptions" +msgstr "Хаталар булғанда йыйыуҙы туҡтатыу" + +#: ../fdroidserver/index.py +msgid "Malformed repository mirrors." +msgstr "Репозиторий көҙгөләре дөрөҫ форматланмаған." + +#: ../fdroidserver/deploy.py +msgid "Malformed serverwebroot line:" +msgstr "serverwebroot юлы дөрөҫ форматланмаған:" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Max recursion depth in ZIP file reached: %s" +msgstr "ZIP файлында максималь рекурсия тәрәнлегенә етелде: %s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "{url} өсөн көҙгө көйләүҙәрендә \"isPrimary\" асҡысы бар!" + +#: ../fdroidserver/mirror.py +msgid "Mirror the full repo and archive, all file types." +msgstr "Репо менән архивтың тулы көҙгөһөн яһау, бөтә файл төрҙәре." + +#: ../fdroidserver/gpgsign.py +msgid "Missing output directory" +msgstr "Сығарыу каталогы юҡ" + +#: ../fdroidserver/metadata.py +msgid "Moving Anti-Features declarations to localized files:" +msgstr "Anti-Features декларацияларын локалләштерелгән файлдарға күсереү:" + +#: ../fdroidserver/index.py +msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" +msgstr "config.yml-да \"repo_pubkey\" ҙә, \"keystorepass\" та күрһәтелмәгән" + +#: ../fdroidserver/verify.py +#, python-format +msgid "No APK for package: %s" +msgstr "%s пакеты өсөн APK юҡ" + +#: ../fdroidserver/common.py +msgid "No Android SDK found!" +msgstr "Android SDK табылманы!" + +#: ../fdroidserver/install.py +msgid "No attached devices found" +msgstr "Тоташтырылған ҡоролмалар табылманы" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "`adb install` өсөн ҡоролмалар табылманы! Зинһар, берәйһен тоташтырығыҙ." + +#: ../fdroidserver/index.py +msgid "No fingerprint in URL." +msgstr "URL-да бармаҡ эҙе юҡ." + +#: ../fdroidserver/common.py +msgid "No git submodules available" +msgstr "git аҫмодулдәре юҡ" + +#: ../fdroidserver/import_subcommand.py +msgid "No gradle project could be found. Specify --subdir?" +msgstr "gradle проекты табылманы. --subdir күрһәтеп ҡарайһығыҙмы?" + +#: ../fdroidserver/import_subcommand.py +msgid "No information found." +msgstr "Мәғлүмәт табылманы." + +#: ../fdroidserver/checkupdates.py +msgid "No matching tags found" +msgstr "Ярашлы тегтар табылманы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "No minimum SDK version found in {0}, using default (3)." +msgstr "{0} эсендә SDK-ның минималь версияһы табылманы, стандарт (3) ҡулланыла." + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is Free Software" +msgstr "Ҡушымтаның Ирекле Программа булыуын күрһәтеү кәрәкмәй" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is for Android" +msgstr "Ҡушымтаның Android өсөн булыуын күрһәтеү кәрәкмәй" + +#: ../fdroidserver/deploy.py +msgid "No option set! Edit your config.yml to set at least one of these:" +msgstr "Бер параметр ҙа күрһәтелмәгән! config.yml файлына үҙгәреш индереп, ошоларҙың кәмендә береһен күрһәтегеҙ:" + +#: ../fdroidserver/common.py +msgid "No packages specified" +msgstr "Пакеттар күрһәтелмәгән" + +#: ../fdroidserver/install.py +#, python-format +msgid "No signed APK available for %s" +msgstr "%s өсөн тамғаланған APK юҡ" + +#: ../fdroidserver/install.py +msgid "No signed output directory - nothing to do" +msgstr "Тамғаланған сығарыу каталогы юҡ — эшләр нәмә юҡ" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No signing certificates found in {path}" +msgstr "{path} эсендә имзалау сертификаттары табылманы" + +#: ../fdroidserver/common.py +#, python-format +msgid "No such package: %s" +msgstr "Бындай пакет юҡ: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No such versionCode {versionCode} for app {appid}" +msgstr "{appid} ҡушымтаһы өсөн бындай {versionCode} versionCode-ы юҡ" + +#: ../fdroidserver/checkupdates.py +msgid "No tags found" +msgstr "Тегтар табылманы" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "No unsigned directory - nothing to do" +msgstr "Тамғаланмаған каталог юҡ — эшләр нәмә юҡ" + +#: ../fdroidserver/__main__.py +msgid "No version information could be found." +msgstr "Версия тураһында мәғлүмәт табылманы." + +#: ../fdroidserver/common.py +msgid "Not a valid size definition: \"{}\"" +msgstr "Дөрөҫ булмаған үлсәм билдәләмәһе: \"{}\"" + +#: ../fdroidserver/signindex.py +msgid "Nothing to do" +msgstr "Эшләр нәмә юҡ" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Nothing to do for {appid}." +msgstr "{appid} өсөн эшләр нәмә юҡ." + +#: ../fdroidserver/init.py +msgid "Now set these in config.yml:" +msgstr "Хәҙер ошоларҙы config.yml-да күрһәтегеҙ:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "OBB файлының versionCode-ы ({integer}) теләһә ҡайһы APK-ныҡынан яңыраҡ:" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "OBB файлының исеме \"main.\" йәки \"patch.\" менән башланырға тейеш:" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "OBB-ның пакет исеме яраҡлы APK-ға тап килмәй:" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "Офлайн машина, `fdroid deploy` эшләтелгәнгә тиклем git көҙгөһөн булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'packageNames' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'projectUrl' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "'github_releases' көйләүҙәренең береһендә 'token' ҡиммәте юҡ. үткәреп ебәрелә ..." + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Only PNG and JPEG are supported for graphics, found: {path}" +msgstr "Графика өсөн тик PNG һәм JPEG ғына ярай, табылды: {path}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Тик бер генә \"env\" асҡысын ҡабул итә" + +#: ../fdroidserver/checkupdates.py +msgid "Only process apps with auto-updates" +msgstr "Тик автоматик яңыртылыусы ҡушымталарҙы ғына эшкәртеү" + +#: ../fdroidserver/lint.py +msgid "OpenCollective donation methods belong in the OpenCollective: field" +msgstr "OpenCollective иғәнә ысулдары OpenCollective: яланында булырға тейеш" + +#: ../fdroidserver/verify.py +msgid "Output JSON report to file named after APK." +msgstr "JSON отчетын APK исеме менән аталған файлға сығарыу." + +#: ../fdroidserver/scanner.py +msgid "Output JSON to stdout." +msgstr "JSON-ды стандарт сығарыу ағымына (stdout) сығарыу." + +#: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py +#: ../fdroidserver/publish.py ../fdroidserver/signindex.py +#: ../fdroidserver/update.py +msgid "Outputting JSON" +msgstr "JSON сығарыла" + +#: ../fdroidserver/import_subcommand.py +msgid "Overall license of the project." +msgstr "Проекттың дөйөм лицензияһы." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" +msgstr "{apkfilename} эсендәге буш versionName мета-мәғлүмәттән алынған {version} менән алмаштырыла" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "Package \"{appid}\" already exists" +msgstr "\"{appid}\" пакеты инде бар" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Parsing manifest at '{path}'" +msgstr "'{path}' юлындағы манифест таныла" + +#: ../fdroidserver/common.py +msgid "Password required with username" +msgstr "Ҡулланыусы исеме менән бергә пароль кәрәк" + +#: ../fdroidserver/import_subcommand.py +msgid "Path to main Android project subdirectory, if not in root." +msgstr "Төп Android проектының аҫкаталогына юл, әгәр ул тамыр каталогында булмаһа." + +#: ../fdroidserver/init.py +msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" +msgstr "Android SDK-ға юл (ҡайһы саҡ ANDROID_HOME-да күрһәтелә)" + +#: ../fdroidserver/btlog.py +msgid "Path to the git repo to use as the log" +msgstr "Лог итеп ҡулланыу өсөн git репозиторийына юл" + +#: ../fdroidserver/init.py +msgid "Path to the keystore for the repo signing key" +msgstr "Репо имзалау асҡысы өсөн асҡыстар һаҡлағысына юл" + +#: ../fdroidserver/nightly.py +msgid "Print the secret variable to the terminal for easy copy/paste" +msgstr "Йәшерен үҙгәреүсәнде күсереп-ҡуйыу еңел булһын өсөн терминалға сығарыу" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Һеҙҙең локаль ({country_code}) нигеҙендә хосусилыҡ режимы ҡабыҙылды." + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Problem with ZIP file: %s, error %s" +msgstr "ZIP файлы менән проблема: %s, хата %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Problem with xml at '{path}'" +msgstr "'{path}' юлындағы xml менән проблема" + +#: ../fdroidserver/checkupdates.py +msgid "Process auto-updates" +msgstr "Автоматик яңыртыуҙарҙы эшкәртеү" + +#: ../fdroidserver/publish.py ../fdroidserver/update.py +#, python-brace-format +msgid "Processing {apkfilename}" +msgstr "{apkfilename} эшкәртелә" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py +#, python-brace-format +msgid "Processing {appid}" +msgstr "{appid} эшкәртелә" + +#: ../fdroidserver/update.py +msgid "Produce human-readable XML/JSON for index files" +msgstr "Индекс файлдары өсөн кеше уҡый алырлыҡ XML/JSON булдырыу" + +#: ../fdroidserver/import_subcommand.py +msgid "Project URL to import from." +msgstr "Импортлау өсөн проекттың URL-ы." + +#: ../fdroidserver/lint.py +msgid "Punctuation should be avoided" +msgstr "Тыныш билдәләренән ҡасырға кәрәк" + +#: ../fdroidserver/btlog.py +msgid "Push the log to this git remote repository" +msgstr "Логты ошо алыҫтағы git репозиторийына ебәреү" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing binary transparency log to {url}" +msgstr "Бинар асыҡлыҡ логы {url} адресына ебәрелә" + +#: ../fdroidserver/deploy.py +msgid "Pushing to remote server failed!" +msgstr "Алыҫтағы серверға ебәреү уңышһыҙ булды!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing to {url}" +msgstr "{url} адресына ебәрелә" + +#: ../fdroidserver/__main__.py +msgid "Quickly start a new repository" +msgstr "Яңы репозиторийҙы тиҙ генә башлау" + +#: ../fdroidserver/__main__.py +msgid "Read all the metadata files and exit" +msgstr "Барлыҡ мета-мәғлүмәт файлдарын уҡыу һәм сығыу" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading '{config_file}'" +msgstr "'{config_file}' уҡыла" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" +msgstr "packageName/versionCode/versionName уҡылманы, APK дөрөҫ түгел: '{apkfilename}'" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" +msgstr "packageName/versionCode/versionName уҡылманы, APK дөрөҫ түгел: '{apkfilename}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Reading {apkfilename} from cache" +msgstr "{apkfilename} кештан уҡыла" + +#: ../fdroidserver/build.py +msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "Сканлаусы ҡағиҙәләрен һәм имзаларын селтәрҙән яңыртыу һәм кешлау" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "'{path}' тамғалауҙан баш тартам, файл {dir1} һәм {dir2} каталогтарында ла бар." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Уңышлы тикшерелһә, сығанаҡ tarball-ды һәм теләһә ниндәй APK-ларҙы юйыу." + +#: ../fdroidserver/common.py +msgid "Removing specified files" +msgstr "Күрһәтелгән файлдар юйыла" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Removing {path}\"" +msgstr "\"{path} юйыла" + +#: ../fdroidserver/update.py +msgid "Rename APK files that do not match package.name_123.apk" +msgstr "package.name_123.apk ҡалыбына тап килмәгән APK файлдарының исемен үҙгәртеү" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Resigning {apkfilename} with provided debug.keystore" +msgstr "{apkfilename} бирелгән debug.keystore менән яңынан тамғалана" + +#: ../fdroidserver/update.py +msgid "Resize all the icons exceeding the max pixel size and exit" +msgstr "Максималь пиксель үлсәменән артҡан бөтә иконкаларҙың үлсәмен үҙгәртеү һәм сығыу" + +#: ../fdroidserver/common.py +msgid "Restrict output to warnings and errors" +msgstr "Сығарылышты иҫкәрмәләр һәм хаталар менән сикләү" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Уңышһыҙ йөкмәү ҡабатлана: %s" + +#: ../fdroidserver/__main__.py +msgid "Rewrite all the metadata files" +msgstr "Барлыҡ мета-мәғлүмәт файлдарын үҙгәртеп яҙыу" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Rewriting '{appid}'" +msgstr "'{appid}' үҙгәртеп яҙыла" + +#: ../fdroidserver/checkupdates.py +msgid "Run on git repo that has uncommitted changes" +msgstr "Һаҡланмаған үҙгәрештәре булған git репозиторийында эшләтеү" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "{cibase} буйлап -debug.apk. табыу өсөн эшләтеү. һәм repo_basedir {repo_basedir} үткәреп ебәреү" + +#: ../fdroidserver/lint.py +msgid "Run rewritemeta to fix formatting" +msgstr "Форматлауҙы төҙәтеү өсөн rewritemeta-ны эшләтегеҙ" + +#: ../fdroidserver/deploy.py +msgid "Running first pass with MD5 checking disabled" +msgstr "MD5 тикшереүе һүндерелгән килеш беренсе үтеү башҡарыла" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Running wget in {path}" +msgstr "wget {path} каталогында эшләтелә" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "SHA-256 of {url} does not match entry!" +msgstr "{url} адресының SHA-256 суммаһы яҙмаға тап килмәй!" + +#: ../fdroidserver/build.py +msgid "Scan the resulting APK(s) for known non-free classes." +msgstr "Алынған APK(-лар)ҙы билдәле ирекле булмаған кластарға сканлау." + +#: ../fdroidserver/__main__.py +msgid "Scan the source code of a package" +msgstr "Пакеттың сығанаҡ кодын сканлау" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {apk}" +msgstr "Сканлаусы {apk} эсендә {count} проблема тапты" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:" +msgstr "Сканлаусы {appid} эсендә {count} проблема тапты:" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:{versionCode}:" +msgstr "Сканлаусы {appid}:{versionCode} эсендә {count} проблема тапты:" + +#: ../fdroidserver/build.py +msgid "Scanner found {} problem" +msgid_plural "Scanner found {} problems" +msgstr[0] "Сканлаусы {} проблема тапты" +msgstr[1] "Сканлаусы {} проблема тапты" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "APK-ны өҫтәмә имзалау блоктарына сканлау." + +#: ../fdroidserver/scanner.py +msgid "Scanning APK with dexdump for known non-free classes." +msgstr "APK-ны dexdump менән билдәле ирекле булмаған кластарға сканлау." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Set NDK {release} ({version}) up" +msgstr "NDK {release} ({version}) көйләнде" + +#: ../fdroidserver/common.py +msgid "Set clock to that time using:" +msgstr "Сәғәтте ошо ваҡытҡа ҡуйыу өсөн ҡулланығыҙ:" + +#: ../fdroidserver/nightly.py +msgid "Set maximum releases in repo before older ones are archived" +msgstr "Иҫкерәктәре архивланыр алдынан репозиторийҙағы максималь релиздар һанын билдәләү" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Set open file limit to {integer}" +msgstr "Асыҡ файлдар сикләүен {integer} итеп ҡуйыу" + +#: ../fdroidserver/__main__.py +msgid "Set up an app build for a nightly build repo" +msgstr "Төнгө йыйыу репозиторийы өсөн ҡушымта йыйыуҙы көйләү" + +#: ../fdroidserver/build.py +msgid "Setting open file limit failed: " +msgstr "Асыҡ файлдар сикләүен ҡуйып булманы: " + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Setting {0} sec timeout for this build" +msgstr "Был йыйыу өсөн {0} секундлыҡ тайм-аут ҡуйыла" + +#: ../fdroidserver/__main__.py +msgid "Sign and place packages in the repo" +msgstr "Пакеттарҙы тамғалау һәм репозиторийға урынлаштырыу" + +#: ../fdroidserver/__main__.py +msgid "Sign indexes created using update --nosign" +msgstr "update --nosign ярҙамында булдырылған индекстарҙы тамғалау" + +#: ../fdroidserver/build.py +msgid "Skip scanning the source code for binaries and other problems" +msgstr "Сығанаҡ кодты бинарҙарға һәм башҡа проблемаларға сканлауҙы үткәреп ебәреү" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping '{apkfilename}' with invalid signature!" +msgstr "Дөрөҫ булмаған имзалы '{apkfilename}' үткәреп ебәрелә!" + +#: ../fdroidserver/deploy.py ../fdroidserver/index.py +#, python-format +msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" +msgstr "GitLab Pages көҙгөһө үткәреп ебәрелә, сөнки репозиторий бигерәк ҙур (>%.2fGB)!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping index generation for {appid}" +msgstr "{appid} өсөн индекс булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping {apkfilename} with invalid signature!" +msgstr "Дөрөҫ булмаған имзалы {apkfilename} үткәреп ебәрелә!" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Skipping {appid}: disabled" +msgstr "{appid} үткәреп ебәрелә: һүндерелгән" + +#: ../fdroidserver/deploy.py +msgid "Specify a local folder to sync the repo to" +msgstr "Репоны синхронлаштырыу өсөн локаль каталогты күрһәтегеҙ" + +#: ../fdroidserver/deploy.py +msgid "Specify an identity file to provide to SSH for rsyncing" +msgstr "rsync өсөн SSH-ға биреләсәк идентификация файлын күрһәтегеҙ" + +#: ../fdroidserver/nightly.py +msgid "Specify which debug keystore file to use." +msgstr "Ҡайһы төҙәтеү асҡыстар һаҡлағысы файлын ҡулланырға икәнен күрһәтегеҙ." + +#: ../fdroidserver/common.py +msgid "Spew out even more information than normal" +msgstr "Ғәҙәттәгенән дә күберәк мәғлүмәт сығарыу" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Stripping mystery signature from {apkfilename}" +msgstr "Серле имза {apkfilename} файлынан алына" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Summary '%s' is just the app's name" +msgstr "'%s' ҡыҫҡаса аңлатмаһы — ул ҡушымтаның исеме генә" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Summary of length {length} is over the {limit} char limit" +msgstr "{length} оҙонлоғондағы ҡыҫҡаса аңлатма {limit} символ сикләүенән артып китә" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "System clock is older than date in {path}!" +msgstr "Система сәғәте {path} эсендәге датанан иҫкерәк!" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" +msgstr "Тегтарҙы яңыртыу режимы әлеге ваҡытта тик git, hg, bzr һәм git-svn репозиторийҙары өсөн генә эшләй" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode used in git-svn, but the repo was not set up with tags" +msgstr "Тегтарҙы яңыртыу режимы git-svn-да ҡулланылған, ләкин репо тегтар менән көйләнмәгән" + +#: ../fdroidserver/build.py +msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "Һынау режимы — сығарылышты тик tmp каталогына ғына урынлаштырыу һәм сығарылыш булһа ла, һәр ваҡыт йыйыу." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "\"qrcode\" Python пакеты ҡуйылмаған (мәҫ. apt-get install python3-qrcode)!" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "The OBB version code must come after \"{name}.\":" +msgstr "OBB версия коды \"{name}.\" һуңынан килергә тейеш:" + +#: ../fdroidserver/btlog.py +msgid "The base URL for the repo to log (default: https://f-droid.org)" +msgstr "Лог яһаласаҡ репоның төп URL-ы (стандарт: https://f-droid.org)" + +#: ../fdroidserver/mirror.py +msgid "The directory to write the mirror to" +msgstr "Көҙгөнө яҙыу өсөн каталог" + +#: ../fdroidserver/nightly.py +msgid "The file to be included in the repo (path or glob)" +msgstr "Репоға индереләсәк файл (юл йәки ҡалып)" + +#: ../fdroidserver/index.py +msgid "The repository's fingerprint does not match." +msgstr "Репозиторийҙың бармаҡ эҙе тап килмәй." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "The root dir for local_copy_dir \"{path}\" does not exist!" +msgstr "local_copy_dir \"{path}\" өсөн тамыр каталогы юҡ!" + +#: ../fdroidserver/publish.py +msgid "There is a keyalias collision - publishing halted" +msgstr "keyalias ҡапма-ҡаршылығы бар — баҫтырыу туҡтатылды" + +#: ../fdroidserver/common.py +msgid "These are the apps that have been archived from the main repo." +msgstr "Былар — төп репозиторийҙан архиваланған ҡушымталар." + +#: ../fdroidserver/mirror.py +msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." +msgstr "Был команда f-droid.org-тың көҙгөһөн яһау өсөн бер ҡасан да ҡулланылырға тейеш түгел! Тулы күсермә өсөн 600GB-тан ашыу урын кәрәк." + +#: ../fdroidserver/common.py +msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." +msgstr "Был — F-Droid менән ҡулланыу өсөн ҡушымталар репозиторийы. Был репозиторийҙағы ҡушымталар йә оригиналь эшләүселәр тарафынан йыйылған рәсми бинарҙар, йә f-droid.org администраторы тарафынан https://gitlab.com/fdroid адресындағы ҡоралдар ярҙамында сығанаҡ кодтан йыйылған бинарҙар." + +#: ../fdroidserver/import_subcommand.py +#, python-format +msgid "This repo already has local metadata: %s" +msgstr "Был репоның инде локаль мета-мәғлүмәттәре бар: %s" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"To complete the setup, add your APKs to \"%s\"\n" +"then run \"fdroid update -c; fdroid update\". You might also want to edit\n" +"\"config.yml\" to set the URL, repo name, and more. You should also set up\n" +"a signing key (a temporary one might have been automatically generated).\n" +"\n" +"For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"and https://f-droid.org/docs/Signing_Process" +msgstr "" +"Көйләүҙе тамамлау өсөн, APK-ларығыҙҙы \"%s\" каталогына өҫтәгеҙ,\n" +"шунан \"fdroid update -c; fdroid update\" командаһын эшләтегеҙ. Шулай уҡ URL-ды, репо исемен\n" +"һәм башҡаларҙы көйләү өсөн \"config.yml\" файлына үҙгәреш индерергә теләрһегеҙ. \n" +"Шулай уҡ имзалау асҡысын көйләргә тейешһегеҙ (ваҡытлыса асҡыс автоматик рәүештә булдырылған булырға мөмкин).\n" +"\n" +"Күберәк мәғлүмәт өсөн: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"һәм https://f-droid.org/docs/Signing_Process" + +#: ../fdroidserver/deploy.py +msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" +msgstr "awsbucket-ты ҡулланыу өсөн config.yml-да awssecretkey һәм awsaccesskeyid та күрһәтелергә тейеш!" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "rclone-ды ҡулланыу өсөн config.yml-да rclone_config һәм awsbucket күрһәтелергә тейеш!" + +#: ../fdroidserver/lint.py +msgid "URL must start with https:// or http://" +msgstr "URL https:// йәки http:// менән башланырға тейеш" + +#: ../fdroidserver/lint.py +msgid "URL shorteners should not be used" +msgstr "URL ҡыҫҡартҡыстары ҡулланылырға тейеш түгел" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "URL {url} in Description: {error}" +msgstr "Тасуирламалағы {url} URL-ы: {error}" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" +msgstr "Көтөлмәгән \"{}\" лицензия тегы! Тик https://spdx.org/license-list адресынан FSF йәки OSI тарафынан раҫланған тегтарҙы ҡулланығыҙ" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" +msgstr "Көтөлмәгән \"{}\" лицензия тегы! Тик конфигурация файлында көйләнгән лицензия тегтарын ҡулланығыҙ" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Unknown entry {key} in {configname}" +msgstr "{configname} эсендә билдәһеҙ {key} яҙмаһы" + +#: ../fdroidserver/__main__.py +msgid "Unknown exception found!" +msgstr "Билдәһеҙ хата табылды!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Unknown file '{filename}' in build '{versionName}'" +msgstr "'{versionName}' йыйылмаһында билдәһеҙ '{filename}' файлы" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Unknown metadata format: %s" +msgstr "Билдәһеҙ мета-мәғлүмәт форматы: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unknown metadata format: {path} (use: *.yml)" +msgstr "Билдәһеҙ мета-мәғлүмәт форматы: {path} (ҡулланығыҙ: *.yml)" + +#: ../fdroidserver/common.py +msgid "Unknown version of aapt, might cause problems: " +msgstr "aapt-тың билдәһеҙ версияһы, проблемалар тыуҙырыуы мөмкин: " + +#: ../fdroidserver/lint.py +msgid "Unnecessary leading space" +msgstr "Кәрәкмәгән алғы буш урын" + +#: ../fdroidserver/lint.py +msgid "Unnecessary trailing space" +msgstr "Кәрәкмәгән артҡы буш урын" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised app field '{fieldname}' in '{path}'" +msgstr "'{path}' эсендә танылмаған '{fieldname}' ҡушымта яланы" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised build flag '{build_flag}' in '{path}'" +msgstr "'{path}' эсендә танылмаған '{build_flag}' йыйыу флагы" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported file type \"{extension}\" for repo graphic" +msgstr "Репо графикаһы өсөн яраҡһыҙ \"{extension}\" файл төрө" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported graphics file found: {path}" +msgstr "Яраҡһыҙ графика файлы табылды: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused extlib at %s" +msgstr "%s юлында ҡулланылмаған extlib" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused file at %s" +msgstr "%s юлында ҡулланылмаған файл" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scandelete path: %s" +msgstr "Ҡулланылмаған scandelete юлы: %s" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scanignore path: %s" +msgstr "Ҡулланылмаған scanignore юлы: %s" + +#: ../fdroidserver/__main__.py +msgid "Update repo information for new packages" +msgstr "Яңы пакеттар өсөн репо мәғлүмәтен яңыртыу" + +#: ../fdroidserver/__main__.py +msgid "Update the binary transparency log for a URL" +msgstr "URL өсөн бинар асыҡлыҡ логын яңыртыу" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "UpdateCheckData has invalid URL: {url}" +msgstr "UpdateCheckData-ла дөрөҫ булмаған URL: {url}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" +msgstr "UpdateCheckData версия кодына бөтөн һан булараҡ тап килергә тейеш (\\d йәки [0-9]): {codeex}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must use HTTPS URL: {url}" +msgstr "UpdateCheckData HTTPS URL-ын ҡулланырға тейеш: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData not a valid URL: {url}" +msgstr "UpdateCheckData — дөрөҫ URL түгел: {url}" + +#: ../fdroidserver/lint.py +msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." +msgstr "UpdateCheckMode ҡуйылған, ләкин checkupdates әле эшләтелмәгән кеүек." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/lint.py +msgid "UpdateCheckName is set to the known application ID, it can be removed" +msgstr "UpdateCheckName билдәле ҡушымта идентификаторына ҡуйылған, уны алып ташларға мөмкин" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to androidobservatory.org" +msgstr "{apkfilename} androidobservatory.org-ҡа йөкләнә" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to virustotal" +msgstr "{apkfilename} virustotal-ға йөкләнә" + +#: ../fdroidserver/lint.py +msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" +msgstr "Стандарт ботаҡтағы файлға күрһәтеү өсөн /master йәки /main урынына /HEAD ҡулланығыҙ" + +#: ../fdroidserver/update.py +msgid "Use `fdroid update -c` to create it." +msgstr "Уны булдырыу өсөн `fdroid update -c` ҡулланығыҙ." + +#: ../fdroidserver/build.py +msgid "Use build server" +msgstr "Йыйыу серверын ҡулланыу" + +#: ../fdroidserver/update.py +msgid "Use date from APK instead of current time for newly added APKs" +msgstr "Яңы өҫтәлгән APK-лар өсөн ағымдағы ваҡыт урынына APK-нан датаны ҡулланыу" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for configuring s3cmd." +msgstr "s3cmd-ты көйләү өсөн \"{path}\" ҡулланыла." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "Алыҫтағы һаҡлағыс менән синхронлаштырыу өсөн \"{path}\" ҡулланыла." + +#: ../fdroidserver/common.py +msgid "Using APK Signature v2" +msgstr "APK имзаһының v2 версияһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v3" +msgstr "APK имзаһының v3 версияһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using JAR Signature" +msgstr "JAR имзаһы ҡулланыла" + +#: ../fdroidserver/common.py +msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" +msgstr "Java-ның jarsigner-ы ҡулланыла, APK-ларҙы тикшереү өсөн тәҡдим ителмәй! apksigner ҡулланығыҙ" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Using blank dictionary instead of contents of {path}!" +msgstr "{path} эстәлеге урынына буш һүҙлек ҡулланыла!" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Using existing keystore \"{path}\"" +msgstr "Инде булған \"{path}\" асҡыстар һаҡлағысы ҡулланыла" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "Синхронлаштырыу өсөн rclone ҡулланыла: {url}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using s3cmd to sync with: {url}" +msgstr "Синхронлаштырыу өсөн s3cmd ҡулланыла: {url}" + +#: ../fdroidserver/__main__.py +msgid "Valid commands are:" +msgstr "Яраҡлы командалар:" + +#: ../fdroidserver/verify.py +msgid "Verify against locally cached copy rather than redownloading." +msgstr "Яңынан йөкмәү урынына локаль кешланған күсермәгә ҡаршы тикшереү." + +#: ../fdroidserver/__main__.py +msgid "Verify the integrity of downloaded packages" +msgstr "Йөкләнгән пакеттарҙың бөтөнлөгөн тикшереү" + +#: ../fdroidserver/index.py +msgid "Verifying index signature:" +msgstr "Индекс имзаһы тикшерелә:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "{path} пакеты apksigner менән тикшерелә." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "VirusTotal API асҡысы 32MB-тан ҙурыраҡ файлдарҙы йөкләй алмай, {path} файлын йөкләү өсөн {url} ҡулланығыҙ." + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Warn about possible metadata errors" +msgstr "Мөмкин булған мета-мәғлүмәт хаталары тураһында иҫкәртеү" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly бинар файлы" + +#: ../fdroidserver/update.py +msgid "When configured for signed indexes, create only unsigned indexes at this stage" +msgstr "Тамғаланған индекстар өсөн көйләнгәндә, был этапта тик тамғаланмаған индекстарҙы ғына булдырыу" + +#: ../fdroidserver/lint.py +msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." +msgstr "Бөтә репозиторийҙы линтлағанда yamllint стандарт буйынса һүндерелгән. Был опция yamllint-ты мәжбүри рәүештә эшләтә." + +#: ../fdroidserver/publish.py +msgid "When signing or verifying fails, exit with an error code." +msgstr "Тамғалау йәки тикшереү уңышһыҙ булһа, хата коды менән сығыу." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "F-Droid.apk-ны adb аша йөкләп ҡуйырға теләйһегеҙме? (ЭЙЕ/юҡ)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Ҡушымта(лар)ҙы f-droid.org-тан йөкләргә теләйһегеҙме? (ЭЙЕ/юҡ)" + +#: ../fdroidserver/init.py +msgid "X.509 'Distinguished Name' used when generating keys" +msgstr "Асҡыстарҙы булдырғанда ҡулланылған X.509 'Айырым исем' (Distinguished Name)" + +#: ../fdroidserver/common.py +msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" +msgstr "SDK-ға юлды күрһәтеү өсөн ANDROID_HOME ҡуллана алаһығыҙ, йәғни:" + +#: ../fdroidserver/scanner.py +msgid "ZIP file archive" +msgstr "ZIP файл архивы" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb хәбәр итә: {serial} — \"{status}\"!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "adding IdentityFile to {path}" +msgstr "IdentityFile {path} юлына өҫтәлә" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "adding to {name}: {path}" +msgstr "{name}-ға өҫтәлә: {path}" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "ике мәғәнәле опция: %(option)s %(matches)s-ҡа тап килеүе мөмкин" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "build-tools;{version} эсендәге apksigner дөрөҫ булмаған v3 имзалы APK-ларҙы үткәрә, иғтибарһыҙ ҡалдырыла." + +#: ../fdroidserver/common.py +msgid "apksigner not found! Cannot sign or verify modern APKs" +msgstr "apksigner табылманы! Заманса APK-ларҙы тамғалап йәки тикшереп булмай" + +#: ../fdroidserver/common.py +msgid "apksigner not found, it's required for signing!" +msgstr "apksigner табылманы, ул тамғалау өсөн кәрәк!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py +#: ../fdroidserver/rewritemeta.py +msgid "application ID of file to operate on" +msgstr "эшкәртеләсәк файлдың ҡушымта идентификаторы" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/publish.py ../fdroidserver/scanner.py +#: ../fdroidserver/verify.py +msgid "application ID with optional versionCode in the form APPID[:VERCODE]" +msgstr "ҡушымта идентификаторы, APPID[:VERCODE] рәүешендә versionCode өҫтәмә булыуы мөмкин" + +#: ../fdroidserver/common.py +msgid "archive_url needs to end with /archive" +msgstr "archive_url /archive менән тамамланырға тейеш" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument \"-\" with mode %r" +msgstr "%r режимлы \"-\" аргументы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument %(argument_name)s: %(message)s" +msgstr "%(argument_name)s аргументы: %(message)s" + +#: ../fdroidserver/nightly.py +msgid "attempting bare SSH connection to test deploy key:" +msgstr "урынлаштырыу асҡысын һынау өсөн ябай SSH тоташыуы яһала:" + +#: ../fdroidserver/common.py +msgid "can not parse scrlib spec (not a string): '{}'" +msgstr "scrlib спецификацияһын танып булмай (юл түгел): '{}'" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "can't open '%(filename)s': %(error)s" +msgstr "'%(filename)s' асылманы: %(error)s" + +#: ../fdroidserver/scanner.py +msgid "can't open non-https url: '{};" +msgstr "https булмаған url-ды асып булмай: '{};" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "cannot find required srclibs: \"{path}\"" +msgstr "кәрәкле srclib-тар табылманы: \"{path}\"" + +#: /usr/lib/python3.11/argparse.py +msgid "cannot have multiple subparser arguments" +msgstr "бер нисә аҫпарсер аргументы була алмай" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "ғәмәлдәрҙе берләштереп булмай — ике төркөм %r тип аталған" + +#: ../fdroidserver/nightly.py +msgid "cannot publish update, did you set the deploy key?" +msgstr "яңыртыуҙы баҫтырып булмай, урынлаштырыу асҡысын күрһәттегеҙме?" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "cloning {url}" +msgstr "{url} клонлана" + +#: ../fdroidserver/__main__.py +msgid "commands from plugin modules:" +msgstr "плагин модулдәренән командалар:" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting option string: %s" +msgid_plural "conflicting option strings: %s" +msgstr[0] "ҡапма-ҡаршылыҡлы опция юлы: %s" +msgstr[1] "ҡапма-ҡаршылыҡлы опция юлдары: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser alias: %s" +msgstr "ҡапма-ҡаршылыҡлы аҫпарсер псевдонимы: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser: %s" +msgstr "ҡапма-ҡаршылыҡлы аҫпарсер: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "could not parse '{path}'" +msgstr "'{path}' танылманы" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no name specified): '{}'" +msgstr "srclib спецификацияһын танып булманы (исем күрһәтелмәгән): '{}'" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no ref specified): '{}'" +msgstr "srclib спецификацияһын танып булманы (ref күрһәтелмәгән): '{}'" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "created {path}" +msgstr "{path} булдырылды" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "current version is newer: old vercode={old}, new vercode={new}" +msgstr "ағымдағы версия яңыраҡ: иҫке vercode={old}, яңы vercode={new}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "deleting: repo/{apkfilename}" +msgstr "юйыла: repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "йоҙаҡһыҙ бәйлелек файлы" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "deployed process log {path} to {dest}" +msgstr "эшкәртеү логы {path} {dest} адресына урынлаштырылды" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "dest= is required for options like %r" +msgstr "%r кеүек опциялар өсөн dest= кәрәк" + +#: ../fdroidserver/scanner.py +msgid "downloading '{}'" +msgstr "'{}' йөкләнә" + +#: ../fdroidserver/scanner.py +msgid "downloading scanner signatures from '{}' failed" +msgstr "сканлаусы имзаларын '{}' адресынан йөкләү уңышһыҙ булды" + +#: ../fdroidserver/scanner.py +msgid "executable binary, possibly code" +msgstr "башҡарылыусы бинар, код булыуы мөмкин" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "expected %s argument" +msgid_plural "expected %s arguments" +msgstr[0] "%s аргумент көтөлә" +msgstr[1] "%s аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at least one argument" +msgstr "кәмендә бер аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at most one argument" +msgstr "күп тигәндә бер аргумент көтөлә" + +#: /usr/lib/python3.11/argparse.py +msgid "expected one argument" +msgstr "бер аргумент көтөлә" + +#: ../fdroidserver/__main__.py +msgid "fdroid [] [-h|--help|--version|]" +msgstr "fdroid [<команда>] [-h|--help|--version|<аргументтар>]" + +#: ../fdroidserver/scanner.py +msgid "fetch the latest version of signatures from the web" +msgstr "имзаларҙың һуңғы версияһын вебтән алыу" + +#: ../fdroidserver/metadata.py +msgid "force metadata errors (default) to be warnings, or to be ignored." +msgstr "мета-мәғлүмәт хаталарын (стандарт) иҫкәрмәләргә әйләндерергә йәки иғтибарһыҙ ҡалдырырға мәжбүр итеү." + +#: ../fdroidserver/common.py +msgid "git svn clone failed" +msgstr "git svn clone уңышһыҙ булды" + +#: ../fdroidserver/scanner.py +msgid "gzip file archive" +msgstr "gzip файл архивы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ignored explicit argument %r" +msgstr "асыҡтан-асыҡ %r аргументы иғтибарһыҙ ҡалдырылды" + +#: ../fdroidserver/index.py +msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" +msgstr "index-v1 имзалы булырға тейеш, уны булдырыу өсөн `fdroid signindex` ҡулланығыҙ!" + +#: ../fdroidserver/index.py +msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" +msgstr "index-v2 имзалы булырға тейеш, уны булдырыу өсөн `fdroid signindex` ҡулланығыҙ!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid %(type)s value: %(value)r" +msgstr "дөрөҫ булмаған %(type)s ҡиммәте: %(value)r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid choice: %(value)r (choose from %(choices)s)" +msgstr "дөрөҫ булмаған һайлау: %(value)r (%(choices)s араһынан һайлағыҙ)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "дөрөҫ булмаған conflict_resolution ҡиммәте: %r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" +msgstr "дөрөҫ булмаған %(option)r опция юлы: %(prefix_chars)r символы менән башланырға тейеш" + +#: ../fdroidserver/common.py +msgid "ipfs_cid not found, skipping CIDv1 generation" +msgstr "ipfs_cid табылманы, CIDv1 булдырыу үткәреп ебәрелә" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" +msgstr "һуңғы йыйыу рецебы яңыраҡ: иҫке vercode={old}, яңы vercode={new}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" +msgstr "local_copy_dir \"fdroid\" менән тамамланмай, бәлки һеҙ быны күҙ уңында тоттоғоҙ: \"{path}\"" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be an absolute path!" +msgstr "local_copy_dir абсолют юл булырға тейеш!" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be directory, not a file!" +msgstr "local_copy_dir каталог булырға тейеш, файл түгел!" + +#: ../fdroidserver/index.py +#, python-format +msgid "mirror '%s' does not end with 'fdroid'!" +msgstr "'%s' көҙгөһө 'fdroid' менән тамамланмай!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "mirrors set twice, in config.yml and {path}!" +msgstr "көҙгөләр ике тапҡыр күрһәтелгән, config.yml-да һәм {path}-та!" + +#: /usr/lib/python3.11/argparse.py +msgid "mutually exclusive arguments must be optional" +msgstr "бер-береһен инҡар итеүсе аргументтар өҫтәмә булырға тейеш" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "next {name} cache update due in {time}" +msgstr "киләһе {name} кешын яңыртыу {time} аша" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "no \"icon\" in {appid}" +msgstr "{appid}-та \"icon\" юҡ" + +#: ../fdroidserver/signatures.py +msgid "no APK supplied" +msgstr "APK бирелмәгән" + +#: ../fdroidserver/checkupdates.py +msgid "no version information found" +msgstr "версия тураһында мәғлүмәт табылманы" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "not allowed with argument %s" +msgstr "%s аргументы менән рөхсәт ителмәй" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "one of the arguments %s is required" +msgstr "%s аргументтарының береһе кәрәк" + +#: ../fdroidserver/common.py ../fdroidserver/index.py +msgid "only accepts strings, lists, and tuples" +msgstr "тик юлдарҙы, исемлектәрҙе һәм кортеждарҙы ғына ҡабул итә" + +#: /usr/lib/python3.11/argparse.py +msgid "options" +msgstr "опциялар" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "overwriting existing {path}" +msgstr "инде булған {path} өҫтөнән яҙыла" + +#: /usr/lib/python3.11/argparse.py +msgid "positional arguments" +msgstr "позицион аргументтар" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "process log deploy {path} to {dest} failed!" +msgstr "эшкәртеү логын {path} {dest} адресына урынлаштырыу уңышһыҙ булды!" + +#: ../fdroidserver/build.py +msgid "reference binary missing signature" +msgstr "өлгө бинарҙың имзаһы юҡ" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" +msgstr "хәүефһеҙ булмаған HTTP тоташыуы аша йөкләүҙән баш тартыу (HTTPS ҡулланығыҙ йәки --no-https-check күрһәтегеҙ): {apkfilename}" + +#: ../fdroidserver/index.py +#, python-format +msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." +msgstr "\"repo/icons/%s\" repo_icon-ы юҡ, ҡалып булдырыла." + +#: ../fdroidserver/common.py +msgid "repo_url needs to end with /repo" +msgstr "repo_url /repo менән тамамланырға тейеш" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "rsync is missing or broken: {error}" +msgstr "rsync юҡ йәки боҙолған: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" +msgstr "s3cmd индекстарҙы {path}-тан {url}-ға синхронлаштыра һәм юя" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "s3cmd индекстарҙы {path}-тан {url}-ға синхронлаштыра һәм юйылғандарҙы юя" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "scanner cache is malformed! You can clear it with: '{clear}'" +msgstr "сканлаусы кешы боҙолған! Уны былай таҙартырға мөмкин: '{clear}'" + +#: ../fdroidserver/deploy.py +msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" +msgstr "serverwebroot: юл \"fdroid\" менән тамамланмай, бәлки һеҙ быларҙың береһен күҙ уңында тоттоғоҙ:" + +#: ../fdroidserver/scanner.py +msgid "shared library" +msgstr "уртаҡ китапхана" + +#: /usr/lib/python3.11/argparse.py +msgid "show this help message and exit" +msgstr "был ярҙам хәбәрен күрһәтеү һәм сығыу" + +#: ../fdroidserver/signatures.py +msgid "signed APK, either a file-path or HTTPS URL." +msgstr "тамғаланған APK, файл юлы йәки HTTPS URL-ы." + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: log content is empty" +msgstr "тулы йыйыу логтарын урынлаштырыуҙы үткәреп ебәреү: лог эстәлеге буш" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: not enabled in config" +msgstr "тулы йыйыу логтарын урынлаштырыуҙы үткәреп ебәреү: конфигурацияла ҡабыҙылмаған" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "skipping source tarball: {path}" +msgstr "сығанаҡ tarball үткәреп ебәрелә: {path}" + +#: ../fdroidserver/lint.py +msgid "srclibs missing name and/or @" +msgstr "srclibs-та исем һәм/йәки @ юҡ" + +#: ../fdroidserver/scanner.py +msgid "static library" +msgstr "статик китапхана" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "supplied reference binary has allowed signer {signer}" +msgstr "бирелгән өлгө бинарҙың рөхсәт ителгән имзалаусыһы {signer} бар" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "the following arguments are required: %s" +msgstr "түбәндәге аргументтар мотлаҡ: %s" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "дөрөҫ" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unexpected option string: %s" +msgstr "көтөлмәгән опция юлы: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unknown parser %(parser_name)r (choices: %(choices)s)" +msgstr "билдәһеҙ парсер %(parser_name)r (һайлау варианттары: %(choices)s)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unrecognized arguments: %s" +msgstr "танылмаған аргументтар: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "unsafe permissions on '{config_file}' (should be 0600)!" +msgstr "'{config_file}' өсөн хәүефле рөхсәттәр (0600 булырға тейеш)!" + +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py +msgid "usage: " +msgstr "ҡулланыу: " + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "using Apache libcloud to sync with {url}" +msgstr "{url} менән синхронлаштырыу өсөн Apache libcloud ҡулланыла" + +#: ../fdroidserver/deploy.py +msgid "virustotal.com is rate limiting, waiting to retry..." +msgstr "virustotal.com сикләү ҡуйҙы, ҡабатлап ҡарау өсөн көтөлә..." + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "эйе" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "{0} app, {1} key aliases" +msgid_plural "{0} apps, {1} key aliases" +msgstr[0] "{0} ҡушымта, {1} асҡыс псевдонимы" +msgstr[1] "{0} ҡушымта, {1} асҡыс псевдонимы" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename} ({appid}) has no metadata!" +msgstr "{apkfilename} ({appid}) өсөн мета-мәғлүмәт юҡ!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " +msgstr "{apkfilename}-ның AndroidManifest.xml-ында дөрөҫ булмаған дата: " + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} does not have a name! Using application ID instead." +msgstr "{appid} өсөн исем юҡ! Уның урынына ҡушымта идентификаторы ҡулланыла." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Android application ID!" +msgstr "{path} эсендәге {appid} — дөрөҫ Android ҡушымта идентификаторы түгел!" + +#: ../fdroidserver/metadata.py ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Java Package Name!" +msgstr "{path} эсендәге {appid} — дөрөҫ Java пакет исеме түгел!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} has both APKs and files: {files}" +msgstr "{appid}-та APK-лар ҙа, файлдар ҙа бар: {files}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{appid} is missing {name}" +msgstr "{appid}-та {name} юҡ" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: Unknown extlib {path} in build '{versionName}'" +msgstr "{appid}: '{versionName}' йыйылмаһында билдәһеҙ extlib {path}" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "{appid}: no builds specified, running on current source state" +msgstr "{appid}: йыйылмалар күрһәтелмәгән, ағымдағы сығанаҡ хәлендә эшләтелә" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" +msgstr "{appid}: {field} '{type}' булырға тейеш, ләкин ул '{fieldtype}'!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" +msgstr "{appid}: {field} '{type}' булырға тейеш, ләкин ул '{fieldtype}'!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be an integer, found: {value}" +msgstr "{build_flag} бөтөн һан булырға тейеш, табылды: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be list or string, found: {value}" +msgstr "{build_flag} исемлек йәки юл булырға тейеш, табылды: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{file} is blank or corrupt!" +msgstr "{file} буш йәки боҙолған!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." +msgstr "{name} \"{section}/icons/{path}\" юҡ! \"config.yml\"-ды тикшерегеҙ." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} — {path2}-нең күсермәһе, береһен юйығыҙ!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{path} already exists, ignoring import results!" +msgstr "{path} инде бар, импорт һөҙөмтәләре иғтибарһыҙ ҡалдырыла!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "{path} does not exist! Create it by running:" +msgstr "{path} юҡ! Уны булдырыу өсөн эшләтегеҙ:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" +msgstr "{path} файлының имзаһы дөрөҫ түгел \"{pattern}\", Janus эксплойты булыуы мөмкин!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} has been flagged by virustotal {count} times:" +msgstr "{path} virustotal тарафынан {count} тапҡыр билдәләнгән:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} файлының бармаҡ эҙе дөрөҫ түгел ({fingerprint})!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not \"key: value\" dict, but a {datatype}!" +msgstr "{path} — \"key: value\" һүҙлеге түгел, ә {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not a standard config file!" +msgstr "{path} — стандарт конфигурация файлы түгел!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "{path} is not list, but a {datatype}!" +msgstr "{path} — исемлек түгел, ә {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not {expected_type}, but a {datatype}!" +msgstr "{path} — {expected_type} түгел, ә {datatype}!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} is zero size!" +msgstr "{path} үлсәме нуль!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} more than 200MB, manually upload: {url}" +msgstr "{path} 200MB-тан ҙурыраҡ, ҡулдан йөкләү: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" +msgstr "{path}: \"{code}\" — дөрөҫ ISO_3166-1 alpha-2 ил коды түгел!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path}: {error}" +msgstr "{path}: {error}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{url} does not end with \"fdroid\", check the URL path!" +msgstr "{url} \"fdroid\" менән тамамланмай, URL юлын тикшерегеҙ!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{url} does not start with \"http\"!" +msgstr "{url} \"http\" менән башланмай!" + +#: ../fdroidserver/build.py +msgid "{} build failed" +msgid_plural "{} builds failed" +msgstr[0] "{} йыйыу уңышһыҙ булды" +msgstr[1] "{} йыйыу уңышһыҙ булды" + +#: ../fdroidserver/build.py +msgid "{} build succeeded" +msgid_plural "{} builds succeeded" +msgstr[0] "{} йыйыу уңышлы булды" +msgstr[1] "{} йыйыу уңышлы булды" diff --git a/locale/be/LC_MESSAGES/fdroidserver.po b/locale/be/LC_MESSAGES/fdroidserver.po index 2e61feb4..9526f6ea 100644 --- a/locale/be/LC_MESSAGES/fdroidserver.po +++ b/locale/be/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-01-21 00:08+0000\n" "Last-Translator: flac \n" "Language-Team: Belarusian \n" @@ -39,6 +39,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" не супадае з файлам метаданных!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -49,11 +53,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -79,17 +78,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -105,14 +93,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [параметры]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -133,13 +113,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -160,8 +133,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -175,11 +146,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +156,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -200,13 +166,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не вызначана" @@ -297,10 +265,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -327,6 +291,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -336,7 +308,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -387,16 +358,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -419,6 +397,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -432,6 +414,10 @@ msgstr "Каманда '%s' не распазнана.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -441,20 +427,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -474,6 +457,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -500,6 +484,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -562,11 +551,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -615,13 +599,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -657,12 +640,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -672,6 +649,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -689,6 +686,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -705,6 +711,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -774,10 +784,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -809,7 +815,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -874,15 +879,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -927,6 +930,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1012,16 +1020,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1134,6 +1138,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1163,6 +1172,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1223,7 +1236,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1258,7 +1270,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1276,13 +1287,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1293,10 +1318,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Параметры" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1354,6 +1375,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1440,6 +1466,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1453,12 +1488,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перайменуйце файлы APK, якія не адпавядаюць package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1474,6 +1506,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перапішыце ўсе файлы метададзеных" @@ -1487,6 +1524,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1534,6 +1576,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1654,6 +1700,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1718,6 +1768,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1739,11 +1793,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1753,7 +1802,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Знойдзена невядомае выключэнне!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1791,6 +1839,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1821,11 +1870,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Абнаўленне інфармацыі рэпазітара для новых пакетаў" @@ -1839,6 +1883,7 @@ msgstr "Абнавіць бінарны журнал празрыстасці д msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1858,11 +1903,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1877,27 +1918,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Выкарыстанне" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Выкарыстанне: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1915,6 +1939,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1931,11 +1960,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1946,6 +1970,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1967,15 +1996,28 @@ msgstr "Праверце цэласнасць спампаваных пакет msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Папярэджваць аб магчымых памылках метададзеных" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1988,6 +2030,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2000,6 +2050,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2010,19 +2065,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неадназначны варыянт: %(option)s можа адпавядаць %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "неадназначны варыянт: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2032,11 +2083,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2047,8 +2100,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2067,7 +2118,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2081,14 +2132,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2107,14 +2154,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2145,10 +2184,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2164,13 +2199,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2188,8 +2225,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2197,20 +2232,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2223,10 +2252,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2239,8 +2264,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2254,35 +2277,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2320,8 +2329,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2340,30 +2347,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "такой опцыі няма: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2373,72 +2365,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "варыянт -%s не распазнаны" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "варыянт -%s патрабуе аргумента" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "параметр --%s не павінен мець аргумент" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "параметр --%s не з'яўляецца унікальным прэфіксам" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "варыянт --%s не распазнаны" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "параметр --%s патрабуе аргументу" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "неабавязковыя аргументы" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2448,8 +2374,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "пазіцыйныя аргументы" @@ -2482,13 +2406,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2504,17 +2429,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "паказаць нумар версіі праграмы і выйсці" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "паказаць гэта паведамленне дапамогі і выйсці" @@ -2548,29 +2463,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "патрабуюцца наступныя аргументы: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "нечаканы параметр: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2581,9 +2492,7 @@ msgstr "незнаёмыя аргументы: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небяспечныя дазволы доступу для '{config_file}' (патрэбна быць 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "выкарыстанне: " @@ -2596,6 +2505,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2608,21 +2521,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2643,7 +2554,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2684,9 +2594,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2709,6 +2619,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/bg/LC_MESSAGES/fdroidserver.po b/locale/bg/LC_MESSAGES/fdroidserver.po index bdecaf1c..bbcbc06a 100644 --- a/locale/bg/LC_MESSAGES/fdroidserver.po +++ b/locale/bg/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-07-19 10:21+0000\n" "Last-Translator: 109247019824 \n" "Language-Team: Bulgarian \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +354,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +410,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +423,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +453,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +480,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +547,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +595,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +636,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +645,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +682,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +707,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -770,10 +780,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +811,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -870,15 +875,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +926,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1008,16 +1016,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1130,6 +1134,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1168,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1232,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1254,7 +1266,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1272,13 +1283,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1289,10 +1314,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1350,6 +1371,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1436,6 +1462,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1449,12 +1484,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1470,6 +1502,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1483,6 +1520,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1530,6 +1572,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1650,6 +1696,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1714,6 +1764,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1735,11 +1789,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1749,7 +1798,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1787,6 +1835,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1817,11 +1866,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1835,6 +1879,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1854,11 +1899,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1873,27 +1914,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1911,6 +1935,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1927,11 +1956,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1942,6 +1966,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1963,15 +1992,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1984,6 +2026,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1996,6 +2046,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2006,18 +2061,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2028,11 +2079,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2043,8 +2096,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2063,7 +2114,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2077,14 +2128,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2103,14 +2150,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "комплекс" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2141,10 +2180,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2160,13 +2195,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2184,8 +2221,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2193,20 +2228,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2219,10 +2248,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,8 +2260,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2250,35 +2273,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2316,8 +2325,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,30 +2343,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2369,72 +2361,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2444,8 +2370,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2478,13 +2402,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2425,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2544,29 +2459,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2488,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2592,6 +2501,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2517,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2550,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2590,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2615,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/bn/LC_MESSAGES/fdroidserver.po b/locale/bn/LC_MESSAGES/fdroidserver.po index 4bb5e5e0..44e14abf 100644 --- a/locale/bn/LC_MESSAGES/fdroidserver.po +++ b/locale/bn/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-02-12 09:48+0000\n" "Last-Translator: Oymate \n" "Language-Team: Bengali \n" @@ -34,6 +34,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +48,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,17 +73,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +88,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [অপশন]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +108,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +128,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +141,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +151,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +161,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -292,10 +260,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +286,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +303,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -382,16 +353,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -414,6 +392,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -427,6 +409,10 @@ msgstr "'%s' কমান্ড চিনা যায়নি।\n" msgid "Commit changes" msgstr "পরিবর্তন জমা দাও" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -436,20 +422,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -469,6 +452,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -495,6 +479,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -557,11 +546,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,13 +594,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -652,12 +635,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -667,6 +644,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -684,6 +681,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -700,6 +706,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -769,10 +779,6 @@ msgstr "" msgid "Finished" msgstr "সম্পূর্ণ" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -804,7 +810,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -869,15 +874,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -922,6 +925,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1007,16 +1015,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1129,6 +1133,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1158,6 +1167,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1218,7 +1231,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1253,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1271,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1288,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "বিকল্পসমূহ" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1349,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1435,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1448,12 +1483,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1469,6 +1501,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1482,6 +1519,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1529,6 +1571,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1649,6 +1695,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1713,6 +1763,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1734,11 +1788,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1748,7 +1797,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "অজানা ব্যতিক্রম পাওয়া গেছে!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1786,6 +1834,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1816,11 +1865,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1834,6 +1878,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1853,11 +1898,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1872,27 +1913,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "ব্যবহার" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "ব্যবহার: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1910,6 +1934,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,11 +1955,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1941,6 +1965,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1962,15 +1991,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1983,6 +2025,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1995,6 +2045,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2005,18 +2060,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2027,11 +2078,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2042,8 +2095,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2062,7 +2113,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2076,14 +2127,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,14 +2149,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "জটিল" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2140,10 +2179,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2159,13 +2194,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2183,8 +2220,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2192,20 +2227,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2218,10 +2247,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "ফ্লোটিং-পয়েন্ট" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2234,8 +2259,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2249,35 +2272,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "ইন্টিজার" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2315,8 +2324,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2335,30 +2342,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2368,72 +2360,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2444,8 +2370,6 @@ msgstr "বিকল্পসমূহ" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2478,13 +2402,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2425,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2544,29 +2459,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2488,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "ব্যবহার: " @@ -2592,6 +2501,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2517,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2550,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2590,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2615,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/bo/LC_MESSAGES/fdroidserver.po b/locale/bo/LC_MESSAGES/fdroidserver.po index 06817ec3..cbd1c63c 100644 --- a/locale/bo/LC_MESSAGES/fdroidserver.po +++ b/locale/bo/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tibetan \n" @@ -39,6 +39,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" འདི་དང་མཐུན་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆ་མིན་འདུག!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -49,11 +53,6 @@ msgstr "dir གྱི་རྩ་བ་ for local_copy_dir \"{path}\" མིན msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' འདི་{dev}.ནང་སྔོན་ཚོད་ནས་སྒྲིག་བཅུག་བྱས་ཟིན།." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\"དུས་ཚོད་ཡོལ་ཟིན་པའི་{name} ({version})ཚུད་ཡོད།" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -79,16 +78,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s གདམ་ཀ་དགོས་ %(number)d རྩོད་པ།" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -104,14 +93,6 @@ msgstr "" msgid "%d problems found" msgstr "%d དཀའ་རྙོག་ཐོན་སོང་།" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [གདམ་ཀ།]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -132,13 +113,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "%s 1འདི་ཁས་ལེན་ཐུབ་པའི་བཟོ་སྐྲུན་རྭ་བ་མ་རེད།" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%sགདམ་ཀ་ནུས་མེད་རེད་འདུག" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' འདི་config.yml ནང་རྙེད་མ་སོང་།!" @@ -159,8 +133,6 @@ msgstr "'keystorepass' འདི་ config.yml ནང་རྙེད་མ་ས msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' འདི་ config.yml ནང་རྙེད་མ་སོང་།!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'དགསོ་མཁོ།' ནི་གནས་སྟངས་འདི་ལ་ཁུངས་ལྡན་གྱི་རྩོད་པ་རེད་མིན་འདུག" @@ -175,11 +147,6 @@ msgstr "'sdk_path' འདི་ 'config.yml' ནང་སྒྲིག་ཐུ msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}1' ནི་གོ་རིམ་ངེས་མེད།! བེད་སྤྱོད། () ཡང་ན། [] གོ་རིམ་གལ་ཆེན་པོའི་རིགས་ལ་གུག་རྟགས་ནང་བཅུག!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +157,7 @@ msgstr "'{path}1' ལག་བསྟར་ཐུབ་མ་སོང་།!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}" @@ -200,13 +167,15 @@ msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུ msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...{appid} གྱི་ཆེད་དུ་གསར་བསྒྱུར་འཚོལ་མི་ཐུབ།་: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() ངོས་འཛིན་ཐུབ་མེད།" @@ -297,10 +266,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -327,6 +292,14 @@ msgstr "མཛོད་ཁང་{apkfilename} ལ་ཁུངས་ལྡན་ msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -336,7 +309,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -386,16 +358,23 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "ཚགས་རྒྱབ་པའི་སྐབས་སུ་ནོར་སྐྱོན་ {} ཤོར་བས་བཟོ་སྐྲུན་བྱེད་ཐུབ་མེད།" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "ཀློག་མི་ཐུབ།{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Categories '%s' is not valid" msgstr "སྡེ་ཚན་'%s' ཁུངས་ལྡན་མ་རེད།" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "སྡེ་ཚན་རྣམས་སྒྲིག་མེད།" @@ -418,6 +397,10 @@ msgstr "མཛོད་ཁང་ཚོད་ལྟའི་ཆེད་དུ། msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "གསར་བསྒྱུར་གཙང་བཟོ།-ཡིག་ཆ་གསོག་ཉར་བེད་སྤྱོ་མ་བྱེད། APKs ཚང་མ་སྐྱར་སྤྱོད་བྱེད།" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "སྡེ་ཚན་སོ་སོའི་ཐོ་གཞུང་ལ་བར་མཚམས་རེ་འཇོག།." @@ -431,6 +414,10 @@ msgstr "བཀའ་ཁྱབ་ '%s 1'ངོས་འཛིན་ཐུབ་ msgid "Commit changes" msgstr "བསྒྱུར་བ་གཏོང་བར་མོས་མཐུན་ཡོད།" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -440,21 +427,18 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "ཁྱེད་རང་གི་མ་ལག་སྒང་ལ་'{command}1' རྙེད་མ་སོང་།" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "ཐོན་རིམ་གསར་གསར་ཤོས་ཀྱི་ཨང་རྟགས་འདི་འདི་རྙེད་མ་སོང་།" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" @@ -475,6 +459,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" @@ -503,6 +488,11 @@ msgstr "དྲྭ་སྣོད་གསར་པ་བཟོས་\"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "ཀློག་བཞིན་པ་། '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "ཉིན་ཐོ་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།" @@ -565,11 +555,6 @@ msgstr "འགྲེལ་བཤད་'%s 1' ནི་མཉེན་ཆས་ msgid "Description has a duplicate line" msgstr "འགྲེལ་བཤད་འདི་ལ་རིམ་པ་རྫུན་མ་ཡོད།" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "འགྲེལ་བཤད་འདི་ལ་ཐོ་གཞུང་ཡོད། (%s 1) འོན་ཀྱང་འདི་ལ་ཚགས་རྒྱབ་མིན་འདུག(*)གྲངས་ཀྱང་མེད། (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,13 +603,12 @@ msgstr "མཛོད་ཁང་སྐྱར་སོས་མ་བྱེད། msgid "Don't use rsync checksums" msgstr "rsync ཡིག་ཚགས་བརྟག་དཔྱད་ཀྱི་གསོག་ཉར་ཁང་འདི་བེད་སྤྱོད་མ་བྱེད།" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -660,12 +644,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ནོར་འཁྲུལ།: རྒྱབ་སྐྱོར་མེད་པའི་CI རྣམ་གྲངས་དང་ལྷན་པ་རྒྱབ་ནའང་འགྲིག་གི་ཡོད།!" @@ -680,6 +658,16 @@ msgstr "" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -704,6 +692,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -724,6 +717,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "APKs ནས་མིང་རྟགས་ཕྱིར་སྟོན་བྱེད།" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed copying {path}: {error}" @@ -794,11 +791,6 @@ msgstr "" msgid "Finished" msgstr "ཚར་སོང་།" -#: ../fdroidserver/lint.py -#, fuzzy -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flattr ཞལ་འདེབས་ཐབས་ལམ་འདི་བཞིན་FlattrID flag ལ་ཐོབ་ཀྱི་ཡོད་།" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -830,7 +822,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "རྩོད་པའི་ནང་ཁུངས་ལྡན་མིན་པའི་appids རྙེད་འདུག" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "མཉེན་ཆས་ཁ་ཤས་ཀྱི་ཁུངས་ལྡན་མིན་པའི་ཐོན་རིམ་ཨང་རྟགས་རྙེད་འདུག" @@ -896,16 +887,13 @@ msgstr "གིཊ་གཙང་བཟོ་ཐུབ་མ་སོང་།" msgid "Git fetch failed" msgstr "གིཊ་འཚོལ་ཐུབ་མ་སོང་།" -#: ../fdroidserver/common.py -#, fuzzy -msgid "Git prune failed" -msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།" @@ -951,6 +939,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "རྒྱབ་ལྗོངས་ཡིག་ཆ་མེད་པའི་ཐུམ་སྒྲིལ་ཡ་ལན་མ་བྱས། " @@ -1036,16 +1029,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "ཁུངས་ལྡན་མིན་པའི་boolean '%s 1'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "ཚད་ལྡན་མིན་པའི་ཚགས་ཀྱི་ཐོ་གཞུང་།" @@ -1160,6 +1149,11 @@ msgstr "བཟོ་ལྟ་ཤོར་བའི་ serverwebroot line:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1189,6 +1183,10 @@ msgstr "ཨེན་ཀྲོཌ་ SDK རྙེད་མ་སོང་།!" msgid "No attached devices found" msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་སོང་།" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL ནང་ལག་མཐིལ་པར་ཤུས་རྙེད་མ་སོང་།." @@ -1251,7 +1249,6 @@ msgstr "{path}མིང་རྟགས་བཀོད་པའི་ཆོག་ msgid "No such package: %s" msgstr "ཐུམ་སྒྲིལ་དེ་འདྲ་མིན་འདུག: %s 1" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1288,7 +1285,6 @@ msgstr "{appid} ཆེད་དུ་བྱ་རྒྱུ་གང་ཡང་ msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1306,26 +1302,28 @@ msgstr "OBB's ཐུམ་སྒྲིལ་མིང་འདིས་APK ར msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG དང་ JPEG ཁོ་ན་བརྐོས་རིས་རྒྱབ་སྐྱོར་རྙེད་སོང་། :{path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "མཉེས་ཆས་གསོག་ཉར་ཁང་དང་མི་འདྲ་པ་ཡོད་པ་ཁོ་ནར་པར་ཤུས་བྱེད།" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1336,10 +1334,6 @@ msgstr "མཉེན་ཆས་ཁོ་ནར་རང་འགུལ་གས msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Flattr ཞལ་འདེབས་ཐབས་ལམ་འདི་བཞིན་FlattrID flag ལ་ཐོབ་ཀྱི་ཡོད་།" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "གདམ་ཀ།" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1397,6 +1391,11 @@ msgstr "རེ་པོ་མིང་རྟགས་བཀོད་པའི་ msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "ས་ཚིགས་ཀྱི་གསང་ཁྱབ་ངོ་བཤུས་དང་/སྦྱར་བ་སྟབས་བདེ་ཡོང་བའི་ཆེད་དུ་འདྲ་བཤུས་" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1483,6 +1482,15 @@ msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞི msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "དམིགས་སྟོན་བྱས་པའི་ཡིག་ཆ་རྣམས་མེད་པ་བཟོ་བཞིན་པ།" @@ -1496,14 +1504,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk དང་མི་འདྲ་བའི་APK ཡིག་ཆ་དེ་ཚོར་མིང་སྐྱར་ཏུ་བཏགས།" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "ཡོད་བཞིན་པའི་ཞབས་ཞུ་འཕྲུལ་ཆས་འདི་ལ་སྐྱོན་མེད་པ་ཡིན་རུང་། ཐོན་སྐྱེད་ཞབས་ཞུ་འཕྲུལ་ཆས་གསར་པ་ཞིག་སྐྱར་སྒྲིག་དང་བཟོས།." - #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1517,6 +1522,11 @@ msgstr "པར་གྱི་རྒྱུ་ཆེ་ཆུང་ཚད་ལས msgid "Restrict output to warnings and errors" msgstr "ཡིག་ཚགས་ལ་ཉེན་བརྡ་དང་སྐྱོན་ཅན་རྣམས་དམ་བསྒྲགས་བྱེད།" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་ཚང་མ་སྐྱར་ཟིན།" @@ -1581,6 +1591,10 @@ msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "འཚག་རྒྱབ་ལ་སྐྱོན་རྙེད་པ།" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1701,6 +1715,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "ཚོད་ལྟའི་ཚུལ་-གལ་སྲིད་ཡིག་ཚགས་འདི་སྔོན་ཚོད་ནས་ཡོད་ནའང་། ཡིག་ཚགས་འདི་སྐབས་ཕྲལ་གྱི་ཕྱོགས་དེབ་ཁོ་ནའི་ནང་ལ་བླུགས་པ་དང་རྟག་ཏུ་ཐོན་སྐྱེད་བཟོས།." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1792,11 +1810,6 @@ msgstr "ཁུངས་ལྡན་མིན་པའི་ཆོག་མཆན msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1806,7 +1819,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1844,6 +1856,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1874,11 +1887,6 @@ msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི msgid "Unused scanignore path: %s" msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི་ཡིག་ཆ།" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "ཐུམ་སྒྲིལ་གསར་པའི་ཆེད་དུ་རེ་པོ་གནས་ཚུལ་གསར་བསྒྱུར་བྱེད།" @@ -1892,6 +1900,7 @@ msgstr "URLཆེད་དུ་ཨང་གྲངས་ཀྱི་ཐོ་ག msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1911,11 +1920,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" @@ -1931,28 +1936,11 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞིན་པ།" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "བེད་སྤྱོད།" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "བེད་སྤྱོད།:%s 1\n" - #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "`fdroid update -c`བེད་སྤྱོད་བྱས་ནས་འདི་བཟོས།." @@ -1991,11 +1979,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, fuzzy, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "སྐྱར་བྲིས་ཡོད་།{path}" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2032,15 +2015,28 @@ msgstr "ཕབ་ལེན་བྱས་པའི་ཐུམ་སྒྲིལ msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལོ་རྒྱུས་སྐྱོན་སྲིད་པ་རྣམས་པ་ཉེན་བརྡ་གཏོང་།" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "བརྡ་སྟོན་པའི་མིང་རྟགས་དེ་སྒྲིག་བཀོད་བྱས་ཚར་ན། གནས་སྐབས་མིང་རྟགས་མ་བཀོད་པའི་བརྡ་སྟོན་རྣམས་བཟོས།" @@ -2053,6 +2049,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།" @@ -2065,6 +2069,11 @@ msgstr "ཁྱེད་རང་གིས་ཨེན་ཀྲོཌ་མདུ msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2075,19 +2084,15 @@ msgstr "{path}ལ་ངོས་འཛིན་ཡིག་ཆ་ཁ་སྣོ msgid "adding to {name}: {path}" msgstr "{name}ལ་ཁ་སྣོན་བྱེད།: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "གསལ་ཁ་མེད་པའི་གདམ་ཀ: %(option)s མཐུན་མི་སོང་།%(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "གསལ་ཁ་མེད་པའི་གདམ་ཀ:%s 1 (%s 2?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2097,12 +2102,14 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "མཉེས་ཆས་ཁ་བྱང་རྒྱུད་གསར་བསྒྱར་ཡོད་མིན་ལྟོས།" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2114,8 +2121,6 @@ msgstr "མཉེན་ཆས་ཀྱི་ངོ་བོ་དང་མཉམ msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2135,7 +2140,7 @@ msgstr "ཕྱོགས་སྐྱོད་ལྡེ་མིག་ཚོད་ msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "ཁ་ཕྱེས་ཐུབ་མ་སོང་།'%(filename)s': %(error)s" @@ -2149,14 +2154,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "{path}!གྱི་ཆེད་དུ་ཐུམ་སྒྲིལ་གྱི་མིང་རྙེད་མ་སོང་།" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "subparser རྩོད་པ་དུ་མ་ཡོད་ཐབས་མེད།" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2175,14 +2176,6 @@ msgstr "འདྲ་བཟོས་{url}" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "མགོ་རྙོག" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2212,10 +2205,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2240,8 +2229,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2260,28 +2247,20 @@ msgstr "{apkfilename}ཡིག་ཆ་སྦས་ཁུང་རྙིང་ msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "ཚོད་དཔག་བྱེད་པའི་%s 1 རྩོད་པ་" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "མ་མཐའ་ཡིན་ནའང་རེ་བ་བྱེད་པའི་རྩོད་པ།" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་ཆེ་ཤེོས་གཅིག" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་གཅིག" @@ -2295,10 +2274,6 @@ msgstr "བེད་སྤྱོད་: ཨེཕ་རོཌ་ [-h|-རོག msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "གཡེང་ཚེག" - #: ../fdroidserver/metadata.py #, fuzzy msgid "force metadata errors (default) to be warnings, or to be ignored." @@ -2313,8 +2288,6 @@ msgstr "གིཊ་གཙང་བཟོ་ཐུབ་མ་སོང་།" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2329,35 +2302,21 @@ msgstr "index-v1 ངེས་པར་དུ་མིང་རྟགས་དག msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 ངེས་པར་དུ་མིང་རྟགས་དགོས། བེད་སྤྱོད་`fdroid signindex`འདི་བཟོས་པ་རེད།!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "གོང་བུ།" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "ཁུངས་ལྡན་མིན་པ་ %(type)s value: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "ཁུངས་ལྡན་མིན་པའི་གདམ་ཀ: %(value)r (དེ་ནས་གདམ་ཀ་%(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "ཁུངས་ལྡན་མིན་པའི་རྙོག་ཕྲ།_resolution value: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2395,8 +2354,6 @@ msgstr "མེ་ལོང་། '%s 1' 'fdroid'དང་མཉམ་དུ་ msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "ནང་ཕན་ཚུན་རྩོད་པ་དེ་གདམ་ཀ་ཅན་ངེས་པར་དུ་བཞག་དགོས་།" @@ -2415,31 +2372,16 @@ msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid}" msgid "no APK supplied" msgstr "APK མཁོ་སྤྲོད་མིན་འདུག" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "གདམ་ཀ་དེ་འདྲ་མིན་འདུག: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།!" - #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "རྩོད་པ་དང་མཉམ་དུ་ཆོག་མཆན་མེད། %s 1" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2449,72 +2391,6 @@ msgstr "རྩོད་པ་གཅིག་དགོས་ཀྱི་ཡོད msgid "only accepts strings, lists, and tuples" msgstr "ཚིག་སྒྲུབ་དང་ཐོ་གཞུང་། ཡིག་ཚགས་ཁོ་ན་ངོས་ལེན་བྱེད།" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "གདམ་ཀ %s 1: གལ་ཏེ་ཁྱེད་ཀྱིས་མིང་རྟགས་བཀོད་པའི་མཉེན་ཆས་རིགས་ཚང་མ་ངེས་པར་དུ་སྒྲིག་བཅུག་བྱེད་འདོད་ཡོད་། བེད་སྤྱོད་ --ཚང་མ།" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "གདམ་ཀ %s 1: ཁུངས་ལྡན་མིན་པ་ %s 2 རིན་ཐང་།: %r 3" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "གདམ་ཀ %s 1: ཁུངས་ལྡན་མིན་པའི་གདམ་ཀ: %r 2 (choose from %s 3)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "གདམ་ཀ། '%s 1'ངོས་འཛིན་ཐུབ་མ་སོང་།" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "གདམ་ཀ། -%s 1 རྩོད་དགོས།" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "གདམ་ཀ། --%s 1གང་བྱས་ཀྱང་རྩོད་པ་མེད།" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "གདམ་ཀ་--%s ཐུན་མོང་མ་ཡིན་པའི་སྔོན་འཇུག་མ་རེད།" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "གདམ་ཀ།--%s 1 ངོས་འཛིན་ཐུབ་མ་སོང་།" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "གདམ་ཀ། --%s རྩོད་དགོས།" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "གདམ་ཀ་ཅན་གྱི་རྩོད་པ།" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2525,8 +2401,6 @@ msgstr "གདམ་ཀ།" msgid "overwriting existing {path}" msgstr "སྐྱར་བྲིས་ཡོད་།{path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "གནས་སྟངས་ལ་གཞིགས་པའི་རྩོད་པ།" @@ -2559,10 +2433,6 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2587,17 +2457,7 @@ msgstr "local_copy_dir \"fdroid\"གིས་མཇུག་སྐྱོང་ msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "ལས་རིམ་རྣམ་གཞག་གི་ཐོན་རིམ་ཨང་གྲངས་སྟོན་ནས་ཕྱིར་ཐོན་བྱེད།" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "རོགས་པ་བྱེད་པའི་འཕྲིན་ཐུང་སྟོན་ནས་ཕྱིར་ཐོན།" @@ -2631,29 +2491,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "གཤམ་གྱི་རྩོད་པ་དེ་དག་དགོས།:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "རེ་བ་མེད་པའི་གདམ་ཀ་ཅན་གྱི་ཚིག་སྒྲུབ།:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་ parser %(parser_name)r (གདམ་ཀ།: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2664,9 +2520,7 @@ msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་རྩོད msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' སྒང་གི་བདེ་ཆགས་མེད་པའི་ཆོག་མཆན་ (ངེས་པར་དུ། 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "བེད་སྤྱོད།: " @@ -2679,6 +2533,10 @@ msgstr "Apache libcloud བེད་སྤྱོད་བྱས་པའི་ msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2690,21 +2548,19 @@ msgstr[0] "{0} མཉེས་ཆས་, {1} key aliases" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) ལ་རྒྱབ་ལྗོངས་ཡིག་ཆ་མིན་འདུག!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} ལ་མིང་ཡོད་མ་རེད། !དེའི་ཚབ་ལ་ཐུམ་སྒྲིལ་མིང་བེད་སྤྱོད་བྱེད།." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2725,7 +2581,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2766,9 +2621,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2791,6 +2646,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ca/LC_MESSAGES/fdroidserver.po b/locale/ca/LC_MESSAGES/fdroidserver.po index aa1ffe63..48cea1fc 100644 --- a/locale/ca/LC_MESSAGES/fdroidserver.po +++ b/locale/ca/LC_MESSAGES/fdroidserver.po @@ -1,24 +1,26 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # Rubén , 2023. -# pitroig , 2024. +# pitroig , 2024, 2025. # raulmagdalena <4omoald1a@mozmail.com>, 2024. # Adrià Martín , 2024. # unmes , 2024. +# Joan Pujolar , 2024. +# Ecron , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-08-26 17:39+0000\n" -"Last-Translator: pitroig \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-05-16 16:36+0000\n" +"Last-Translator: Ecron \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.7.1-dev\n" +"X-Generator: Weblate 5.12-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -42,6 +44,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" no té cap fitxer de metadades coincidents!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "La clau «isPrimary» no s'hauria d'afegir a les rèpliques!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -52,11 +58,6 @@ msgstr "\"local_copy_dir\" {path} no existeix!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ja està instal·lat en {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" conté {name} ({version}) obsoleta" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -82,17 +83,6 @@ msgstr "\"{path}\" està signat per una clau que no està permesa:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" no és un URL vàlid!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "l'opció %(option)s requereix l'argument %(number)d" -msgstr[1] "les opcions %(option)s requereixen els arguments %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -108,14 +98,6 @@ msgstr "%d APKs no han pogut ser signats o verificats." msgid "%d problems found" msgstr "%d problemes trobats" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [options]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -136,13 +118,6 @@ msgstr "%s té un SHA-256 dolent: %s" msgid "%s is not an accepted build field" msgstr "%s no és un camp de compilació acceptat" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "L'opció %s no pren cap valor" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' no s'ha trobat a config.yml!" @@ -163,8 +138,6 @@ msgstr "'keystorepass' no s'ha trobat a config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' no s'ha trobat a config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"obligatori\" és un argument no vàlid per a posicionals" @@ -178,11 +151,6 @@ msgstr "'sdk_path' no establert a config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' és massa antic, fdroid requereix build-tools-{version} o superior." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' serà en ordre aleatori. Utilitzeu parèntesis () o [] si l'ordre és important." - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -193,7 +161,7 @@ msgstr "Error en l'execució de '{path}'." msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' té un format invàlid; hauria de ser un diccionari!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' no és un {field} vàlid a {appid}. Expressió regular: {pattern}" @@ -203,13 +171,15 @@ msgstr "'{value}' no és un {field} vàlid a {appid}. Expressió regular: {patte msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' no és un {field} vàlid; hauria de ser {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request només funciona amb un sol ID d'aplicació!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...ha fallat la comprovació de {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" @@ -300,10 +270,6 @@ msgstr "No s'ha trobat l'eina Android SDK {cmd}!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "L'aplicació té binaris però no té el corresponent certificat AllowedAPKSigningKeys per fixar." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "L'aplicació té NoSourceSince o ArchivePolicy \"0 versions\", però AutoUpdateMode o UpdateCheckMode no són None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "L'aplicació té NoSourceSince o ArchivePolicy \"0 versions\" o 0 però AutoUpdateMode o UpdateCheckMode no són None" @@ -330,16 +296,23 @@ msgstr "S'està arxivant {apkfilename} amb una signatura no vàlida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode amb UpdateCheckMode: HTTP ha de tenir un patró." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "No automàtic a totes les demandes." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Sí automàtic a totes les demandes." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" -msgstr "Tipus d'entrada incorrecta \"{mirrortype}\" a la configuració de miralls: {mirror}" +msgstr "Tipus d'entrada incorrecta «{mirrortype}» a la configuració de les rèpliques: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base a la rèplica, podeu incloure la clau de signatura de l'índex utilitzant la cadena de consulta: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -390,16 +363,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No es pot construir a causa d'un error {} en escanejar" msgstr[1] "No es pot construir a causa d'errors {} en escanejar" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "No s'ha pogut llegir {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No es pot reescriure \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Les categories '%s' no són vàlides" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "No s'han definit categories" @@ -422,6 +402,10 @@ msgstr "S'està comprovant l'arxivat per a {appid} - apks:{integer}, keepversion msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualització neta - no utilitza la memòria cau, reprocessa tots els APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Color de l'egressió del registre" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Llista de categories separades per comes." @@ -435,6 +419,10 @@ msgstr "Ordre '%s' no reconeguda.\n" msgid "Commit changes" msgstr "Publicar els canvis" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Sancioneu els canvis, publiqueu-los i després feu una sol·licitud de fusió" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -444,20 +432,17 @@ msgstr "Definicions conflictives de \"{field}\" entre .yml i fitxers localitzats msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Arguments conflictius: no es poden especificar al mateix temps '--verbose' i '--quiet'." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Fitxers de configuració en conflicte! Utilitzant {newfile}, s'ignorarà {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No s'ha pogut trobar '{command}' al vostre sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "No s'ha pogut trobar el codi de versió més recent" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "No s'ha pogut trobar el codi de versió més recent" @@ -477,6 +462,7 @@ msgstr "No s'ha pogut obrir APK {path} per a l'anàlisi: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "No s'ha pogut analitzar la mida \"{size}\", tipus incorrecte \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "No s'ha pogut trobar l'identificador de l'aplicació" @@ -503,6 +489,11 @@ msgstr "S'ha creat el contenidor nou \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "S'està creant \"{path}\" per configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "S'està creant un «{config_file}» buit" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "S'està creant el directori de registre" @@ -549,7 +540,7 @@ msgstr "S'està suprimint l'arxiu, el dipòsit és massa gran ({size} màxim {li #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" -msgstr "S'està suprimint l'historial del mirall de git, el dipòsit és massa gran ({size} màxim {limit})" +msgstr "S'està suprimint l'historial git-mirror, el dipòsit és massa gran ({size}, màxim {limit})" #: ../fdroidserver/update.py #, python-brace-format @@ -565,11 +556,6 @@ msgstr "La descripció '%s' és només el resum de l'aplicació" msgid "Description has a duplicate line" msgstr "La descripció té una línia duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "La descripció té una llista (%s) però no té pics (*) ni numerats (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,15 +604,14 @@ msgstr "No actualitzar el dipòsit, útil quan es prova una construcció sense c msgid "Don't use rsync checksums" msgstr "No usis les sumes de verificació \"rsync\"" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Baixeu l'F-Droid.apk amb les rèpliques que filtren menys dades a la xarxa" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Baixa les rèpliques completes dels petits dipòsits" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "S'està baixant %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "La baixada del repositori ja ha fallat una vegada, no s'ha tornat a provar." @@ -660,14 +645,6 @@ msgstr "ERROR: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: S'ha eliminat la subordre \"servidor\", useu \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERROR: aquesta ordre no s'ha d'utilitzar mai per a replicar f-droid.org!\n" -"Una rèplica completa de f-droid.org requereix més de 200 GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tipus CI no suportat, pedaços benvinguts!" @@ -680,12 +657,22 @@ msgstr "ERROR: no s'admet l'amfitrió git \"%s\", els pedaços són benvinguts!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ERROR: {key} a {path} no és \"arxiu\" o \"dipòsit\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ERROR: {key} no és una clau vàlida!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ERROR: el valor de {key} hauria de ser del tipus {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERROR: {key}:{subkey} a {path} no està a les claus permeses: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -706,9 +693,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "La variable d'entorn {var} de {configname} no està establerta!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "La variable d'entorn {{env: {var}}} no està establerta!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "S'ha produït un error en desplegar 'github_releases', no hi ha {}. (Pot ser necessari executar `fdroid update` primer.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -726,6 +718,10 @@ msgstr "Extreu les metadades de l'aplicació des d'un dipòsit de codi font" msgid "Extract signatures from APKs" msgstr "Extreu les signatures dels APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "No s'ha pogut baixar l'F-Droid.apk des de cap font coneguda!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -795,10 +791,6 @@ msgstr "El fitxer ha desaparegut en processar-lo: {path}" msgid "Finished" msgstr "Finalitzat" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Els mètodes de donació de Flattr pertanyen a FlattrID: camp" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiquetes HTML prohibida" @@ -830,7 +822,6 @@ msgstr "S'ha trobat un fitxer de finançament incorrecte \"{path}\" per a \"{nam msgid "Found invalid appids in arguments" msgstr "S'han trobat aplicacions no vàlides als arguments" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "S'han trobat versionsCodes no vàlides per a algunes aplicacions" @@ -895,15 +886,13 @@ msgstr "Ha fallat la neteja del Git" msgid "Git fetch failed" msgstr "Ha fallat l'obtenció del Git" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Ha fallat la poda del Git" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Ha fallat el set-head remot del Git: «%s»" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Ha fallat el restabliment del Git" @@ -948,6 +937,11 @@ msgstr "S'ignorarà l'entrada FUNDING.yml més llarga de 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "S'ignorarà l'element incorrecte al manifest: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "S'ignorarà el {oldfile} obsolet, utilitzeu {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "S'ignorarà el paquet sense metadades: " @@ -967,11 +961,11 @@ msgstr "Inclou els fitxers .asc de signatura PGP a la rèplica" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" -msgstr "Inclou els registres de construcció al mirall" +msgstr "Inclou els registres de construcció en la rèplica" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" -msgstr "Inclou els arxius tar d'origen al mirall" +msgstr "Inclou els fitxers tarball del codi font en la rèplica" #: ../fdroidserver/metadata.py #, python-format @@ -1033,16 +1027,12 @@ msgstr "VercodeOperation no vàlid: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation no vàlid: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID d'aplicació {appid} invàlid" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "El booleà '%s' no és vàlid" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Llista de pics no vàlida" @@ -1155,6 +1145,11 @@ msgstr "Línia mal formada de serverwebroot:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "S'ha arribat a la profunditat màxima de recursivitat en el fitxer ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "La configuració de la rèplica per a {url} conté la clau «isPrimary»!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Reflecteix el dipòsit complet i l'arxiu, tots els tipus de fitxers." @@ -1184,6 +1179,10 @@ msgstr "No s'ha trobat cap SDK d'Android!" msgid "No attached devices found" msgstr "No s'ha trobat cap dispositiu adjunt" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "No s'han trobat dispositius per a `adb install`! Connecteu-ne algun." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "No hi ha cap empremta digital a l'URL." @@ -1244,7 +1243,6 @@ msgstr "No s'ha trobat cap certificat de signatura a {path}" msgid "No such package: %s" msgstr "No existeix el paquet: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1279,7 +1277,6 @@ msgstr "No hi ha res a fer per {appid}." msgid "Now set these in config.yml:" msgstr "Ara establiu-los a config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1295,28 +1292,30 @@ msgstr "El nom del paquet de l'OBB no coincideix amb un APK compatible:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" -msgstr "Màquina fora de línia, s'ometrà la generació del mirall git fins al `fdroid deploy`" +msgstr "Màquina fora de línia, s'ometrà la generació de la rèplica git fins al `fdroid deploy`" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Un dels elements de configuració 'github_releases' manca el valor 'packageNames'. s'està ometent..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Un dels elements de configuració 'github_releases' manca el valor 'projectUrl'. s'està ometent..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Un dels elements de configuració 'github_releases' manca el valor 'token'. s'està ometent..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Només s'admeten PNG i JPEG per als gràfics, s'ha trobat: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Imprimeix només les diferències amb la Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Només accepta una clau única «env»" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1326,10 +1325,6 @@ msgstr "Només processa aplicacions amb actualitzacions automàtiques" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Els mètodes de donació OpenCollective pertanyen al camp OpenCollective: field" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opcions" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Informe de sortida JSON a un fitxer anomenat segons l'APK." @@ -1387,6 +1382,11 @@ msgstr "Camí al magatzem de claus per a la clau de signatura del dipòsit" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimeix la variable secreta al terminal per a copiar/enganxar fàcilment" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "El mode privat s'ha habilitat d'acord amb el vostre codi regional ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1473,6 +1473,15 @@ msgstr "S'està llegint {apkfilename} des de la memòria cau" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualitza i cau les regles de l'escàner i les signatures de la xarxa" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "No se signarà «{path}», el fitxer existeix a les dues carpetes {dir1} i {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Elimina el fitxer tar d'origen i qualsevol APKs si s'ha verificat correctament." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "S'estan suprimint els fitxers especificats" @@ -1486,13 +1495,10 @@ msgstr "S'està suprimint {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Canvia el nom dels fitxers APK que no coincideixin amb package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "El mode d'actualització del RepoTrunk només té sentit en els dipòsits git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Restableix i crea un servidor de construcció nou, fins i tot si l'existent sembla estar bé." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1507,6 +1513,11 @@ msgstr "Canvia la mida de totes les icones que excedeixen la mida màxima del p msgid "Restrict output to warnings and errors" msgstr "Restringeix la sortida a avisos i errors" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "S'està tornant a baixar: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescriu tots els fitxers de metadades" @@ -1523,7 +1534,7 @@ msgstr "Executa en el diposit git que té canvis no publicats" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Executeu {cibase} per trobar -debug.apk. i omet repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1572,6 +1583,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "L'escàner ha trobat {} problema" msgstr[1] "L'escàner ha trobat {} problemes" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "S'està escanejant l'APK en cerca de blocs signants addicionals." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "S'està escanejant l'APK amb dexdump per a les classes no lliures conegudes." @@ -1692,6 +1707,10 @@ msgstr "Mode d'actualització de les etiquetes utilitzat a git-svn, però el rep msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mode de prova: posa la sortida només al directori tmp, i sempre construeix, fins i tot si la sortida ja existeix." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "No s'ha instal·lat el paquet de Python «qrcode» (p. ex. apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1764,9 +1783,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Per utilitzar awsbucket, awssecretkey i awsaccesskeyid també s'han d'establir a config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Per utilitzar awsbucket, awssecretkey i awsaccesskeyid també s'han d'establir a config.yml!" +msgstr "Per utilitzar rclone, rclone_config i awsbucket s'han d'establir a config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1789,11 +1807,6 @@ msgstr "Etiqueta de llicència inesperada \"{}\"! Utilitza només les etiquetes msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de llicència inesperada \"{}\"! Utilitza només les etiquetes de llicència configurades al fitxer de configuració" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Destinació inesperada de l'enllaç simbòlic: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1803,7 +1816,6 @@ msgstr "Entrada desconeguda {key} a {configname}" msgid "Unknown exception found!" msgstr "S'ha trobat una excepció desconeguda!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1841,6 +1853,7 @@ msgstr "Camp d'aplicació no reconegut '{fieldname}' a '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Indicador de construcció no reconegut '{build_flag}' a '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1871,11 +1884,6 @@ msgstr "Camí de l'escandelete no utilitzat: %s" msgid "Unused scanignore path: %s" msgstr "Camí de scanignore no utilitzat: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "S'està descomprimint a %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualitza la informació del dipòsit amb paquets nous" @@ -1889,6 +1897,7 @@ msgstr "Actualitza l'informe de transparència binari amb un nou URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData té un URL no vàlid: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1908,11 +1917,7 @@ msgstr "UpdateCheckData no és un URL vàlid: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode està establert però sembla que encara no s'han executat les revisions." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode està definit però sembla que encara no s'ha executat checkupdates" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName està establert a l'identificador d'aplicació conegut, es pot eliminar" @@ -1927,27 +1932,10 @@ msgstr "S'està pujant {apkfilename} a androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "S'està pujant {apkfilename} a virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Utilització" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Utilització: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Usa /HEAD en lloc de /master o /main per apuntar a un fitxer a la branca predeterminada" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Usa /HEAD en lloc de /master per a apuntar a un fitxer a la branca predeterminada" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Utilitzeu `fdroid update -c`per a crear-lo." @@ -1966,9 +1954,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "S'està utilitzant \"{path}\" per configurar s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "S'està utilitzant \"{path}\" per configurar s3cmd." +msgstr "S'està utilitzant \"{path}\" per a sincronitzar amb l'emmagatzematge remot." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1986,11 +1974,6 @@ msgstr "Ús de la signatura JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Utilitzant el jarsigner de Java, no es recomana verificar APKs! Useu l'apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Ús d'androguard de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2002,9 +1985,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "S'està utilitzant l'espai de claus existent \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "S'està utilitzant s3cmd per sincronitzar amb: {url}" +msgstr "S'està utilitzant el rclone per a sincronitzar-lo: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2027,15 +2010,28 @@ msgstr "Verifica la integritat dels paquets descarregats" msgid "Verifying index signature:" msgstr "Verificació de la signatura de l'índex:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "S'està verificant el paquet {path} l'apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clau de l'API VirusTotal no pot pujar fitxers més grans de 32 MB, utilitzeu {url} per pujar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa de possibles errors a les metadades" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Fitxer binari WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quan es configura per als índexs signats, només es creen els índexs no signats en aquesta fase" @@ -2048,6 +2044,14 @@ msgstr "Quan es mostra tot el «yamllint» del repositori està desactivat de ma msgid "When signing or verifying fails, exit with an error code." msgstr "Quan signar o verificar falla, sortiu amb un codi d'error." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Voleu baixar i instal·lar l'F-Droid.apk mitjançant adb? (SÍ/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Voleu baixar les aplicacions des de f-droid.org? (SÍ/no)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nom distint' utilitzat en generar claus" @@ -2060,6 +2064,11 @@ msgstr "Podeu utilitzar ANDROID_HOME per establir el camí al vostre SDK, és a msgid "ZIP file archive" msgstr "arxiu de fitxers ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb informa que {serial} és: «{status}»!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2070,19 +2079,15 @@ msgstr "s'està afegint el fitxer d'identitat a {path}" msgid "adding to {name}: {path}" msgstr "s'està afegint a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opció ambigua: %(option)s podria correspondre amb %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opció ambigua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner en build-tools;{version} passa APKs sense sigantures v3 vàlides, ingnorant." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2092,11 +2097,13 @@ msgstr "No s'ha trobat l'apksigner! No es poden signar o verificar els APK moder msgid "apksigner not found, it's required for signing!" msgstr "No s'ha trobat l'apksigner, és necessari per signar!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de l'aplicació del fitxer en què s'ha d'operar" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2107,8 +2114,6 @@ msgstr "ID de l'aplicació amb versió opcionalCode en el formulari APPID[:VERCO msgid "archive_url needs to end with /archive" msgstr "archive_url necessita acabar amb /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2127,7 +2132,7 @@ msgstr "s'està provant la connexió SSH per comprovar la clau de desplegament:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "no es pot analitzar l'especificació de la «scrlib» (no és una cadena): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no es pot obrir '%(filename)s': %(error)s" @@ -2141,14 +2146,10 @@ msgstr "no es pot obrir l'URL no-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "no s'han pogut trobar els srclibs requerits: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "no es poden tenir múltiples arguments de subanalitzador" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2167,14 +2168,6 @@ msgstr "s'està clonant {url}" msgid "commands from plugin modules:" msgstr "ordres dels mòduls del connector:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complex" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2205,10 +2198,6 @@ msgstr "no s'ha pogut analitzar l'especificació «srclib» (no s'ha especificat msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "no s'ha pogut analitzar l'especificació «srclib» (no s'ha especificat cap referència): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "no s'ha pogut analitzar l'especificació de l'srclib (massa signes '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2226,15 +2215,13 @@ msgstr "s'està suprimint: dipòsit/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "fitxer de dependència sense blocatge" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "s'ha desplegat el registre de procés {path} a {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2252,8 +2239,6 @@ msgstr "ha fallat la baixada de signatures de l'escàner des de '{}'" msgid "executable binary, possibly code" msgstr "binari executable, possiblement codi" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2261,20 +2246,14 @@ msgid_plural "expected %s arguments" msgstr[0] "s'esperava l'argument %s" msgstr[1] "s'esperaven els arguments %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "s'esperava almenys un argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "s'esperava com a màxim un argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "s'esperava un argument" @@ -2287,10 +2266,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "recupera l'última versió de les signatures del web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "coma flotant" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "força que els errors de metadades (predeterminat) siguin avisos o s'ignorin." @@ -2303,8 +2278,6 @@ msgstr "Ha fallat el clon de «git svn»" msgid "gzip file archive" msgstr "arxiu de fitxers gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2318,35 +2291,21 @@ msgstr "index-v1 ha de tenir una signatura, utilitzeu `fdroid signindex` per a c msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 ha de tenir una signatura, utilitzeu `fdroid signindex`per a crear-la!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "enter" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor %(type)s no vàlid: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "elecció no vàlida: %(value)r (trieu de %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "el valor conflict_resolution no és vàlid: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2377,15 +2336,13 @@ msgstr "local_copy_dir ha de ser directori, no un fitxer!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" -msgstr "el mirall '%s' no acaba amb 'fdroid'!" +msgstr "La rèplica «%s» no acaba amb «fdroid»!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "miralls establerts dues vegades, a config.yml i {path}!" +msgstr "rèpliques establertes dues vegades, a config.yml i {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "els arguments mútuament excloents han de ser opcionals" @@ -2404,30 +2361,15 @@ msgstr "no hi ha cap \"icona\" a {appid}" msgid "no APK supplied" msgstr "no s'ha subministrat cap APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "opció inexistent: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "no s'ha trobat cap informació de versió!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "no s'ha trobat cap informació de versió" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "no està permès amb l'argument %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2437,72 +2379,6 @@ msgstr "es requereix un dels arguments %s" msgid "only accepts strings, lists, and tuples" msgstr "només accepta cadenes, llistes i tuples" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opció %s: Si realment voleu instal·lar totes les aplicacions signades, utilitzeu --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "opció %s: valor %s no vàlid: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opció %s: elecció no vàlida: %r (trieu de %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opció -%s no reconeguda" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opció -%s demana un argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "l'opció --%s no pot tenir arguments" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "l'opció --%s no té un prefix unívoc" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opció --%s not reconeguda" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "l'opció --%s requereix un argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "arguments opcionals" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opcions" @@ -2512,8 +2388,6 @@ msgstr "opcions" msgid "overwriting existing {path}" msgstr "s'està sobreescrivint {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "arguments posicionals" @@ -2546,19 +2420,15 @@ msgstr "repo_url ha d'acabar amb /repo" msgid "rsync is missing or broken: {error}" msgstr "falta el rsync o està trencat: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml no està instal·lat, no es poden escriure metadades." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincronitza els índexs {path} a {url} i suprimeix" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sincronitza els índexs {path} a {url} i suprimeix" +msgstr "s3cmd sincronitza els índexs de {path} a {url} i esborra els suprimits" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2573,17 +2443,7 @@ msgstr "serverwebroot: el camí no acaba amb \"fdroid\", potser volíeu dir una msgid "shared library" msgstr "biblioteca compartida" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostra el número de versió del programa i surt" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra aquest missatge d'ajuda i surt" @@ -2617,29 +2477,25 @@ msgstr "biblioteca estàtica" msgid "supplied reference binary has allowed signer {signer}" msgstr "el binari de referència proporcionat ha permès el signant {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "els arguments següents són obligatoris: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "vertader" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "cadena d'opcions inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "analitzador desconegut %(parser_name)r (opcions: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2650,9 +2506,7 @@ msgstr "arguments desconeguts: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisos a «{config_file}» insegurs (hauria de ser 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "us: " @@ -2665,6 +2519,10 @@ msgstr "s'està utilitzant libcloud d'Apache per sincronitzar amb {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com és limitant de velocitat, esperant tornar-ho a provar..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sí" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2677,21 +2535,19 @@ msgstr[1] "{0} aplicacions, {1} àlies de claus" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) no té metadades!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} té múltiples fitxers {name}, sembla un exploit a la clau mestra!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "L'AndroidManifest.xml de {apkfilename} té una data incorrecta: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} no té nom! S'està utilitzant l'identificador de l'aplicació." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2712,7 +2568,6 @@ msgstr "{appid} té tant APK com fitxers: {files}" msgid "{appid} is missing {name}" msgstr "{appid} no té {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2753,10 +2608,10 @@ msgstr "{file} està en blanc o corromput!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" no existeix! Comproveu \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} és obsolet, utilitzeu {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} és un duplicat de {path2}, elimineu-ne un!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2778,6 +2633,11 @@ msgstr "{path} té una signatura de fitxer incorrecta \"{pattern}\", possible Ja msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} ha estat marcat pel virustotal {count} vegades:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} no té l'emprempta correcta ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/cs/LC_MESSAGES/fdroidserver.po b/locale/cs/LC_MESSAGES/fdroidserver.po index 78c22068..351d8885 100644 --- a/locale/cs/LC_MESSAGES/fdroidserver.po +++ b/locale/cs/LC_MESSAGES/fdroidserver.po @@ -7,20 +7,22 @@ # Fjuro , 2022, 2023. # Daniel Hejduk , 2023. # Fjuro , 2024. +# Jakub Boukal , 2024. +# Fjuro , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-15 04:32+0000\n" -"Last-Translator: Fjuro \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-26 10:00+0000\n" +"Last-Translator: Fjuro \n" "Language-Team: Czech \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: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -42,60 +44,47 @@ msgstr "" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" -msgstr "\"%s/\" nemá žádný odpovídající soubor metadat!" +msgstr "„%s/“ nemá žádný odpovídající soubor metadat!" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Klíč „isPrimary“ by neměl být přidán k zrcadlům!" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "\"local_copy_dir\" {path} neexistuje!" +msgstr "„local_copy_dir“ {path} neexistuje!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." -msgstr "aplikace \"{apkfilename}\" je již nainstalována na {dev}." - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" obsahuje zastaralý název {name} ({version})" +msgstr "Aplikace „{apkfilename}“ je již nainstalována na {dev}." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" -msgstr "\"{path}\" obsahuje nedávné {name} ({version})" +msgstr "„{path}“ obsahuje nedávné {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" -msgstr "\"{path}\" existuje, ale s3cmd není nainstalován!" +msgstr "„{path}“ existuje, ale s3cmd není nainstalován!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" -msgstr "\"{path}\" není podporovaný formát souboru (použijte: metadata/*.yml)" +msgstr "„{path}“ není podporovaný formát souboru (použijte: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "\"{path}\" je podepsáno klíčem, který není povolen:" +msgstr "„{path}“ je podepsáno klíčem, který není povolen:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" -msgstr "\"{url}\" není platná adresa URL!" +msgstr "„{url}“ není platná adresa URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "možnost %(option)s vyžaduje %(number)d argument" -msgstr[1] "možnost %(option)s vyžaduje %(number)d argumenty" -msgstr[2] "možnost %(option)s vyžaduje %(number)d argumentů" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -111,14 +100,6 @@ msgstr "Nepodařilo se podepsat nebo ověřit %d souborů APK!" msgid "%d problems found" msgstr "nalezeno %d problémů" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [možnosti]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -139,80 +120,68 @@ msgstr "%s má špatný kód SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s není akceptované pole sestavení" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "možnost %s nepřebírá hodnotu" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" -msgstr "'keypass' nebyl nalezen v souboru config.yml!" +msgstr "„keypass“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" -msgstr "'keystore' je NONE a 'smartcardoptions' je prázdný!" +msgstr "„keystore“ je NONE a „smartcardoptions“ je prázdný!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" -msgstr "'keystore' nebyl nalezen v souboru config.yml!" +msgstr "„keystore“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" -msgstr "'keystorepass' nebyl nalezen v souboru config.yml!" +msgstr "„keystorepass“ nebyl nalezen v souboru config.yml!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" -msgstr "'repo_keyalias' nebyl nalezen v config.yml!" +msgstr "„repo_keyalias“ nebyl nalezen v souboru config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "'povinné' je Neplatný argument pro pozicials" +msgstr "„required je neplatný argument pro positionals" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" -msgstr "'sdk_path' není nastaven v souboru config.yml!" +msgstr "„sdk_path“ není nastavena v souboru config.yml!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" -msgstr "'{aapt}' je příliš starý, fdroid vyžaduje build-tools-{version} nebo novější!" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' bude v náhodném pořadí! Pokud je pořadí důležité, použijte závorky () nebo []!" +msgstr "„{aapt}“ je příliš starý, fdroid vyžaduje build-tools-{version} nebo novější!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" -msgstr "'{path}' nepodařilo se provést!" +msgstr "„{path}“ se nepodařilo spustit!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" -msgstr "'{path}' má neplatný formát, měl by to být slovník!" +msgstr "„{path}“ má neplatný formát, měl by to být slovník!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" -msgstr "'{value}' není platný {field} v {appid}. Vzor regulárního výrazu: {pattern}" +msgstr "„{value}“ není platný {field} v {appid}. Vzor regex: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" -msgstr "'{value}' není platný {field}, měl by to být {pattern}" +msgstr "„{value}“ není platný {field}, měl by to být {pattern}" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request beží pouze u jednoho appid!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" -msgstr "...kontrola selhala pro {appid} : {error}" +msgstr "...checkupdate selhal pro {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() není definováno" @@ -232,20 +201,20 @@ msgstr "Podpisy souborů APK mají rozdílné certifikáty v {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" -msgstr "Přidejte podpisy PGP pomocí GnuPG pro balíčky v repo" +msgstr "Přidat podpisy PGP pomocí GnuPG pro balíčky v repozitáři" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" -msgstr "Přidejte podpisový klíč repo k nepodepsanému repo" +msgstr "Přidat podpisový klíč repozitáře k nepodepsanému repozitáři" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" -msgstr "Přidání souborů metadat kostry pro soubory APK, které chybí" +msgstr "Přidat souborů metadat kostry pro soubory APK, u kterých chybí" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" -msgstr "Přidání nového repozitáře pouze pro {name}" +msgstr "Přidávám nový repozitář pouze pro {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" @@ -265,7 +234,7 @@ msgstr "Také zrcadlit celou sekci archivu" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" -msgstr "Také varovat před problémy s formátování, jako rewritemeta -l" +msgstr "Také varovat před problémy s formátováním, jako rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" @@ -287,12 +256,12 @@ msgstr "Android SDK nebylo nalezeno v {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" -msgstr "Android SDK s cestou '{path}' neexistuje!" +msgstr "Android SDK s cestou „{path}“ neexistuje!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" -msgstr "Cesta Android SDK '{path}' není adresář!" +msgstr "Cesta Android SDK „{path}“ není adresář!" #: ../fdroidserver/common.py #, python-brace-format @@ -303,18 +272,14 @@ msgstr "Nástroj Android SDK {cmd} nenalezen!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikace má binární soubory, ale nemá odpovídající AllowedAPKSigningKeys pro připnutí certifikátu." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Aplikace má NoSourceSince nebo ArchivePolicy \"0 versions\", ale AutoUpdateMode nebo UpdateCheckMode nejsou None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Aplikace má NoSourceSince nebo ArchivePolicy \"0 versions\" nebo 0, ale AutoUpdateMode nebo UpdateCheckMode nejsou None" +msgstr "Aplikace má NoSourceSince nebo ArchivePolicy „0 versions“ nebo 0, ale AutoUpdateMode nebo UpdateCheckMode nejsou None" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" -msgstr "Aplikace je v repozitáři '{repo}' ale má odkaz na {url}" +msgstr "Aplikace je v repozitáři „{repo}“ ale má odkaz na {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." @@ -327,31 +292,38 @@ msgstr "Přidání .git není nutné" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" -msgstr "Archivování {apkfilename} s neplatným podpisem!" +msgstr "Archivuji {apkfilename} s neplatným podpisem!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode s UpdateCheckMode: HTTP musí mít vzor." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Automatické ne na všechny výzvy." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Automatické ano na všechny výzvy." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" -msgstr "Nesprávný typ záznamu \"{mirrortype}\" v konfiguraci zrcadel: {mirror}" +msgstr "Nesprávný typ záznamu „{mirrortype}“ v konfiguraci zrcadel: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Základní adresa URL pro zrcadlení, může obsahovat klíč pro podepisování indexu pomocí řetězce dotazu: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" -msgstr "Větev '{branch}' použitá jako revize v sestavení '{versionName}'" +msgstr "Větev „{branch}“ použitá jako revize v sestavení „{versionName}“" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" -msgstr "Větev '{branch}' použitá jako revize v srclib '{srclib}'" +msgstr "Větev „{branch}“ použitá jako revize v srclib „{srclib}“" #: ../fdroidserver/update.py #, python-brace-format @@ -368,7 +340,7 @@ msgstr "Sestavit všechny dostupné aplikace" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" -msgstr "Sestavení vygenerováno pomocí `fdroid import` - odeberte řádek se zakázáním po dokončení" +msgstr "Sestavení vygenerováno pomocí `fdroid import` - odeberte řádek se zákazem, jakmile budete připraveni" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" @@ -394,16 +366,23 @@ msgstr[0] "Nelze sestavit kvůli {} chybě při skenování" msgstr[1] "Nelze sestavit kvůli {} chybám při skenování" msgstr[2] "Nelze sestavit kvůli {} chybám při skenování" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Chyba při čtení {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nelze přepsat „{path}“" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorie „%s“ není platná" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategorie nejsou nastavené" @@ -415,7 +394,7 @@ msgstr "Kategorie „{category}“ je definována, ale není používána u žá #: ../fdroidserver/__main__.py msgid "Check for updates to applications" -msgstr "Zkontrolujte aktualizace aplikací" +msgstr "Zkontrolovat aktualizace aplikací" #: ../fdroidserver/update.py #, python-brace-format @@ -426,6 +405,10 @@ msgstr "Kontrola archivace u {appid} - apks:{integer}, keepversions:{keep}, arch msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Čistá aktualizace - nepoužívat mezipaměti, znovu zpracovat všechny soubory APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Obarvit výstup protokolu" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Seznam kategorií oddělený čárkami." @@ -433,35 +416,36 @@ msgstr "Seznam kategorií oddělený čárkami." #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" -msgstr "Příkaz '%s' nebyl rozpoznán.\n" +msgstr "Příkaz „%s“ nebyl rozpoznán.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" msgstr "Odeslat změny" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Commitněte změny, proveďte a push a poté vytvořte žádost o sloučení" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" -msgstr "Konfliktní definice \"{field}\" mezi soubory .yml a lokalizovanými soubory:" +msgstr "Konfliktní definice „{field}“ mezi soubory .yml a lokalizovanými soubory:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." -msgstr "Konfliktní argumenty: '--verbose' a '--quiet' nelze zadat současně." - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Konfliktní konfigurační soubory! Používám {newfile}, ignoruji {oldfile}!" +msgstr "Konfliktní argumenty: „--verbose“ a „--quiet“ nelze zadat současně." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" -msgstr "Ve vašem systému se nepodařilo najít příkaz '{command}'" +msgstr "Ve vašem systému se nepodařilo najít příkaz „{command}“" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nepodařilo se najít kód poslední verze" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nepodařilo se najít název poslední verze" @@ -479,11 +463,12 @@ msgstr "Nepodařilo se otevřít APK {path} pro analýzu: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" -msgstr "Nepodařilo se zpracovat velikost „{size}“, nesprávný typ „{type}“" +msgstr "Nepodařilo se parsovat velikost „{size}“, nesprávný typ „{type}“" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" -msgstr "Nedaří se nalézt ID aplikace" +msgstr "Nepodařilo se nalézt ID aplikace" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" @@ -491,7 +476,7 @@ msgstr "Nepodařilo se najít žádné informace o verzi" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" -msgstr "Nedaří se nalézt identif. balíčku" +msgstr "Nepodařilo se nalézt ID balíčku" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" @@ -507,6 +492,11 @@ msgstr "Vytvořen nový kontejner „{name}“" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Vytváření „{path}“ pro konfiguraci s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Vytvářím prázdný {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Vytváření adresáře protokolů" @@ -543,7 +533,7 @@ msgstr "DEBUG_KEYSTORE není nastaven nebo je hodnota neúplná" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" -msgstr "Odstraňte soubory APK a/nebo OBB bez metadat z úložiště" +msgstr "Odstranit soubory APK a/nebo OBB bez metadat z úložiště" #: ../fdroidserver/deploy.py #, python-brace-format @@ -563,17 +553,12 @@ msgstr "Mazání neznámého souboru: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" -msgstr "Popis ‚%s‘ je pouze souhrn aplikace" +msgstr "Popis „%s“ je pouze souhrn aplikace" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" msgstr "Popis má duplicitní řádek" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Popis má seznam (%s) ale není opatřen odrážkami (*) ani očíslován (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -591,7 +576,7 @@ msgstr "Mysleli jste {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" -msgstr "Nepřidávat ‚disable:‘ k vygenerovaným položkám sestavení" +msgstr "Nepřidávat „disable:“ k vygenerovaným položkám sestavení" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" @@ -616,21 +601,20 @@ msgstr "Nevytvářet zdrojový tarball, užitečné při testování sestavení" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" -msgstr "Neobnovovat repozitář, užitečné při testování bez připojení k internetu" +msgstr "Neobnovovat repozitář, užitečné při testování sestavení bez připojení k internetu" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" msgstr "Nepoužívat kontrolní součty rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Stáhnout F-Droid.apk pomocí zrcadel, která do sítě vypouštějí méně informací" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Stáhnout kompletní mirrory malých repozitářů" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Stahování %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Stahování repozitáře již jednou selhalo, nezkouším to znovu." @@ -643,17 +627,17 @@ msgstr "Stahování {url} selhalo. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" -msgstr "Duplicitní prohlášení Anti-Vlastností na adrese {path} bylo ignorováno!" +msgstr "Duplicitní prohlášení anti-funkcí v {path} bylo ignorováno!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" -msgstr "Duplicitní záznam \"%s\" v konfiguraci zrcadel!" +msgstr "Duplicitní záznam „%s“ v konfiguraci zrcadel!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" -msgstr "Duplicitní odkaz v '{field}': {url}" +msgstr "Duplicitní odkaz v „{field}“: {url}" #: ../fdroidserver/common.py #, python-format @@ -664,14 +648,6 @@ msgstr "CHYBA: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "CHYBA: Podpříkaz „server“ byl odebrán, použijte „deploy“!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"CHYBA: tento příkaz by nikdy neměl být použit k zrcadlení f-droid.org!\n" -"Celý mirror f-droid.org vyžaduje více než 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "CHYBA: nepodporovaný typ CI, opravy vítány!" @@ -679,22 +655,32 @@ msgstr "CHYBA: nepodporovaný typ CI, opravy vítány!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" -msgstr "CHYBA: nepodporovaný git host \"%s\", opravy vítány!" +msgstr "CHYBA: nepodporovaný git host „%s“, opravy vítány!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "CHYBA: {key} v {path} není „archive“ nebo „repo“!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "CHYBA: {key} není platný klíč!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "CHYBA: hodnota klíče {key} by měla být typu {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "CHYBA: {key}:{subkey} v {path} není v povolených klíčích: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." -msgstr "Kódování je nastaveno na ‚{enc}‘ fdroid může mít problémy s kódováním. Pro dosažení nejlepších výsledků jej prosím nastavte na ‚UTF-8‘." +msgstr "Kódování je nastaveno na „{enc}“, fdroid může mít problémy s kódováním. Pro dosažení nejlepších výsledků jej prosím nastavte na „UTF-8“." #: ../fdroidserver/init.py #, python-format @@ -710,9 +696,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Proměnná prostředí {var} z {configname} není nastavena!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Proměnná prostředí {{env: {var}}} není nastavena!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Chyba při nasazení „github_releases“, {} není k dispozici. (Možná budete muset nejprve spustit `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -730,6 +721,10 @@ msgstr "Extrahovat metadata aplikace ze zdrojového repozitáře" msgid "Extract signatures from APKs" msgstr "Extrahovat podpisy ze souborů APK" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk se nepodařilo stáhnout z žádného známého zdroje!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -738,7 +733,7 @@ msgstr "Chyba při kopírování {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" -msgstr "Chyba při načítání podpisů pro ‚{apkfilename}‘: {error}" +msgstr "Chyba při načítání podpisů pro „{apkfilename}“: {error}" #: ../fdroidserver/update.py #, python-brace-format @@ -753,7 +748,7 @@ msgstr "Chyba při změně velikosti {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" -msgstr "Nepodařilo se vytvořit bucket S3: {url}" +msgstr "Chyba při vytváření bucketu S3: {url}" #: ../fdroidserver/update.py #, python-brace-format @@ -772,7 +767,7 @@ msgstr "Nepodařilo se získat otisk podpisového klíče APK" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" -msgstr "Nepodařilo se nainstalovat ‚{apkfilename}‘ na {dev}: {error}" +msgstr "Nepodařilo se nainstalovat „{apkfilename}“ na {dev}: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" @@ -786,7 +781,7 @@ msgstr "Načteno buildserverid z VM: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" -msgstr "Načteny podpisy pro ‚{apkfilename}‘ -> ‚{sigdir}‘" +msgstr "Načteny podpisy pro „{apkfilename}“ -> „{sigdir}“" #: ../fdroidserver/update.py #, python-brace-format @@ -799,10 +794,6 @@ msgstr "Soubor zmizel při jeho zpracování: {path}" msgid "Finished" msgstr "Dokončeno" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Metody darování Flattr patří do pole „FlattrID:“" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Zakázané značky HTML" @@ -834,7 +825,6 @@ msgstr "Nalezeno špatné financování souboru „{path}“ pro „{name}“:" msgid "Found invalid appids in arguments" msgstr "V argumentech nalezena neplatná id aplikací" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "U některých aplikací nalezeny neplatné versionCodes" @@ -842,7 +832,7 @@ msgstr "U některých aplikací nalezeny neplatné versionCodes" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" -msgstr "V {path} nalezeno několik podpisových bloků JAR" +msgstr "V {path} nalezeno několik souborů podpisových bloků JAR" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" @@ -889,7 +879,7 @@ msgstr "Vygenerována kostra metadat pro {appid}" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" -msgstr "Git checkout '%s' se nezdařil" +msgstr "Git checkout „%s“ se nezdařil" #: ../fdroidserver/common.py msgid "Git clean failed" @@ -899,15 +889,13 @@ msgstr "Git clean se nezdařil" msgid "Git fetch failed" msgstr "Git fetch se nezdařil" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune se nezdařil" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head se nezdařil: „%s“" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset se nezdařil" @@ -940,7 +928,7 @@ msgstr "Pokud toto nahrání selže, zkuste manuálně nahrát na {url}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." -msgstr "Ignorování pole ‚{field}‘ v metadatech ‚{metapath}‘, protože je zastaralé." +msgstr "Ignorování pole „{field}“ v metadatech „{metapath}“, protože je zastaralé." #: ../fdroidserver/update.py #, python-format @@ -952,6 +940,11 @@ msgstr "Ignorování vstupu FUNDING.yml delšího než 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorování nesprávného prvku v manifestu: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Ignoruji zastaralý {oldfile}, použijte {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorování balíčku bez metadat: " @@ -963,7 +956,7 @@ msgstr "Ignorování zastaralých dat mezipaměti {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" -msgstr "Zahrnout soubory APK, které jsou podepsané zakázanými algoritmy jako MD5" +msgstr "Zahrnout soubory APK, které jsou podepsané vypnutými algoritmy jako MD5" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" @@ -997,7 +990,7 @@ msgstr "Instalace všech dostupných podepsaných aplikací" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" -msgstr "Nainstalujte vestavěné balíčky na zařízení" +msgstr "Nainstalovat vestavěné balíčky na zařízení" #: ../fdroidserver/install.py #, python-format @@ -1007,11 +1000,11 @@ msgstr "Instalace %s..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." -msgstr "Instalace ‚{apkfilename}‘ na {dev}..." +msgstr "Instalace „{apkfilename}“ na {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" -msgstr "Interakce se serverem repo HTTP" +msgstr "Interakce se serverem HTTP repozitáře" #: ../fdroidserver/update.py msgid "Invalid APK" @@ -1037,16 +1030,12 @@ msgstr "Neplatný VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Neplatný VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Neplatné ID aplikace {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Neplatná logická hodnota ‚%s‘" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Neplatný seznam s odrážkami" @@ -1069,17 +1058,17 @@ msgstr "Neplatné přesměrování na jiný než HTTPS: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" -msgstr "Neplatná metadata scrlib: ‚{file}‘ neexistuje" +msgstr "Neplatná metadata scrlib: „{file}“ neexistuje" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" -msgstr "Neplatná srclib metadata: nelze parsovat ‚{file}‘" +msgstr "Neplatná srclib metadata: nelze parsovat „{file}“" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" -msgstr "Neplatná srclib metadata: neznámý klíč ‚{key}‘ v ‚{file}‘" +msgstr "Neplatná srclib metadata: neznámý klíč „{key}“ v „{file}“" #: ../fdroidserver/common.py #, python-brace-format @@ -1128,15 +1117,15 @@ msgstr "V AllowedAPKSigningKeys je použit známý ladicí klíč: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" -msgstr "Poslední použitá revize ‚{commit}‘ vypadá jako značka, ale UpdateCheckMode je ‚{ucm}‘" +msgstr "Poslední použitá revize „{commit}“ vypadá jako značka, ale UpdateCheckMode je „{ucm}“" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" -msgstr "Darovací metody Liberapay patří do pole Liberapay: pole" +msgstr "Darovací metody Liberapay patří do pole „Liberapay:“" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" -msgstr "Seznam souborů, které budou přeformátovány (zkušební provoz)" +msgstr "Seznam souborů, které budou přeformátovány (zkušební spuštění)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" @@ -1159,6 +1148,11 @@ msgstr "Poškozený řádek serverwebroot:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Dosažena maximální hloubka rekurze v souboru ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Konfigurace zrcadla {url} obsahuje klíč „isPrimary“!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Zrcadlení celého repozitáře a archivu, všechny typy souborů." @@ -1169,11 +1163,11 @@ msgstr "Chybějící výstupní adresář" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" -msgstr "Přesun deklarací Anti-Features do lokalizovaných souborů:" +msgstr "Přesun deklarací anti-funkcí do lokalizovaných souborů:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" -msgstr "V souboru config.yml není nastaven \"repo_pubkey\" ani \"keystorepass\"" +msgstr "V souboru config.yml není nastaven „repo_pubkey“ ani „keystorepass“" #: ../fdroidserver/verify.py #, python-format @@ -1188,9 +1182,13 @@ msgstr "Nebylo nalezeno Android SDK!" msgid "No attached devices found" msgstr "Nebyla nalezena žádná připojená zařízení" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Nenalezena žádná zařízení pro `adb install`! Zapojte prosím alespoň jedno." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." -msgstr "V adrese URL není otisk prstu." +msgstr "V adrese URL není otisk." #: ../fdroidserver/common.py msgid "No git submodules available" @@ -1227,7 +1225,7 @@ msgstr "Není nastavena žádná možnost! Upravte svůj config.yml a nastavte a #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "Nebyly zadány žádné balíčky" +msgstr "Nebyly upřesněny žádné balíčky" #: ../fdroidserver/install.py #, python-format @@ -1248,7 +1246,6 @@ msgstr "Nenalezeny žádné podpisové certifikáty v {path}" msgid "No such package: %s" msgstr "Žádný takový balíček: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1268,7 +1265,7 @@ msgstr "Nenalezeny žádné informace o verzi." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" -msgstr "Neplatná definice velikosti: \"{}\"" +msgstr "Neplatná definice velikosti: „{}“" #: ../fdroidserver/signindex.py msgid "Nothing to do" @@ -1283,7 +1280,6 @@ msgstr "Pro {appid} není co dělat." msgid "Now set these in config.yml:" msgstr "Nyní nastavte následující v config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1291,7 +1287,7 @@ msgstr "Soubor OBB má novější versionCode({integer}) než jakýkoli APK:" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" -msgstr "Název souboru OBB musí začínat s \"main.\" nebo \"patch.\":" +msgstr "Název souboru OBB musí začínat s „main.“ nebo „patch.“:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" @@ -1299,28 +1295,30 @@ msgstr "Packagename souboru OBB neodpovídá podporovanému souboru APK:" #: ../fdroidserver/deploy.py msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" -msgstr "Offline počítač, přeskočení generování mirroru git až do `fdroid deploy`" +msgstr "Offline počítač, přeskakuji generování mirroru gitu až do `fdroid deploy`" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „packageNames“. Přeskakuji ..." #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „projectUrl“. Přeskakuji ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Jedné z položek konfigurace „github_releases“ chybí hodnota „token“. Přeskakuji ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Pro grafiku jsou podporovány pouze formáty PNG a JPEG, nalezeno: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Zobrazit pouze rozdíly s Obchodem Play" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Přijímá pouze jediný klíč „env“" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1328,11 +1326,7 @@ msgstr "Zpracovat pouze aplikace s automatickými aktualizacemi" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" -msgstr "Darovací metody OpenCollective patří do pole OpenCollective: pole" - -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Možnosti" +msgstr "Darovací metody OpenCollective patří do pole „OpenCollective:“" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." @@ -1365,7 +1359,7 @@ msgstr "Balíček „{appid}“ již existuje" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" -msgstr "Parsování manifestu v ‚{path}‘" +msgstr "Parsování manifestu v „{path}“" #: ../fdroidserver/common.py msgid "Password required with username" @@ -1391,6 +1385,11 @@ msgstr "Cesta k úložišti klíčů pro podpisový klíč repozitáře" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Zobrazit tajnou proměnnou v terminálu pro jednoduché kopírování/vložení" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Režim ochrany osobních údajů byl povolen na základě vaší lokality ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1399,21 +1398,21 @@ msgstr "Problém se souborem ZIP: %s, chyba %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" -msgstr "Problém s xml v '{path}'" +msgstr "Problém s xml v „{path}“" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" -msgstr "Zpracovat auto-aktualizace" +msgstr "Zpracovávat auto-aktualizace" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" -msgstr "Zpracování {apkfilename}" +msgstr "Zpracovávání {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" -msgstr "Zpracování {appid}" +msgstr "Zpracovávání {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" @@ -1447,26 +1446,26 @@ msgstr "Odesílání do {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" -msgstr "Rychle spusťte nové úložiště" +msgstr "Rychle vytvořit nový repozitář" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" -msgstr "Přečtěte si všechny soubory metadat a ukončete" +msgstr "Přečíst všechny soubory metadat a ukončit program" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" -msgstr "Čtení ‚{config_file}‘" +msgstr "Čtení „{config_file}“" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" -msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK nepatné: ‚{apkfilename}‘" +msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK neplatné: „{apkfilename}“" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" -msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK nepatné: ‚{apkfilename}‘" +msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK neplatné: „{apkfilename}“" #: ../fdroidserver/update.py #, python-brace-format @@ -1477,6 +1476,15 @@ msgstr "Čtení {apkfilename} z mezipaměti" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Obnovit a uložit pravidla a podpisy skeneru ze sítě do mezipaměti" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Odmítám podespat „{path}“, soubor existuje ve složce {dir1} i {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Odstranit zdrojový tarball a všechny soubory APK při úspěšném ověření." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Odebírání určených souborů" @@ -1488,15 +1496,12 @@ msgstr "Odebírání {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" -msgstr "Přejmenujte soubory APK, které se neshodují s package.name_123.apk" +msgstr "Přejmenovat soubory APK, které se neshodují s package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Režim aktualizace RepoTrunk má smysl pouze v repozitářích git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Resetovat a vytvořit zcela nový server sestavení, i když se stávající zdá být v pořádku." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1511,6 +1516,11 @@ msgstr "Změnit velikost všech ikon přesahujících maximální velikost pixel msgid "Restrict output to warnings and errors" msgstr "Omezit výstup na varování a chyby" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Opakování nezdařeného stahování: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Přepsat všechny soubory metadat" @@ -1518,7 +1528,7 @@ msgstr "Přepsat všechny soubory metadat" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "Přepisování ‚{appid}‘" +msgstr "Přepisování „{appid}“" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" @@ -1527,7 +1537,7 @@ msgstr "Spustit v repozitáři git s nezveřejněnými změnami" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Spustit přes {cibase} pro nalezení -debug.apk. a přeskočit repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1553,7 +1563,7 @@ msgstr "Oskenovat výsledná APK, zda neobsahují známé nesvobodné třídy." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" -msgstr "Naskenujte zdrojový kód balíčku" +msgstr "Skenovat zdrojový kód balíčku" #: ../fdroidserver/scanner.py #, python-brace-format @@ -1577,6 +1587,10 @@ msgstr[0] "Skener našel {} problém" msgstr[1] "Skener našel {} problémy" msgstr[2] "Skener našel {} problémů" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Skenování APK na další podpisové bloky." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Skenování APK pomocí dexdump na známé nesvobodné třídy." @@ -1610,15 +1624,15 @@ msgstr "Nastavení limitu otevřených souborů se nezdařilo: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" -msgstr "Nastavení časového limitu {0} sek pro toto sestavení" +msgstr "Nastavení časového limitu {0} sekund pro toto sestavení" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" -msgstr "Podepsat a umístit balíčky v repo" +msgstr "Podepsat a umístit balíčky do repozitáře" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" -msgstr "Podepsat indexy vytvořené pomocí aktualizace -- nosign" +msgstr "Podepsat indexy vytvořené pomocí update --nosign" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" @@ -1627,7 +1641,7 @@ msgstr "Přeskočení kontroly zdrojového kódu binárních souborů a dalšíc #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" -msgstr "Přeskakování ‚{apkfilename}‘ s neplatným podpisem!" +msgstr "Přeskakování „{apkfilename}“ s neplatným podpisem!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format @@ -1673,7 +1687,7 @@ msgstr "Odstraňování tajemného podpisu z {apkfilename}" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" -msgstr "Shrnutí ‚%s‘ je pouze název aplikace" +msgstr "Shrnutí „%s“ je pouze název aplikace" #: ../fdroidserver/lint.py #, python-brace-format @@ -1697,6 +1711,10 @@ msgstr "Režim aktualizace pomocí značek se používá v git-svn, ale repozit msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Testovací režim - výstup se ukládá pouze do adresáře tmp a vždy se sestavuje, i když výstup již existuje." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Python balíček „qrcode“ není nainstalován (např. apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1717,7 +1735,7 @@ msgstr "Soubor, který má být zahrnut do repozitáře (cesta nebo glob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." -msgstr "Otisk prstu repozitáře se neshoduje." +msgstr "Otisk repozitáře se neshoduje." #: ../fdroidserver/deploy.py #, python-brace-format @@ -1756,10 +1774,10 @@ msgid "" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" -"Chcete-li dokončit nastavení, přidejte soubory APK na adresu \"%s\".\n" +"Chcete-li dokončit nastavení, přidejte soubory APK na adresu „%s“.\n" "poté spusťte příkaz „fdroid update -c; fdroid update“. Možná budete chtít také upravit\n" -"„config.yml“, abyste nastavili adresu URL, název repozitáře a další údaje. Měli byste také nastavit\n" -"podpisový klíč (dočasný klíč již mohl být vygenerován automaticky).\n" +"„config.yml“, abyste nastavili adresu URL, název repozitáře a další údaje. Měli byste také\n" +"nastavit podpisový klíč (dočasný klíč již mohl být vygenerován automaticky).\n" "\n" "Další informace: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "a https://f-droid.org/docs/Signing_Process" @@ -1769,9 +1787,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Chcete-li používat awsbucket, musí být v souboru config.yml nastaven také awssecretkey a awsaccesskeyid!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Chcete-li používat awsbucket, musí být v souboru config.yml nastaven také awssecretkey a awsaccesskeyid!" +msgstr "Chcete-li používat rclone, musí být v souboru config.yml nastaven rclone_config a awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1794,11 +1811,6 @@ msgstr "Neočekávaná licenční značka „{}“! Používejte pouze značky s msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Neočekávaná licenční značka „{}“! Používejte pouze licenční značky nakonfigurované v konfiguračním souboru" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Neočekávaný cíl symlinku: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1808,11 +1820,10 @@ msgstr "Neznámá položka {key} in {configname}" msgid "Unknown exception found!" msgstr "Došlo k neznámé chybě!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" -msgstr "Neznámý soubor ‚{filename}‘ v sestavení ‚{versionName}‘" +msgstr "Neznámý soubor „{filename}“ v sestavení „{versionName}“" #: ../fdroidserver/metadata.py #, python-format @@ -1839,13 +1850,14 @@ msgstr "Zbytečná mezera na konci" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" -msgstr "Nerozpoznané pole aplikace ‚{fieldname}‘ v ‚{path}‘" +msgstr "Nerozpoznané pole aplikace „{fieldname}“ v „{path}“" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" -msgstr "Nerozpoznaný příznak sestavení ‚{build_flag}‘ v ‚{path}‘" +msgstr "Nerozpoznaný příznak sestavení „{build_flag}“ v „{path}“" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1876,24 +1888,20 @@ msgstr "Nepoužitá cesta scandelete: %s" msgid "Unused scanignore path: %s" msgstr "Nepoužitá cesta scanignore: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Rozbalování do %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" -msgstr "Aktualizujte informace o repo pro nové balíčky" +msgstr "Aktualizovat informace o repozitáři pro nové balíčky" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" -msgstr "Aktualizujte protokol binárního průhlednosti pro adresu URL" +msgstr "Aktualizovat protokol binární transparentnosti pro URL" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData má neplatnou URL: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1913,11 +1921,7 @@ msgstr "UpdateCheckData není platná URL: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates ještě nebyla spuštěna." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates zatím nebyla spuštěna" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName je nastaveno na známé ID aplikace, lze jej odstranit" @@ -1930,29 +1934,12 @@ msgstr "Nahrávání {apkfilename} na androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" -msgstr "Nahrávání {apkfilename} na virustotal" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Použití" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Použití: %s\n" +msgstr "Nahrávání {apkfilename} na VirusTotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Použijte /HEAD namísto /master nebo /main k ukázání na soubor ve výchozí větvi" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Použijte /HEAD místo /master k ukázání na soubor ve výchozí větvi" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "K vytvoření použijte `fdroid update -c`." @@ -1971,9 +1958,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Používám „{path}“ pro konfiguraci s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Používám „{path}“ pro konfiguraci s3cmd." +msgstr "Používám „{path}“ pro synchronizaci se vzdáleným úložištěm." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1991,11 +1978,6 @@ msgstr "Používám JAR Signature" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Používám jarsigner Javy, není doporučeno pro ověřování APK! Použijte apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Používám androguard z „{path}“" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2007,9 +1989,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Používám existující keystore „{path}“" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Používám s3cmd pro synchronizaci s: {url}" +msgstr "Používám rclone pro synchronizaci s: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2026,21 +2008,34 @@ msgstr "Ověřit proti lokálně uložené kopii místo opětovného stahování #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" -msgstr "Ověřte integritu stažených balíčků" +msgstr "Ověřit integritu stažených balíčků" #: ../fdroidserver/index.py msgid "Verifying index signature:" msgstr "Ověřování podpisu indexu:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Ověřování balíčku {path} pomocí apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klíč API VirusTotal neumožňuje nahrávání souborů větších než 32 MB, k nahrání {path} použijte {url}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Varovat ohledně možných chyb metadat" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Binární soubor WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Pokud jsou nakonfigurovány podepsané indexy, vytvořit v této fázi pouze nepodepsané indexy" @@ -2053,9 +2048,17 @@ msgstr "Při lintingu celého úložiště je yamllint ve výchozím nastavení msgid "When signing or verifying fails, exit with an error code." msgstr "Pokud podpis nebo ověření selže, ukončit proces s chybovým kódem." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Chcete stáhnout a nainstalovat F-Droid.apk skrze adb? (ANO/ne)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Chcete stáhnout aplikace z f-droid.org? (ANO/ne)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" -msgstr "X.509 'Distinguished Name' používané při generování klíčů" +msgstr "X.509 „Distinguished Name“ používané při generování klíčů" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" @@ -2065,6 +2068,11 @@ msgstr "Pro nastavení cesty k vašemu SDK můžete použít ANDROID_HOME, např msgid "ZIP file archive" msgstr "Archiv souborů ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb hlásí, že {serial} je „{status}“!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2075,19 +2083,15 @@ msgstr "přidávám IdentityFile do {path}" msgid "adding to {name}: {path}" msgstr "přidávání do {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "nejednoznačná možnost: %(option)s by mohlo odpovídat %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "nejednoznačná možnost: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner v build-tools;{version} předává soubory APK s neplatnými v3 podpisy, ignoruji." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2097,11 +2101,13 @@ msgstr "apksigner nenalezen! Nelze podepsat nebo ověřit moderní APK" msgid "apksigner not found, it's required for signing!" msgstr "apksigner nenalezen, je vyžadován k podepisování!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID aplikace nebo soubor, se kterým se má pracovat" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2112,12 +2118,10 @@ msgstr "ID aplikace s nepovinným kódem verze ve tvaru APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url musí končit na /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" -msgstr "argument \"-\" s režimem %r" +msgstr "argument „-“ s režimem %r" #: /usr/lib/python3.11/argparse.py #, python-format @@ -2130,12 +2134,12 @@ msgstr "pokus o holé připojení SSH k testování klíče pro nasazení:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" -msgstr "nelze parsovat specifikaci scrlib (není to řetězec): ‚{}‘" +msgstr "nelze zpracovat specifikaci scrlib (není to řetězec): „{}“" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" -msgstr "nelze otevřít '%(filename)s': %(error)s" +msgstr "nelze otevřít „%(filename)s“: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" @@ -2146,14 +2150,10 @@ msgstr "nelze otevřít non-https url: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "nelze najít požadované srclibs: „{path}“" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nelze mít více argumentů subparseru" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2172,14 +2172,6 @@ msgstr "klonování {url}" msgid "commands from plugin modules:" msgstr "příkazy z modulů pluginů:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "komplexní" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2201,19 +2193,15 @@ msgstr "konfliktní subparser: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" -msgstr "nepodařilo se parsovat '{path}'" +msgstr "nepodařilo se parsovat „{path}“" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" -msgstr "nepodařilo se parsovat srclib spec (není určen název): '{}'" +msgstr "nepodařilo se parsovat srclib spec (není určen název): „{}“" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" -msgstr "nepodařilo se parsovat srclib spec (není určen ref): '{}'" - -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "nepodařilo se parsovat srclib spec (příliš mnoho značek '@'): '{}'" +msgstr "nepodařilo se parsovat srclib spec (není určen ref): „{}“" #: ../fdroidserver/nightly.py #, python-brace-format @@ -2232,15 +2220,13 @@ msgstr "mazání: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "soubor závislostí bez zámku" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "protokol procesu {path} nasazen do {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2248,18 +2234,16 @@ msgstr "dest= je vyžadován pro možnosti jako %r" #: ../fdroidserver/scanner.py msgid "downloading '{}'" -msgstr "stahování ‚{}‘" +msgstr "stahování „{}“" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" -msgstr "stahování podpisů skeneru z ‚{}‘ se nezdařilo" +msgstr "stahování podpisů skeneru z „{}“ se nezdařilo" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" msgstr "spustitelná binárka, případně kód" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2268,20 +2252,14 @@ msgstr[0] "očekáván %s argument" msgstr[1] "očekávány %s argumenty" msgstr[2] "očekáváno %s argumentů" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "očekáván alespoň jeden argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "očekáván maximálně jeden argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "očekáván jeden argument" @@ -2294,13 +2272,9 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "stáhnout nejnovější verzi podpisů z webu" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "floating-point" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." -msgstr "vynutit, aby chyby metadat (výchozí) byly varovány nebo vyly ignorovány." +msgstr "vynutit, aby chyby metadat (výchozí) byly varování nebo byly ignorovány." #: ../fdroidserver/common.py msgid "git svn clone failed" @@ -2310,8 +2284,6 @@ msgstr "git svn clone selhalo" msgid "gzip file archive" msgstr "archiv souborů gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2325,35 +2297,21 @@ msgstr "index-v1 musí mít podpis, použijte `fdroid signindex` pro jeho vytvo msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 musí mít podpis, použijte `fdroid signindex` pro jeho vytvoření!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "celé číslo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "neplatná hodnota %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "neplatná volba: %(value)r (vyberte si z %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "neplatná hodnota conflict_resolution: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2371,7 +2329,7 @@ msgstr "poslední recept sestavení je novější: starý vercode={old}, nový v #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" -msgstr "local_copy_dir nekončí s \"fdroid\", možná jste měli na mysli: \"{path}\"" +msgstr "local_copy_dir nekončí s „fdroid“, možná jste měli na mysli: „{path}“" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" @@ -2384,15 +2342,13 @@ msgstr "local_copy_dir musí být adresář, ne soubor!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" -msgstr "mirror '%s' nekončí s 'fdroid'!" +msgstr "mirror „%s“ nekončí s „fdroid“!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" msgstr "zrcadla nastavena dvakrát, v config.yml a {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "společně exkluzivní argumenty musí být volitelné" @@ -2405,36 +2361,21 @@ msgstr "příští aktualizace mezipaměti {name} proběhne za {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" -msgstr "žádná \"icon\" v {appid}" +msgstr "žádná „icon“ v {appid}" #: ../fdroidserver/signatures.py msgid "no APK supplied" msgstr "neposkytnuto APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "žádná taková volba: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "nenalezeno info o verzi!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenalezeny informace o verzi" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "není povoleno s argumentem %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2444,72 +2385,6 @@ msgstr "jeden z argumentů %s je vyžadován" msgid "only accepts strings, lists, and tuples" msgstr "přijímá pouze řetězce, seznamy a tuply" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "možnost %s: pokud opravdu chcete nainstalovat všechny podepsané aplikace, použijte --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "možnost %s: neplatná hodnota %s: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "možnost %s: neplatná volba: %r (vyberte si z %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "možnost - %s není rozpoznána" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "možnost - %s vyžaduje argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "možnost --%s nesmí mít argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "možnost --%s není jedinečná předpona" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "možnost -%s není rozpoznána" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "možnost --%s vyžaduje argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "volitelné argumenty" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "možnosti" @@ -2519,8 +2394,6 @@ msgstr "možnosti" msgid "overwriting existing {path}" msgstr "přepisování existující {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "poziční argumenty" @@ -2537,12 +2410,12 @@ msgstr "chybějící podpis v referenčním binárním souboru" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" -msgstr "odmítnout stahování přes nezabezpečené spojení HTTP (použít HTTPS nebo upřesnit --no-https-check): {apkfilename}" +msgstr "odmítnout stahování přes nezabezpečené spojení HTTP (použijte HTTPS nebo upřesněte --no-https-check): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." -msgstr "repo_icon \"repo/icons/%s\" neexistuje, generování placeholderu." +msgstr "repo_icon „repo/icons/%s“ neexistuje, generování placeholderu." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" @@ -2553,24 +2426,20 @@ msgstr "repo_url musí končit na /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync chybí nebo je rozbitý: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml není nainstalován, nelze zapisovat metadata." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync indexes {path} do {url} a odstranit" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sync indexes {path} do {url} a odstranit" +msgstr "s3cmd synchronizuje indexy z {path} do {url} a odstraní smazané" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" -msgstr "mezipaměť skeneru je poškozena! Můžete ji vymazat pomocí: ‚{clear}‘" +msgstr "mezipaměť skeneru je poškozena! Můžete ji vymazat pomocí: „{clear}“" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" @@ -2580,19 +2449,9 @@ msgstr "serverwebroot: cesta nekončí s „fdroid“, možná jste mysleli jedn msgid "shared library" msgstr "sdílená knihovna" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "zobrazit číslo verze programu a ukončit" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" -msgstr "zobrazí tuto nápovědu a skončí" +msgstr "zobrazí tuto nápovědu a ukončí program" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." @@ -2624,29 +2483,25 @@ msgstr "statická knihovna" msgid "supplied reference binary has allowed signer {signer}" msgstr "dodaný referenční binární soubor umožnil podepisujícího {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "jsou vyžadovány následující argumenty: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "pravda" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "neočekávaný řetězec možností: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "neznámý parser %(parser_name)r (volby: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2655,11 +2510,9 @@ msgstr "nerozpoznané argumenty: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" -msgstr "nebezpečné oprávnění na '{config_file}' (má být 0600)!" +msgstr "nebezpečné oprávnění u „{config_file}“ (má být 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "použití: " @@ -2672,6 +2525,10 @@ msgstr "používám Apache libcloud pro synchronizaci s {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com omezuje rychlost, čekám na opětovný pokus..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "ano" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2685,21 +2542,19 @@ msgstr[2] "{0} aplikací, {1} aliasů klíčů" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nemá žádná metadata!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} má několik souborů {name}, vypadá to na exploit Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml aplikace {apkfilename} má špatné datum: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nemá název! Používám ID aplikace." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2720,11 +2575,10 @@ msgstr "{appid} má APK i soubory: {files}" msgid "{appid} is missing {name}" msgstr "{appid} chybí {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" -msgstr "{appid}: Neznámá extlib {path} v sestavení '{versionName}'" +msgstr "{appid}: Neznámá extlib {path} v sestavení „{versionName}“" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2734,12 +2588,12 @@ msgstr "{appid}: žádná určená sestavení, běžím na současném stavu zdr #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" -msgstr "{appid}: {field} musí být '{type}', ale je '{fieldtype}!'" +msgstr "{appid}: {field} musí být „{type}“, ale je „{fieldtype}!“" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" -msgstr "{appid}: {field} musí být '{type}', ale je '{fieldtype}'!" +msgstr "{appid}: {field} musí být „{type}“, ale je „{fieldtype}“!" #: ../fdroidserver/metadata.py #, python-brace-format @@ -2759,12 +2613,12 @@ msgstr "{file} je prázdný nebo poškozený!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." -msgstr "{name} \"{section}/icons/{path}\" neexistuje! Zkontrolujte \"config.yml\"." +msgstr "{name} „{section}/icons/{path}“ neexistuje! Zkontrolujte „config.yml“." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} je zastaralý, použijte {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} je kopií {path2}, jednu odstraňte!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2779,13 +2633,18 @@ msgstr "{path} neexistuje! Vytvořte ji spuštěním:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" -msgstr "{path} má nesprávný podpis balíčku \"{pattern}\", možný exploit Janus!" +msgstr "{path} má nesprávný podpis balíčku „{pattern}“, možný exploit Janus!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} byl označen službou VirusTotal {count}krát:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} má nesprávný otisk ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" @@ -2829,12 +2688,12 @@ msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" -msgstr "{url} nekončí s \"fdroid\", zkontrolujte cestu URL!" +msgstr "{url} nekončí s „fdroid“, zkontrolujte cestu URL!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" -msgstr "{url} nezačíná s \"http\"!" +msgstr "{url} nezačíná s „http“!" #: ../fdroidserver/build.py msgid "{} build failed" diff --git a/locale/cy/LC_MESSAGES/fdroidserver.po b/locale/cy/LC_MESSAGES/fdroidserver.po index 8c10a9b0..8451062c 100644 --- a/locale/cy/LC_MESSAGES/fdroidserver.po +++ b/locale/cy/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-01-16 21:23+0000\n" "Last-Translator: Aled Powell \n" "Language-Team: Welsh \n" @@ -34,6 +34,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +48,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,21 +73,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" -msgstr[3] "" -msgstr[4] "" -msgstr[5] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -104,14 +88,6 @@ msgstr "" msgid "%d problems found" msgstr "canfuwyd %d problem" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -132,13 +108,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -159,8 +128,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -174,11 +141,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -189,7 +151,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -199,13 +161,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -296,10 +260,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -326,6 +286,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -335,7 +303,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -390,16 +357,23 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -422,6 +396,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -435,6 +413,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -444,20 +426,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -477,6 +456,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -503,6 +483,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -565,11 +550,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,13 +598,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -660,12 +639,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -675,6 +648,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -692,6 +685,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -708,6 +710,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -777,10 +783,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -812,7 +814,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -877,15 +878,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -930,6 +929,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1015,16 +1019,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1137,6 +1137,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1166,6 +1171,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1226,7 +1235,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1261,7 +1269,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1279,13 +1286,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1296,10 +1317,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Dewisiadau" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1357,6 +1374,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1443,6 +1465,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1456,12 +1487,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Ailenwi ffeiliau APK na sy'n dilyn y ffurf package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1477,6 +1505,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Ailysgrifennu'r holl ffeiliau metaddata" @@ -1490,6 +1523,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1541,6 +1579,10 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1661,6 +1703,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1732,6 +1778,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1753,11 +1803,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1767,7 +1812,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1805,6 +1849,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1835,11 +1880,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Diweddaru gwybodaeth ystorfa am becynnau newydd" @@ -1853,6 +1893,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1872,11 +1913,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1891,27 +1928,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Defndd: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1929,6 +1949,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1945,11 +1970,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1960,6 +1980,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1981,15 +2006,28 @@ msgstr "Gwirio dilysrwydd pecynnau a lawrlwythir" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Rhybuddio am wallau metaddata posib" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -2002,6 +2040,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2014,6 +2060,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2024,19 +2075,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "dewis amwys: gall %(option)s gydweddu â %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "dewis amwys: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2046,11 +2093,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2061,8 +2110,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2081,7 +2128,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "methu agor '%(filename)s': %(error)s" @@ -2095,14 +2142,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2121,14 +2164,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2163,10 +2198,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2182,13 +2213,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2206,8 +2239,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2219,20 +2250,14 @@ msgstr[3] "" msgstr[4] "" msgstr[5] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2245,10 +2270,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2261,8 +2282,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2276,35 +2295,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2342,8 +2347,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2362,30 +2365,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "dim dewis o'r fath: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2395,72 +2383,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "dewis -%s heb ei adnabod" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "dewis -%s angen ymresymiad" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "dewis --%s heb ei adnabod" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "ymresymiadau dewisol" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2471,8 +2393,6 @@ msgstr "Dewisiadau" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2505,13 +2425,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2527,17 +2448,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "dangos rhif fersiwn y rhaglen a gadael" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "dangos y neges cymorth hon a gadael" @@ -2571,29 +2482,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2604,9 +2511,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "defnydd: " @@ -2619,6 +2524,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2635,21 +2544,19 @@ msgstr[5] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2670,7 +2577,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2711,9 +2617,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2736,6 +2642,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/de/LC_MESSAGES/fdroidserver.po b/locale/de/LC_MESSAGES/fdroidserver.po index 1996b072..5dde0e8f 100644 --- a/locale/de/LC_MESSAGES/fdroidserver.po +++ b/locale/de/LC_MESSAGES/fdroidserver.po @@ -13,29 +13,29 @@ # TobiGr , 2021. # FW , 2021. # fossdd , 2021. -# Ceeee , 2021. +# Ceeee , 2021, 2025. # C. Rüdinger , 2021, 2022. -# VfBFan , 2021, 2023. +# VfBFan , 2021, 2023, 2024, 2025. # Roman Leo , 2021. # Follpvosten , 2021. -# ssantos , 2022, 2023. -# "C. Rüdinger" , 2023. +# ssantos , 2022, 2023, 2024. +# "C. Rüdinger" , 2023, 2025. # VfBFan , 2024. # Maxi , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-20 09:01+0000\n" -"Last-Translator: Maxi \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-04-29 10:16+0000\n" +"Last-Translator: VfBFan \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: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.12-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -59,6 +59,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" besitzt keine zugehörige Metadaten-Datei!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\"-Schlüssel sollte nicht zu den Spiegelservern hinzugefügt werden!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -69,11 +73,6 @@ msgstr "\"local_copy_dir\" {path}\" existiert nicht!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ist bereits auf {dev} installiert." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "{name} ({version}) in „{path}” veraltet" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -99,17 +98,6 @@ msgstr "\"{path}” ist mit einem nicht zulässigen Schlüssel signiert:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" ist keine gültige URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Option %(option)s benötigt %(number)d Argument" -msgstr[1] "Option %(option)s benötigt %(number)d Argumente" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -125,14 +113,6 @@ msgstr "%d APKs konnten nicht signiert oder verifiziert werden!" msgid "%d problems found" msgstr "%d Probleme gefunden" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [Optionen]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -153,16 +133,9 @@ msgstr "%s hat schlechtes SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s ist kein zulässiges Build-Feld" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "Option %s verfügt über keinen Wert" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" -msgstr "„keypass” nicht in config.yml vorhanden!" +msgstr "'keypass' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" @@ -170,21 +143,19 @@ msgstr "'keystore' ist NONE und 'smartcardoptions' ist leer!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" -msgstr "„keystore” nicht in config.yml vorhanden!" +msgstr "'keystore' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" -msgstr "„keystorepass” nicht in config.yml vorhanden!" +msgstr "'keystorepass' nicht in config.yml vorhanden!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" -msgstr "„repo_keyalias” nicht in config.yml vorhanden!" +msgstr "'repo_keyalias' nicht in config.yml vorhanden!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "„required” ist ein ungültiges Argument für Positionsangaben" +msgstr "'required' ist ein ungültiges Argument für Positionsangaben" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" @@ -193,40 +164,37 @@ msgstr "Kein 'sdk_path' in 'config.yml' festgelegt!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" -msgstr "„{aapt}” ist veraltet, fdroid benötigt build-tools-{version} oder neuer!" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "Das Feld „{field}” wird in zufälliger Reihenfolge angezeigt! Verwenden Sie runde ( ) oder eckige [ ] Klammern, wenn die Reihenfolge wichtig ist!" +msgstr "'{aapt}' ist veraltet, fdroid benötigt build-tools-{version} oder neuer!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" -msgstr "„{path}” konnte nicht ausgeführt werden!" +msgstr "'{path}' konnte nicht ausgeführt werden!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' in ungültigem Format, sollte ein Wörterbuch sein!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" -msgstr "„{value}” ist kein gültiges {field} in {appid}. Regex-Muster: {pattern}" +msgstr "'{value}' ist kein gültiges {field} in {appid}. Regex-Muster: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" -msgstr "„{value}” ist kein gültiges {field}, sollte {pattern} sein" +msgstr "'{value}' ist kein gültiges {field}, sollte {pattern} sein" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request läuft nur auf einer einzigen App-ID!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "… checkupdate für {appid} fehlgeschlagen: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nicht festgelegt" @@ -259,7 +227,7 @@ msgstr "Füge eine Metadaten-Vorlage für APKs hinzu, die keine haben" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" -msgstr "Nur für {name} eine neue Repro hinzufügen" +msgstr "Nur für {name} eine neues Repo hinzufügen" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" @@ -301,12 +269,12 @@ msgstr "Android-SDK nicht unter {path} gefunden!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" -msgstr "Android-SDK-Pfad »{path}« nicht vorhanden!" +msgstr "Android-SDK-Pfad '{path}' nicht vorhanden!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" -msgstr "Android-SDK-Pfad »{path}« ist kein Verzeichnis!" +msgstr "Android-SDK-Pfad '{path}' ist kein Verzeichnis!" #: ../fdroidserver/common.py #, python-brace-format @@ -317,10 +285,6 @@ msgstr "Android-SDK-Tool {cmd} nicht gefunden!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App besitzt Binärdateien aber keine entsprechenden AllowedAPKSigningKeys, um Zertifikat zu verankern." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "App hat NoSourceSince oder ArchivePolicy \"0 Versionen\", aber AutoUpdateMode oder UpdateCheckMode sind nicht None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "App hat NoSourceSince oder ArchivePolicy \"0 versions\" oder 0, aber AutoUpdateMode oder UpdateCheckMode sind nicht None" @@ -328,7 +292,7 @@ msgstr "App hat NoSourceSince oder ArchivePolicy \"0 versions\" oder 0, aber Aut #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" -msgstr "App befindet sich in „{repo}”, enthält aber einen Verweis auf {url}" +msgstr "App befindet sich in '{repo}', enthält aber einen Verweis auf {url}" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." @@ -347,25 +311,32 @@ msgstr "Archivierung von {apkfilename} mit ungültiger Signatur!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode mit UpdateCheckMode: HTTP muss ein Muster haben." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Automatisches Nein zu allen Aufforderungen." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Automatisches Ja zu allen Aufforderungen." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" -msgstr "Falscher Typeneintrag „{mirrortype}“ in Spiegelserver-Konfiguration von: {mirror}" +msgstr "Falscher Typeneintrag \"{mirrortype}\" in Spiegelserver-Konfiguration von: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Basis-URL zum Spiegeln, kann den Index-Signierungsschlüssel mit Hilfe des Abfrage-Strings enthalten: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" -msgstr "Zweig „{branch}”, der als Bestätigung im Build verwendet wird „{versionName}”" +msgstr "Branch '{branch}', der als Bestätigung im Build verwendet wird '{versionName}'" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" -msgstr "Zweig „{branch}” wird als Bestätigung in srclib verwendet „{srclib}”" +msgstr "Branch '{branch}' wird als Bestätigung in srclib verwendet '{srclib}'" #: ../fdroidserver/update.py #, python-brace-format @@ -386,7 +357,7 @@ msgstr "Build durch „fdroid import” erstellt - Entfernen Sie die Zeile „De #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" -msgstr "Build Metadaten Git Repo hat nicht committete Änderungen!" +msgstr "Build-Metadaten-Git-Repo hat nicht committete Änderungen!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" @@ -395,7 +366,7 @@ msgstr "Nur die neueste Version jedes Programmpakets erstellen" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" -msgstr "Built-Repo basiert in „%s” auf der Konfiguration von:" +msgstr "Built-Repo basiert in \"%s\" auf der Konfiguration von:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" @@ -407,19 +378,26 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten ist" msgstr[1] "Kann nicht erstellt werden, da {} Fehler beim Prüfen aufgetreten sind" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Lesen von {path} fehlgeschlagen: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "\"{path}\" konnte nicht überschrieben werden" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" -msgstr "Kategorie »%s« ist nicht gültig" +msgstr "Kategorie '%s' ist nicht gültig" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" -msgstr "Kategorien sind nicht festgelegt" +msgstr "Keine Kategorien festgelegt" #: ../fdroidserver/index.py #, python-brace-format @@ -439,6 +417,10 @@ msgstr "Archivierung auf {appid} überprüfen - apks:{integer}, keepversions:{ke msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Sauber aktualisieren - ohne Verwendung der Zwischenspeicher, alle APKs wiederaufbereiten" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Einfärben der Protokollausgabe" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Liste der Kategorien durch Kommata getrennt." @@ -450,31 +432,32 @@ msgstr "Befehl '%s' nicht erkannt.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "Änderungen übergeben" +msgstr "Änderungen committen" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Änderungen committen, pushen und dann eine Merge-Anfrage stellen" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" -msgstr "Widersprüchliche „{field}“-Definitionen in .yml- bzw. übersetzten Dateien:" +msgstr "Widersprüchliche \"{field}\"-Definitionen in .yml- bzw. übersetzten Dateien:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Widersprüchliche Argumente: '--verbose' und '--quiet' können nicht gleichzeitig angegeben werden." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Konflikt in der Konfiguration. Verwende {newfile}, ignoriere {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" -msgstr "„{command}” konnte auf Ihrem System nicht gefunden werden" +msgstr "'{command}' konnte auf Ihrem System nicht gefunden werden" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Neuester Versionscode konnte nicht gefunden werden" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Neuester Versionsname konnte nicht gefunden werden" @@ -494,6 +477,7 @@ msgstr "Konnte APK-Datei {path} nicht für Analyse öffnen " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Konnte Größe \"{size}\" nicht parsen, falscher Typ \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Konnte Anwendungs-ID nicht finden" @@ -513,12 +497,17 @@ msgstr "Es ist ungehörig, bestehende Signaturschlüssel-Einstellungen zu übers #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" -msgstr "Neuer Container „{name}” wurde erstellt" +msgstr "Neuer Container \"{name}\" wurde erstellt" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." -msgstr "„{path}” für die Konfiguration von S3cmd wird erstellt." +msgstr "\"{path}\" für die Konfiguration von S3cmd wird erstellt." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Erstelle leere {config_file}" #: ../fdroidserver/publish.py msgid "Creating log directory" @@ -535,7 +524,7 @@ msgstr "Erstelle Ausgabeverzeichnis" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" -msgstr "Signierter Index mit diesem Schlüssel (SHA256) wird erstellt:" +msgstr "Signierter Index wird mit diesem Schlüssel (SHA256) erstellt:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" @@ -548,7 +537,7 @@ msgstr "Unsignierter Index zur Vorbereitung der Signierung wird erstellt" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" -msgstr "CurrentVersionCode {cv} ist kleiner als der älteste Build-Eintrag {versionCode}" +msgstr "CurrentVersionCode {cv} ist niedriger als ältester Build-Eintrag {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" @@ -582,11 +571,6 @@ msgstr "Die Beschreibung '%s' ist nur die Zusammenfassung der App" msgid "Description has a duplicate line" msgstr "Beschreibung enthält eine doppelte Zeile" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Beschreibung enthält eine Liste (%s), ist aber weder aufgezählt (*) noch nummeriert (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -613,7 +597,7 @@ msgstr "Verteilen Sie die neuen Dateien nicht in das Repo" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" -msgstr "„{path}” nicht in die URL einfügen!" +msgstr "\"{path}\" nicht in die URL einfügen!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" @@ -635,15 +619,14 @@ msgstr "Keine Aktualisierung des Repositorys. Nützlich, wenn ein Build ohne Int msgid "Don't use rsync checksums" msgstr "Keine rsync-Prüfsummen verwenden" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "F-Droid.apk über Spiegelserver herunterladen, die weniger Datenlecks ins Netzwerk haben" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Komplette Spiegel von kleinen Paketquellen herunterladen" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Herunterladen %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Herunterladen des Repositorys bereits einmal fehlgeschlagen, versuche es nicht nochmal." @@ -661,12 +644,12 @@ msgstr "Doppelte Anti-Feature-Deklaration in {path} wurde ignoriert!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" -msgstr "Doppelter „%s“-Eintrag in Spiegelserver-Konfiguration!" +msgstr "Doppelter Eintrag \"%s\" in Spiegelserver-Konfiguration!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" -msgstr "Link in „{field}” duplizieren: {url}" +msgstr "Link in '{field}' duplizieren: {url}" #: ../fdroidserver/common.py #, python-format @@ -677,14 +660,6 @@ msgstr "FEHLER: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "FEHLER: Der \"server\"-Unterbefehl wurde entfernt, verwende \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"FEHLER: Dieser Befehl sollte niemals verwendet werden, um f-droid.org zu spiegeln!\n" -"Ein vollständiger Spiegel von f-droid.org erfordert mehr als 200 GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "FEHLER: nicht unterstützter CI-Typ, Patches willkommen!" @@ -697,12 +672,22 @@ msgstr "FEHLER: nicht unterstützter Git-Host \"%s\", Patches willkommen!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "FEHLER: {key} in {path} ist nicht \"archive\" oder \"repo\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "FEHLER: {key} ist kein gültiger Schlüssel!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "FEHLER: {key}s Wert sollte vom Typ {t} sein!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "FEHLER: {key}:{subkey} in {path} ist keiner der erlaubten Schlüssel: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -723,9 +708,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Umgebungsvariable {var} von {configname} ist nicht gesetzt!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Umgebungsvariable {{env: {var}}} ist nicht gesetzt!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Fehler beim Bereitstellen von 'github_releases', {} nicht vorhanden. (Sie müssen zuerst `fdroid update` ausführen.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -743,6 +733,10 @@ msgstr "Extrahieren von Anwendungsmetadaten aus einem Quell-Repository" msgid "Extract signatures from APKs" msgstr "Signaturen aus APKs extrahieren" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk konnte von keiner bekannten Quelle heruntergeladen werden!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -751,7 +745,7 @@ msgstr "Kopieren von {path} fehlgeschlagen: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" -msgstr "Abrufen von Signaturen für „{apkfilename}” fehlgeschlagen: {error}" +msgstr "Abrufen von Signaturen für '{apkfilename}' fehlgeschlagen: {error}" #: ../fdroidserver/update.py #, python-brace-format @@ -785,7 +779,7 @@ msgstr "Abrufen des APK-Signierschlüssel-Fingerabdrucks fehlgeschlagen" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" -msgstr "Installation von „{apkfilename}” auf {dev} fehlgeschlagen: {error}" +msgstr "Installation von '{apkfilename}' auf {dev} fehlgeschlagen: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" @@ -799,7 +793,7 @@ msgstr "BuildServerID von VM abgerufen: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" -msgstr "Signaturen für {apkfilename} -> {sigdir} abgerufen" +msgstr "Signaturen für '{apkfilename} '-> '{sigdir}' abgerufen" #: ../fdroidserver/update.py #, python-brace-format @@ -812,10 +806,6 @@ msgstr "Datei verschwand während der Verarbeitung: {path}" msgid "Finished" msgstr "Fertiggestellt" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flattr-Spendenmethoden gehören in das FlattrID-Feld" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Verbotene HTML-Befehle" @@ -845,9 +835,8 @@ msgstr "Schlechte Finanzierungsdatei \"{path}\" für \"{name}\" gefunden:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" -msgstr "Ungültige Appids in Argumenten gefunden" +msgstr "Ungültige App-IDs in Argumenten gefunden" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Ungültige versionCodes für einige Apps gefunden" @@ -882,7 +871,7 @@ msgstr "Ungültige Datei bei %s gefunden" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" -msgstr "{apkfilename} unter {url} gefunden" +msgstr "{apkfilename} gefunden auf {url}" #: ../fdroidserver/scanner.py #, python-brace-format @@ -912,15 +901,13 @@ msgstr "Git clean fehlgeschlagen" msgid "Git fetch failed" msgstr "Git fetch fehlgeschlagen" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune fehlgeschlagen" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head fehlgeschlagen: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset fehlgeschlagen" @@ -931,11 +918,11 @@ msgstr "Git-Submodul deinit fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git submodule sync failed" -msgstr "Git submodule sync fehlgeschlagen" +msgstr "Git-Submodul sync fehlgeschlagen" #: ../fdroidserver/common.py msgid "Git submodule update failed" -msgstr "Git submodule update fehlgeschlagen" +msgstr "Git-Submodul update fehlgeschlagen" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" @@ -948,7 +935,7 @@ msgstr "Wenn ein Git-Mirror zu groß wird, erlaube dem Archiv gelöscht zu werde #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" -msgstr "Wenn das Hochladen fehlschlägt, versuchen Sie es händisch auf {url} hochzuladen" +msgstr "Wenn das Hochladen fehlschlägt, versuchen Sie ihn manuell auf {url} hochzuladen" #: ../fdroidserver/metadata.py #, python-brace-format @@ -958,13 +945,18 @@ msgstr "'{field}' in '{metapath}' Metadaten wird ignoriert, da es veraltet ist." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" -msgstr "Ignoriere FUNDING.yml Einträge länger als 2048: %s" +msgstr "Ignoriere FUNDING.yml-Einträge länger als 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "Ignoriere schlechtes Element im Manifest: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Ignoriere veraltete {oldfile}, benutze {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignoriere Paket ohne Metadaten: " @@ -1050,16 +1042,12 @@ msgstr "Ungültige VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Ungültige VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Ungültige Anwendungs-ID {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Ungültiger boolescher Wert '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Ungültige Aufzählung" @@ -1165,13 +1153,18 @@ msgstr "Fehlerhafte Paketquellen-Spiegelserver." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" -msgstr "Fehlerhafte serverwebroot Zeile:" +msgstr "Fehlerhafte serverwebroot-Zeile:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "Maximale Rekursionstiefe in ZIP-Datei erreicht: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Spiegelserver-Konfiguration für {url} enthält \"isPrimary\"-Schlüssel!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Spiegeln Sie die komplette Paketquelle und das Archiv, inklusive aller Dateitypen." @@ -1191,16 +1184,20 @@ msgstr "Weder \"repo_pubkey\" noch \"keystorepass\" in config.yml gesetzt" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" -msgstr "Keine APK für das Paket: %s" +msgstr "Kein APK für das Paket: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" -msgstr "Kein Android SDK gefunden!" +msgstr "Kein Android-SDK gefunden!" #: ../fdroidserver/install.py msgid "No attached devices found" msgstr "Keine angeschlossenen Geräte gefunden" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Keine Geräte für `adb install` gefunden! Bitte schließen Sie eines an." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Kein Fingerabdruck in der URL." @@ -1249,7 +1246,7 @@ msgstr "Keine signierte Apk für %s verfügbar" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" -msgstr "Kein signiertes Ausgabeverzeichnis - nichts zu tun" +msgstr "Kein signiertes Ausgabeverzeichnis – nichts zu tun" #: ../fdroidserver/common.py #, python-brace-format @@ -1261,7 +1258,6 @@ msgstr "Keine Signaturzertifikate in {path} gefunden" msgid "No such package: %s" msgstr "Kein solches Paket: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1273,7 +1269,7 @@ msgstr "Keine Tags gefunden" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" -msgstr "Kein unsigniertes Verzeichnis - nichts zu tun" +msgstr "Kein unsigniertes Verzeichnis – nichts zu tun" #: ../fdroidserver/__main__.py msgid "No version information could be found." @@ -1296,7 +1292,6 @@ msgstr "Keine zu erledigenden Aufgaben für {appid}." msgid "Now set these in config.yml:" msgstr "Legen Sie diese nun in der config.yml fest:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1314,26 +1309,28 @@ msgstr "Der OBB-Packetname stimmt mit keinem unterstützten APK überein:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maschine offline, überspringe git-Spiegelgeneration bis `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'packageNames'. Überspringe …" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'projectUrl'. Überspringe …" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Einem der Konfigurationselemente von 'github_releases' fehlt der Wert 'token'. Überspringe …" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Nur PNG und JPEG werden für Grafiken unterstützt, gefunden wurde: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Nur Unterschiede zum Play Store ausgeben" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Nur ein einziger Schlüssel \"env\" wird akzeptiert" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1343,13 +1340,9 @@ msgstr "Nur Apps mit automatischen Aktualisierungen verarbeiten" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective-Spendenmethoden gehören in das OpenCollective: Feld" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Optionen" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." -msgstr "JSON-Bericht in eine nach der APK benannte Datei ausgeben." +msgstr "In Datei ausgegebener JSON-Bericht wird nach APK benannt." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." @@ -1378,7 +1371,7 @@ msgstr "Paket \"{appid}\" existiert bereits" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" -msgstr "Analysiere Manifest bei {path}" +msgstr "Analysiere Manifest bei '{path}'" #: ../fdroidserver/common.py msgid "Password required with username" @@ -1404,6 +1397,11 @@ msgstr "Pfad zum Schlüsselspeicher für den Repository-Signierschlüssel" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Drucken der geheimen Variable in das Terminal zum einfachen Kopieren/Einfügen" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Der Datenschutzmodus wurde auf der Grundlage Ihres Gebietsschemas ({country_code}) aktiviert." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1412,7 +1410,7 @@ msgstr "Problem mit der ZIP-Datei: %s, Fehler %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" -msgstr "Problem mit xml bei {path}" +msgstr "Problem mit xml bei '{path}'" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" @@ -1451,7 +1449,7 @@ msgstr "Binäres Transparenz-Log nach {url} pushen" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" -msgstr "Schieben zum Remote-Server fehlgeschlagen!" +msgstr "Pushen zum Remote-Server fehlgeschlagen!" #: ../fdroidserver/deploy.py #, python-brace-format @@ -1490,6 +1488,15 @@ msgstr "Lese {apkfilename} aus dem Cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Aktualisieren und Zwischenspeichern von Scannerregeln und Signaturen aus dem Netzwerk" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Eintragen von '{path}' abgelehnt, Datei ist sowohl in Ordner {dir1} als auch {dir2} vorhanden." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Den Quell-Tarball und alle APKs entfernen, wenn sie erfolgreich verifiziert wurden." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Entferne angegebene Dateien" @@ -1503,13 +1510,10 @@ msgstr "Entferne {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "APK-Dateien umbenennen, die nicht dem Muster „package.name_123.apk“ entsprechen" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Der RepoTrunk-Aktualisierungsmodus ist nur bei git-svn-Paketquellen sinnvoll" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Zurücksetzen und ganz neuen Build-Server einrichten, auch wenn der bestehende in Ordnung zu sein scheint." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1524,6 +1528,11 @@ msgstr "Größe aller Symbole ändern, welche die maximale Pixelgröße übersch msgid "Restrict output to warnings and errors" msgstr "Ausgabe auf Warnungen und Fehler beschränken" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Wiederholung des fehlgeschlagenen Downloads: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Alle Metadaten-Dateien neu schreiben" @@ -1540,7 +1549,7 @@ msgstr "Auf Git Repo, das nicht committete Änderungen hat, laufen lassen" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "{cibase} ausführen, um -debug.apk zu finden. und repo_basedir {repo_basedir} überspringen" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1558,11 +1567,11 @@ msgstr "Ausführen von wget in {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" -msgstr "SHA-256 von {url} stimmt nicht mit Eintrag überein!" +msgstr "SHA-256 der {url} stimmt nicht mit Eintrag überein!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." -msgstr "Scannen Sie die entstandene(n) APK(s) nach bekannten non-free-Klassen." +msgstr "Die resultierende(n) APK(s) auf bekannte nicht-quelloffene Klassen scannen." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" @@ -1589,9 +1598,13 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Scanner fand {count} Problem" msgstr[1] "Scanner fand {count} Probleme" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "APK auf zusätzliche Signierblöcke scannen." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." -msgstr "APK mit dexdump nach bekannten nicht-quelloffenen Klassen scannen." +msgstr "APK mit dexdump auf bekannte nicht-quelloffene Klassen scannen." #: ../fdroidserver/common.py #, python-brace-format @@ -1604,7 +1617,7 @@ msgstr "Einstellen der Uhr auf diese Zeit mit:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" -msgstr "Setze maximale Veröffentlichungen im Repo bevor ältere archiviert werden" +msgstr "Setze maximale Veröffentlichungen im Repo, bevor ältere archiviert werden" #: ../fdroidserver/build.py #, python-brace-format @@ -1644,7 +1657,7 @@ msgstr "Überspringen von '{apkfilename}' mit ungültiger Signatur!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" -msgstr "GitLab Pages Mirror wird übersprungen, da das Repo zu groß ist (>%.2fGB)!" +msgstr "Überspringe GitLab-Pages-Spiegelserver, da das Repo zu groß ist (>%.2f GB)!" #: ../fdroidserver/update.py #, python-brace-format @@ -1707,7 +1720,11 @@ msgstr "Aktualisierungsmodus mit Tags in git-svn verwendet, aber das Repo wurde #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." -msgstr "Testmodus - Ausgabe nur ins tmp-Verzeichnis einfügen, immer erstellen, selbst wenn die Ausgabe bereits vorhanden ist." +msgstr "Testmodus – Ausgabe nur ins tmp-Verzeichnis einfügen, immer erstellen, selbst wenn die Ausgabe bereits vorhanden ist." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Das Python-Paket \"qrcode\" ist nicht installiert (z. B. apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py @@ -1738,7 +1755,7 @@ msgstr "Das Wurzelverzeichnis für local_copy_dir \"{path}\" existiert nicht!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" -msgstr "Es gibt eine Keyalias-Kollision - Veröffentlichung gestoppt" +msgstr "Es gibt eine Keyalias-Kollision – Veröffentlichung gestoppt" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." @@ -1750,7 +1767,7 @@ msgstr "Dieser Befehl sollte niemals verwendet werden, um f-droid.org zu spiegel #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." -msgstr "Dies ist eine Paketquelle für Anwendungen, die für die Benutzung zusammen mit F-Droid gedacht ist. Die darin enthaltenen Anwendungen sind entweder offizielle von den Entwicklern erstellte Binärdateien oder werden von f-droid.org mithilfe des Werkzeugs auf https://gitlab.com/fdroid aus dem Quellcode erstellt." +msgstr "Dies ist eine Paketquelle für Anwendungen, die für die Benutzung zusammen mit F-Droid gedacht ist. Die darin enthaltenen Anwendungen sind entweder offizielle von den Entwicklern erstellte Binärdateien oder werden von f-droid.org mithilfe der Werkzeuge auf https://gitlab.com/fdroid aus dem Quellcode erstellt." #: ../fdroidserver/import_subcommand.py #, python-format @@ -1781,9 +1798,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Um awsbucket zu benutzen, müssen awssecretkey und awsaccesskeyid auch in der config.yml gesetzt sein!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Um awsbucket zu benutzen, müssen awssecretkey und awsaccesskeyid auch in der config.yml gesetzt sein!" +msgstr "Um rclone zu benutzen, müssen rclone_config und awsbucket auch in der config.yml gesetzt sein!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1806,11 +1822,6 @@ msgstr "Ungültiges Lizenz-Tag \"{}\"! Verwenden Sie nur Kennzeichen von https:/ msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Unerwartetes Lizenz-Tag \"{}\"! Nur Lizenz-Tags verwenden, die in deiner config-Datei eingerichtet sind" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Unerwartetes Symlink-Ziel: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1820,11 +1831,10 @@ msgstr "Unbekannter Eintrag {key} in {configname}" msgid "Unknown exception found!" msgstr "Unbekannter Fehler aufgetreten!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" -msgstr "Unbekannte Datei '{filename}' im Build '{versionName}''" +msgstr "Unbekannte Datei '{filename}' im Build '{versionName}'" #: ../fdroidserver/metadata.py #, python-format @@ -1856,8 +1866,9 @@ msgstr "Nicht erkanntes App-Feld '{fieldname}' in '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" -msgstr "NIcht erkannte Build Flag '{build_flag}' in '{path}'" +msgstr "Nicht erkanntes Build-Flag '{build_flag}' in '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1881,17 +1892,12 @@ msgstr "Nicht verwendete Datei bei %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" -msgstr "Nicht verwendeter „scandelete“ Pfad: %s" +msgstr "Nicht verwendeter „scandelete“-Pfad: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" -msgstr "Nicht verwendeter „scanignore“ Pfad: %s" - -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Entpacke nach %s" +msgstr "Nicht verwendeter „scanignore“-Pfad: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" @@ -1906,6 +1912,7 @@ msgstr "Binäres Transparency-Log einer URL aktualisieren" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData hat eine ungültige URL: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1925,11 +1932,7 @@ msgstr "UpdateCheckData hat eine ungültige URL: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde vermutlich noch nicht ausgeführt." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde anscheinend noch nicht ausgeführt" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName ist auf eine bekannte App-ID gesetzt, sie kann entfernt werden" @@ -1944,48 +1947,31 @@ msgstr "Lade {apkfilename} auf androidobservatory.org hoch" msgid "Uploading {apkfilename} to virustotal" msgstr "Lade {apkfilename} auf VirusTotal hoch" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Syntax" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Syntax: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "Verwenden Sie /HEAD anstelle von /master oder /main, um auf eine Datei im Hauptzweig zu verweisen" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Verwenden Sie /HEAD anstelle von /master, um auf eine Datei im Hauptzweig zu verweisen" +msgstr "Verwende /HEAD anstelle von /master oder /main, um auf eine Datei im Hauptzweig zu verweisen" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." -msgstr "Verwenden Sie `fdroid update -c´ zum Erstellen." +msgstr "Verwende `fdroid update -c` zum Erstellen." #: ../fdroidserver/build.py msgid "Use build server" -msgstr "Build-Server verwenden" +msgstr "Verwende Buildserver" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" -msgstr "APK-Datum statt der aktuellen Zeit für neu hinzugefügte APKs verwenden" +msgstr "Verwende APK-Datum statt der aktuellen Zeit für neu hinzugefügte APKs" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." -msgstr "Verwende {path} zur Konfiguration von s3cmd." +msgstr "Verwende \"{path}\" zur Konfiguration von s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Verwende {path} zur Konfiguration von s3cmd." +msgstr "Verwende „{path}“ zur Synchronisation mit Remote-Speicher." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1997,17 +1983,12 @@ msgstr "Verwende APK-Signatur v3" #: ../fdroidserver/common.py msgid "Using JAR Signature" -msgstr "Verwende JAR Signatur" +msgstr "Verwende JAR-Signatur" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Von Java jarsigner zur Verifikation von APKs wird abgeraten! Verwenden Sie apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Verwende Androguard von \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2019,9 +2000,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Verwende vorhandenen Schlüsselspeicher \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Verwende s3cmd zum Synchronisieren mit: {url}" +msgstr "Verwende rclone zum Synchronisieren mit: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2034,7 +2015,7 @@ msgstr "Gültige Befehle sind:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." -msgstr "Vergleichen Sie mit lokal zwischengespeicherter Kopie, anstatt erneut herunterzuladen." +msgstr "Lokal zwischengespeicherte Kopie vergleichen, anstatt erneut herunterzuladen." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" @@ -2042,17 +2023,30 @@ msgstr "Integrität der heruntergeladenen Programmpakete überprüfen" #: ../fdroidserver/index.py msgid "Verifying index signature:" -msgstr "Überprüfe die Index-Signatur:" +msgstr "Überprüfen der Index-Signatur:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Überprüfen des Pakets {path} mit apksigner." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal-API-Schlüssel kann nicht Dateien größer 32MB hochladen, verwende {url} um {path} hochzuladen." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Vor möglichen Metadaten-Fehlern warnen" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly-Binärdatei" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Bei einer Konfiguration mit signierten Indizes, in dieser Phase nur unsignierte Indizes erstellen" @@ -2065,6 +2059,14 @@ msgstr "Beim Linting des gesamten Repositoriums wird yamllint standardmäßig de msgid "When signing or verifying fails, exit with an error code." msgstr "Wenn das Signieren oder Verifizieren fehlschlägt, wird der Vorgang mit einem Fehlercode beendet." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Möchten Sie F-Droid.apk über adb herunterladen und installieren? (JA/nein)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Möchten Sie die App(s) von f-droid.org herunterladen? (JA/nein)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' zum Erzeugen von Schlüsseln" @@ -2077,29 +2079,30 @@ msgstr "Sie können ANDROID_HOME verwenden, um den Pfad zu Ihrem SDK zu setzen, msgid "ZIP file archive" msgstr "ZIP-Dateiarchiv" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb meldet {serial} ist „{status}“!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" -msgstr "Füge IdentityFile zu {path} hinzu" +msgstr "IdentityFile zu {path} hinzufügen" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" msgstr "Hinzufügen zu {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "Mehrdeutige Option: %(option)s könnte übereinstimmen mit %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "Mehrdeutige Option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner in build-tools;{version} übergibt APKs mit ungültigen v3-Signaturen und ignoriert sie." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2109,11 +2112,13 @@ msgstr "apksigner nicht gefunden! Moderne APKs können nicht signiert oder verif msgid "apksigner not found, it's required for signing!" msgstr "apksigner nicht gefunden, er wird zum Signieren benötigt!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "App-ID der Datei, die bearbeitet werden soll" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2124,8 +2129,6 @@ msgstr "App-ID mit fakultativem Versionscode in der Form APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url muss mit /archive enden" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2144,7 +2147,7 @@ msgstr "Versuch einer reinen SSH-Verbindung, um den Deployment-Key zu testen:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "kann scrlib-Spezifikation nicht parsen (keine Zeichenkette): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s' kann nicht geöffnet werden: %(error)s" @@ -2158,18 +2161,14 @@ msgstr "Nicht-HTTPS-URL kann nicht geöffnet werden: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "Konnte die benötigten srclibs nicht finden: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Mehrere Subparser-Argumente sind unzulässig" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" -msgstr "kann keine Aktionen zusammenführen - zwei Gruppen heißen %r" +msgstr "kann keine Aktionen zusammenführen – zwei Gruppen heißen %r" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" @@ -2184,14 +2183,6 @@ msgstr "Klone {url}" msgid "commands from plugin modules:" msgstr "Befehle aus den PlugIn-Modulen:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "komplex" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2222,10 +2213,6 @@ msgstr "konnte srclib-Spezifikation nicht parsen (kein Name angegeben): '{}'" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "konnte srclib-Spezifikation nicht parsen (zu viele '@'-Zeichen): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2243,15 +2230,13 @@ msgstr "Lösche: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "Abhängigkeitsdatei ohne Sperre" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "Verarbeitungsprotokoll {path} unter {dest} bereitgestellt" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2269,8 +2254,6 @@ msgstr "Herunterladen der Scanner-Signaturen von '{}' fehlgeschlagen" msgid "executable binary, possibly code" msgstr "ausführbare Binärdatei, vermutlich Code" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2278,20 +2261,14 @@ msgid_plural "expected %s arguments" msgstr[0] "%s Argument erwartet" msgstr[1] "%s Argumente erwartet" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "mindestens ein Argument erwartet" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "höchstens ein Argument erwartet" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "ein Argument erwartet" @@ -2304,10 +2281,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "Abrufen der neuesten Version von Signaturen aus dem Web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "Gleitkomma" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Erzwingen, dass Metadatenfehler (Standard) als Warnung ausgegeben oder ignoriert werden." @@ -2320,8 +2293,6 @@ msgstr "git svn Klonen fehlgeschlagen" msgid "gzip file archive" msgstr "gzip Dateiarchiv" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2335,35 +2306,21 @@ msgstr "index-v1 muß eine Signatur haben, verwenden Sie `fdroid signindex` um s msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 muss eine Signatur haben, verwenden Sie `fdroid signindex`, um sie zu erstellen!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "Ganzzahl" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "Ungültige(r) %(type)s mit Wert: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "Ungültige Auswahl: %(value)r (Wählen Sie aus %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "Ungültiger conflict_resolution-Wert: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2399,10 +2356,8 @@ msgstr "Spiegelserver '%s' ended nicht mit 'fdroid'!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "Mirrors zweimal gesetzt, in config.yml und {path}!" +msgstr "Spiegelserver zweimal gesetzt, in config.yml und {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "sich gegenseitig ausschließende Argumente müssen optional sein" @@ -2421,30 +2376,15 @@ msgstr "kein \"icon\" in {appid}" msgid "no APK supplied" msgstr "kein APK bereitgestellt" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "keine solche Option: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "keine Versionsinformation gefunden!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "keine Versionsinformation gefunden" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "unzulässig mit Argument %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2454,72 +2394,6 @@ msgstr "eines der Argumente %s ist erforderlich" msgid "only accepts strings, lists, and tuples" msgstr "akzeptiert nur Zeichenketten, Listen und Tupel" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "Option %s: Wenn Sie wirklich alle signierten Apps installieren wollen, verwenden Sie --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "Option %s: ungültiger %s Wert: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "Option %s: ungültige Wahl: %r (wählen Sie aus %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "Option -%s nicht erkannt" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "Option -%s erfordert Argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "Option --%s darf kein Argument haben" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "option --%s ist kein eindeutiges Präfix" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "Option --%s nicht erkannt" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "Option --%s erfordert Argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "optionale Argumente" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "Optionen" @@ -2529,8 +2403,6 @@ msgstr "Optionen" msgid "overwriting existing {path}" msgstr "überschreiben des vorhandenen {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "Positionsparameter" @@ -2538,7 +2410,7 @@ msgstr "Positionsparameter" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" -msgstr "Bereitstellen des Process Log {path} auf {dest} ist fehlgeschlagen!" +msgstr "Bereitstellen des Verarbeitungsprotokolls {path} auf {dest} ist fehlgeschlagen!" #: ../fdroidserver/build.py msgid "reference binary missing signature" @@ -2563,19 +2435,15 @@ msgstr "repo_url muss mit /repo enden" msgid "rsync is missing or broken: {error}" msgstr "rsync fehlt oder ist kaputt: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml ist nicht installiert, kann Metadaten nicht schreiben." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" -msgstr "s3cmd-Sync {path} indizieren auf {url} und dann löschen" +msgstr "s3cmd synchronisiert Indizes von {path} nach {url} und löscht diese" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd-Sync {path} indizieren auf {url} und dann löschen" +msgstr "s3cmd synchronisiert Indizes von {path} nach {url} und löscht entfernte" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2590,17 +2458,7 @@ msgstr "serverwebroot: Der Pfad endet nicht mit \"fdroid\", vielleicht meinten S msgid "shared library" msgstr "dynamische Bibliothek" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "Versionsnummer der Anwendung anzeigen und beenden" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "diese Hilfemeldung anzeigen und beenden" @@ -2634,29 +2492,25 @@ msgstr "statische Bibliothek" msgid "supplied reference binary has allowed signer {signer}" msgstr "Angewandte Referenz-Binary erlaubt Signer {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "die folgenden Argumente sind erforderlich: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "wahr" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Unerwartete Optionsverkettung: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "Unbekannter Parser %(parser_name)r (Auswahl: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2667,9 +2521,7 @@ msgstr "nicht erkannte Argumente: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "Unsichere Berechtigungen in „{config_file}” (sollte 0600 sein)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "Syntax: " @@ -2682,33 +2534,35 @@ msgstr "Verwende Apache libcloud zur Synchronisation mit {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limitiert die Zugriffe, warte auf Wiederholung …" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "ja" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" -msgstr[0] "{0} app, {1} Schlüsselaliase" -msgstr[1] "{0} apps, {1} Schlüsselaliase" +msgstr[0] "{0} App, {1} Schlüssel-Aliase" +msgstr[1] "{0} Apps, {1} Schlüssel-Aliase" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) besitzt keine Metadaten!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} hat mehrere {name} Dateien, sieht aus wie Master Key Exploit!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "Die AndroidManifest.xml der App „{apkfilename}” hat ein ungültiges Datum: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} besitzt keinen Namen! Die Anwendungs-ID wird stattdessen verwendet." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2717,7 +2571,7 @@ msgstr "{appid} von {path} ist keine gültige Android-Anwendungs-ID!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" -msgstr "{appid} von {path} ist kein gültiger Java-Paketname!" +msgstr "{appid} aus {path} ist kein gültiger Java-Paketname!" #: ../fdroidserver/update.py #, python-brace-format @@ -2729,7 +2583,6 @@ msgstr "{appid} hat sowohl APKs als auch Dateien: {files}" msgid "{appid} is missing {name}" msgstr "{appid} fehlt {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2738,7 +2591,7 @@ msgstr "{appid}: unbekannte Extlib {path} im Build '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" -msgstr "{appid}: keine builds angegeben, läuft auf dem aktuellen source-Stand" +msgstr "{appid}: Kein Build angegeben; verwende aktuellen Quellen-Stand" #: ../fdroidserver/lint.py #, python-brace-format @@ -2770,10 +2623,10 @@ msgstr "{file} ist leer oder beschädigt!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" existiert nicht! Überprüfe \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} ist veraltet, benutze {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} ist ein Duplikat von {path2}, entfernen Sie eines!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2788,13 +2641,18 @@ msgstr "{path} existiert nicht! Erstellen Sie es durch Ausführen von:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" -msgstr "{path} hat die schlechte Dateisignatur \"{pattern}\", möglicher Janus-Exploit!" +msgstr "{path} hat falsche Dateisignatur \"{pattern}\", möglicher Janus-Exploit!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} wurde von virustotal {count} Mal markiert:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} hat den falschen Fingerabdruck {fingerprint}!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/el/LC_MESSAGES/fdroidserver.po b/locale/el/LC_MESSAGES/fdroidserver.po index d074ccad..5bd92c4a 100644 --- a/locale/el/LC_MESSAGES/fdroidserver.po +++ b/locale/el/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-05-10 13:24+0000\n" "Last-Translator: ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ \n" "Language-Team: Greek \n" @@ -41,6 +41,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" δεν έχει αρχείο μετα-δεδομένων που να ταιριάζει!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -51,11 +55,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Το \"{apkfilename}\" είναι ήδη εγκατεστημένο στο {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "Το \"{path}\" περιέχει ένα ξεπερασμένο {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -81,17 +80,6 @@ msgstr "Το \"{path}\" έχει υπογραφή από ένα κλειδί π msgid "\"{url}\" is not a valid URL!" msgstr "Το \"{url}\" δεν είναι έγκυρο URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Η επιλογή %(option)s απαιτεί %(number)d όρισμα" -msgstr[1] "Η επιλογή %(option)s απαιτεί %(number)d ορίσματα" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +95,6 @@ msgstr "" msgid "%d problems found" msgstr "%d προβλήματα εντοπίστηκαν" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [επιλογές]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +115,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "Το %s δεν είναι αποδεκτό πεδίο δόμησης" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "Η επιλογή %s δεν λαμβάνει τιμή" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "Το «keypass» δεν βρέθηκε στο config.yml!" @@ -162,8 +135,6 @@ msgstr "Το 'keystorepass' δεν βρέθηκε στο config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -177,11 +148,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -192,7 +158,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -202,13 +168,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ". __call__ () δεν έχει οριστεί" @@ -299,10 +267,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -329,6 +293,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -338,7 +310,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -389,16 +360,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -421,6 +399,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -434,6 +416,10 @@ msgstr "Η εντολή «%s» δεν αναγνωρίζεται.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -443,20 +429,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -476,6 +459,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -502,6 +486,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -564,11 +553,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -617,13 +601,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -659,12 +642,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -674,6 +651,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -691,6 +688,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -707,6 +713,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -776,10 +786,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -811,7 +817,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -876,15 +881,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -929,6 +932,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1014,16 +1022,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1136,6 +1140,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1165,6 +1174,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1225,7 +1238,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1260,7 +1272,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1278,13 +1289,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1295,10 +1320,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Επιλογές" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1356,6 +1377,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1442,6 +1468,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1455,12 +1490,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Μετονομασία αρχείων APK που δεν αντιστοιχούν με «όνομα.πακέτου_123.apk»" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1476,6 +1508,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Επανεγγραφή όλων των αρχείων μετα-δεδομένων" @@ -1489,6 +1526,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1536,6 +1578,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1656,6 +1702,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1720,6 +1770,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1741,11 +1795,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1755,7 +1804,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Βρέθηκε άγνωστη εξαίρεση!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1793,6 +1841,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1823,11 +1872,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Ενημέρωση πληροφοριών αποθετηρίου για νέα πακέτα" @@ -1841,6 +1885,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1860,11 +1905,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1879,27 +1920,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Χρήση" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Χρήση: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1917,6 +1941,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1933,11 +1962,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1948,6 +1972,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, fuzzy, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "χρήση Apache libcloud για συγχρονισμό με {url}" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1969,15 +1998,28 @@ msgstr "Επαλήθευση της ακεραιότητας των πακέτω msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Προειδοποίηση για πιθανά σφάλματα μετα-δεδομένων" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1990,6 +2032,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2002,6 +2052,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2012,19 +2067,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "Ασαφής επιλογή: %(option)s θα μπορούσε να ταιριάζει με %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "ασαφής επιλογή: %s (%s;)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2034,11 +2085,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2049,8 +2102,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2069,7 +2120,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "δεν είναι δυνατό το άνοιγμα του '%(filename)s': %(error)s" @@ -2083,14 +2134,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2109,14 +2156,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "Σύμπλεγμα" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2147,10 +2186,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2166,13 +2201,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2190,8 +2227,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2199,20 +2234,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2225,10 +2254,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2241,8 +2266,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2256,35 +2279,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2322,8 +2331,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2342,30 +2349,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "δεν υπάρχει τέτοια επιλογή: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2375,72 +2367,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "επιλογή -%s δεν αναγνωρίζεται" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "η επιλογή -%s απαιτεί επιχείρημα" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "η επιλογή --%s δεν πρέπει να έχει όρισμα" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "η επιλογή --%s δεν είναι ένα μοναδικό πρόθεμα" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "η επιλογή --%s δεν αναγνωρίζεται" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "η επιλογή --%s απαιτεί όρισμα" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "προεραιτικά επιχειρήματα" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2451,8 +2377,6 @@ msgstr "Επιλογές" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2485,13 +2409,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2507,17 +2432,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "εμφάνιση έκδοσης του προγράμματος κι έξοδος" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "εμφάνιση αυτού του βοηθητικού μηνύματος κι έξοδος" @@ -2551,29 +2466,25 @@ msgstr "στατική βιβλιοθήκη" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "Απαιτούνται τα ακόλουθα ορίσματα: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "άγνωστος συντακτικός αναλυτής %(parser_name)r (επιλογές: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2584,9 +2495,7 @@ msgstr "μη αναγνωρίσιμα ορίσματα: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "μη ασφαλή δικαιώματα στο '{config_file}' (πρέπει να είναι 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "χρήση: " @@ -2599,6 +2508,10 @@ msgstr "χρήση Apache libcloud για συγχρονισμό με {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2611,21 +2524,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2646,7 +2557,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2687,9 +2597,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2712,6 +2622,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/es/LC_MESSAGES/fdroidserver.po b/locale/es/LC_MESSAGES/fdroidserver.po index d625ff0a..64a43a1c 100644 --- a/locale/es/LC_MESSAGES/fdroidserver.po +++ b/locale/es/LC_MESSAGES/fdroidserver.po @@ -13,20 +13,22 @@ # Iago , 2022. # Jaime Marquínez Ferrándiz , 2022. # gallegonovato , 2022, 2023, 2024. +# Nicolás Pérez , 2025. +# Swyter , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-26 07:09+0000\n" -"Last-Translator: gallegonovato \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-06-24 11:02+0000\n" +"Last-Translator: Swyter \n" "Language-Team: Spanish \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: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.13-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -50,6 +52,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "¡\"%s/\" no tiene su correspondiente fichero de metadatos!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -60,11 +66,6 @@ msgstr "¡El directorio raíz para local_copy_dir \"{path}\" no existe!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" ya está instalado en {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contiene {name} ({version}) caducado" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -90,17 +91,6 @@ msgstr "\"{path}\" está firmado por una clave no permitida:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" no es una URL válida!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "la opción %(option)s requiere %(number)d argumento" -msgstr[1] "la opción %(option)s requiere %(number)d argumentos" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -116,14 +106,6 @@ msgstr "¡%d APKs fallaron al ser firmados o verificados!" msgid "%d problems found" msgstr "%d problemas encontrados" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opciones]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -144,13 +126,6 @@ msgstr "%s tienes mal un SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s no es un campo de construcción aceptado" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "la opción %s no toma un valor" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "¡'keypass' no encontrado en config.yml!" @@ -171,8 +146,6 @@ msgstr "¡'keystorepass' no encontrado en config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "¡'repo_keyalias' no encontrado en config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' es un argumento inválido para posicionales" @@ -186,11 +159,6 @@ msgstr "¡'sdk_path' no establecido en 'config.yml'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "¡'{aapt}' es demasiado antiguo, fdroid requiere build-tools-{version} o posterior!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "¡'{field}' estará en un orden aleatorio! ¡Use paréntesis () o [] si el orden es importante!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -201,7 +169,7 @@ msgstr "¡Falló la ejecución de '{path}'!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tiene un formato inválido, ¡debería ser un diccionario!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' no es un {field} válido en {appid}. Patrón de expresión regular: {pattern}" @@ -211,13 +179,15 @@ msgstr "'{value}' no es un {field} válido en {appid}. Patrón de expresión reg msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' no es un {field} válido, debería ser {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "¡--merge-request solo se ejecuta en un único ID de aplicación!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...falló la comprobación de actualizaciones para {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" @@ -308,10 +278,6 @@ msgstr "¡No se encontró la herramienta {cmd} del SDK de Android!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "La aplicación tiene archivos binarios, pero no las AllowedAPKSigningKeys correspondientes para fijat el certificado." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "La aplicación tiene NoSourceSince o ArchivePolicy \"0 versiones\", pero AutoUpdateMode o UpdateCheckMode no es Ninguno" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "La aplicación tiene NoSourceSince o ArchivePolicy \"versiones 0\" o 0, pero AutoUpdateMode o UpdateCheckMode no son Ninguna" @@ -338,6 +304,14 @@ msgstr "¡Archivando {apkfilename} con una firma inválida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode con UpdateCheckMode: el HTTP debe tener un patrón." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "No automático a todos las solicitudes." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "No automático a todos los avisos." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -347,7 +321,6 @@ msgstr "Tipo de entrada incorrecto \"{mirrortype}\" en la configuración de los msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para replicar, puede incluir la clave de firma del índice usando la cadena de consulta: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -398,16 +371,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se puede construir debido al error {} mientras se comprobaba" msgstr[1] "No se puede construir debido a los errores {} mientras se comprobaba" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Fallo al leer {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No se puede reescribir \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "La categoría '%s' no es válida" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "No se han establecido categorías" @@ -430,6 +410,10 @@ msgstr "Comprobando la operación de archivo para {appid} - APKs:{integer}, vers msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualización limpia, no usa la caché, procesa todas las APKs" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Colorear el registro de salida" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por comas." @@ -443,6 +427,10 @@ msgstr "No se reconoció la orden «%s».\n" msgid "Commit changes" msgstr "Aplicar cambios" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Confirmar los cambios, empujar, a continuación, hacer una solicitud de fusión" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -452,20 +440,17 @@ msgstr "Definiciones \"{field}\" contradictorias entre los archivos .yml y los a msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos incompatibles: No se puede especificar \"--verbose\" y \"--quiet\" a la vez." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Archivos de configuración en conflicto. ¡Usando {newfile}, ignorando {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No se pudo encontrar '{command}' en el sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "No se pudo encontrar el último código de versión" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "No se pudo encontrar el último nombre de versión" @@ -485,6 +470,7 @@ msgstr "No se pudo abrir el archivo APK {path} para analizarlo: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "No se puede procesar el tamaño \"{size}\", tipo erróneo \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "No se pudo encontrar el identificador de aplicación" @@ -511,6 +497,11 @@ msgstr "Se ha creado el contenedor nuevo \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creando \"{path}\" para configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Creando el archivo vacío {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creando el directorio de registro (\"log\")" @@ -573,11 +564,6 @@ msgstr "La descripción '%s' es simplemente el resumen de la aplicación" msgid "Description has a duplicate line" msgstr "La descripción contiene una línea duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "La descripción tiene una lista (%s) pero no está estructurada (*) ni numerada (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -626,15 +612,14 @@ msgstr "No actualizar el repositorio, útil al probar una compilación sin conex msgid "Don't use rsync checksums" msgstr "No use rsync checksums" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Descarga F-Droid.apk usando espejos que filtren menos a la red" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descargar réplicas completas de repositorios pequeños" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Descargando %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "La descarga del repositorio ya falló una vez, no se intentará de nuevo." @@ -668,14 +653,6 @@ msgstr "ERROR: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: ¡El subcomando \"server\" se ha eliminado. Use \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERROR: ¡esta orden no se debería usar nunca para replicar f-droid.org!\n" -"Una réplica completa de f-droid.org requiere más de 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tipo de CI no soportado, ¡se aceptan parches!" @@ -688,12 +665,22 @@ msgstr "ERROR: host git no soportado \"%s\", ¡parches bienvenidos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "ERROR: ¡{key} en {path} no es un \"archivo\" o un \"repositorio\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERROR: ¡{key}:{subkey} en {path} no está en las claves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -714,9 +701,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "¡La variable de entorno {var} de {configname} no tiene valor asignado!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "¡La variable de entorno {var} de {configname} no tiene valor asignado!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Error desplegando 'github_releases', {} no está presente. (Puede que necesites ejecutar `fdroid update` primero)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -734,6 +726,10 @@ msgstr "Extraer los metadatos de la aplicación de un repositorio de origen" msgid "Extract signatures from APKs" msgstr "Extraer firmas de APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "¡F-Droid.apk no pudo ser descargado de ninguna fuente conocida!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -803,10 +799,6 @@ msgstr "El archivo desapareció al procesarlo: {path}" msgid "Finished" msgstr "Terminado" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Los métodos de donación de Flattr pertenecen al FlattrID: field" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiquetas HTML prohibidas" @@ -838,7 +830,6 @@ msgstr "Se encontró archivo de financiación \"{path}\" para \"{name}\":" msgid "Found invalid appids in arguments" msgstr "Se encontraron identificadores de aplicaciones inválidos en los argumentos" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Se encontraron códigos de versión (versionCodes) inválidos para algunas aplicaciones" @@ -903,15 +894,13 @@ msgstr "Git clean falló" msgid "Git fetch failed" msgstr "Git fetch falló" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Falló la extracción de Git" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falló: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falló" @@ -956,6 +945,11 @@ msgstr "Ignorando entrada en FUNDING.yml mayor de 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorar el elemento incorrecto en el manifiesto: %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} está obsoleto, use {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando paquete sin metadatos: " @@ -1041,16 +1035,12 @@ msgstr "VercodeOperation no válida: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation no válido: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID de aplicación inválido {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Valor booleano no válido '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista no numerada no válida" @@ -1163,6 +1153,11 @@ msgstr "Línea serverwebroot mal formada:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Se alcanzó el máximo en el archivo ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Crea un espejo completo del repositorio y del archivo, todos los tipos de fichero." @@ -1192,6 +1187,10 @@ msgstr "¡No se encontró Android SDK!" msgid "No attached devices found" msgstr "No se han encontrado dispositivos asociados" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "¡No se han encontrado dispositivos para `adb install`! Por favor, conecte uno." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "No hay huella digital en la URL." @@ -1252,7 +1251,6 @@ msgstr "No se ha encontrado ningún certificado de firma en {path}" msgid "No such package: %s" msgstr "No existe tal paquete: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1287,7 +1285,6 @@ msgstr "Nada que hacer para {appid}." msgid "Now set these in config.yml:" msgstr "Ahora establezca lo siguiente en config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1305,26 +1302,28 @@ msgstr "El nombre de paquete de OBB no coincide con un APK soportado:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maquina desconectada. Saltando la generación del repositorio espejo git hasta`fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "A uno de los elementos de configuración de 'github_releases' le falta el valor 'packageNames'. omitiendo ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "A uno de los elementos de configuración 'github_releases' le falta el valor 'projectUrl'. omitiendo ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "A uno de los elementos de configuración 'github_releases' le falta el valor 'token'. Omitiendo ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Sólo PNG y JPEG son compatibles con los gráficos, encontrados: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Solo imprimir diferencias con el Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1334,10 +1333,6 @@ msgstr "Solo procesar aplicaciones con actualizaciones automáticas" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Los métodos de donación de OpenCollective pertenecen al OpenCollective: field" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opciones" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Sacar el informe JSON a un fichero nombrado según el APK." @@ -1395,6 +1390,11 @@ msgstr "Ruta al depósito de claves para la clave de firma de repositorio" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Mostrar la variable secreta en el terminal para copiar/pegar fácilmente" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Se ha activado el modo de privacidad en función de su configuración regional ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1481,6 +1481,15 @@ msgstr "Leyendo {apkfilename} desde caché" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualización y almacenamiento en caché de las reglas y firmas del escáner desde la red" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Elimine el archivo tar de origen y todos los APK si se verifican correctamente." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Removiendo archivos especificados" @@ -1494,13 +1503,10 @@ msgstr "Eliminando {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Cambiar el nombre de archivos APK que no coinciden con el formato package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "El modo de actualización RepoTrunk solo tiene sentido en repositorios git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Restablecer y crear un nuevo servidor de compilación, incluso si el existente parece estar bien." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1515,6 +1521,11 @@ msgstr "Cambiar el tamaño de todos los iconos que exceden el tamaño máximo de msgid "Restrict output to warnings and errors" msgstr "Restringir los resultados a advertencias y errores" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Reintentando descarga fallida: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescribir todos los archivos de metadatos" @@ -1531,7 +1542,7 @@ msgstr "Ejecutar en repositorio git con cambios pendientes" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Ejecutar sobre {cibase} para encontrar -debug.apk. y omitir repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1580,6 +1591,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "El escáner encontró {} problema" msgstr[1] "El escáner encontró {} problemas" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Escaneando el APK en busca de bloques de firma adicionales." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Escaneo del APK con dexdump para clases no gratuitas conocidas." @@ -1700,6 +1715,10 @@ msgstr "El modo de actualización de etiquetas se utilizó en git-svn, pero el r msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de prueba: ponga la salida solo en el directorio tmp y siga desarrollando, incluso si la salida ya existe." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1772,9 +1791,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "¡Para usar awsbucket hay que configurar también awssecretkey y awsaccesskeyid en config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "¡Para usar awsbucket hay que configurar también awssecretkey y awsaccesskeyid en config.yml!" +msgstr "¡Para utilizar rclone, rclone_config y awsbucket deben estar configurados en config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1797,11 +1815,6 @@ msgstr "¡Etiqueta de licencia inesperada \"{}\"! Use solo etiquetas aprobadas p msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "¡Etiqueta de licencia inesperada \"{}\"! Use solo etiquetas de licencia configuradas en su archivo de configuración" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Destino del enlace simbólico inesperado: {link} ->{target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1809,9 +1822,8 @@ msgstr "Entrada desconocida {key} en {configname}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" -msgstr "¡Se encontró una excepción desconocida!" +msgstr "Se ha producido una excepción desconocida" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1849,6 +1861,7 @@ msgstr "Campo de app '{fieldname}' desconocido en '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flag de compilación '{build_flag}' desconocido en '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1879,11 +1892,6 @@ msgstr "Ruta scandelete sin uso: %s" msgid "Unused scanignore path: %s" msgstr "Ruta scanignore sin uso: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Descomprimiendo a %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizar la información del repositorio para nuevos paquetes" @@ -1897,6 +1905,7 @@ msgstr "Actualizar el registro de transparencia binario para una URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tiene una URL no válida: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1916,11 +1925,7 @@ msgstr "UpdateCheckData tiene una URL no válida: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode está configurado pero parece que aún no se han ejecutado las actualizaciones." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode está activado pero parece que aún no se ha ejecutado checkupdates" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName está configurado con el ID de la aplicación conocida, se puede eliminar" @@ -1935,27 +1940,10 @@ msgstr "Subiendo {apkfilename} a androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Subiendo {apkfilename} a virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Utilización" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Uso: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Utiliza /HEAD en lugar de /master o /main para apuntar a un archivo de la rama por defecto" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Use /HEAD en vez de /master para apuntar a un fichero en la rama por omisión" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use `fdroid update -c` para crearlo." @@ -1974,9 +1962,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Usando \"{path}\" para configurar s3cmd." +msgstr "Usando \"{path}\" para sincronizar con almacenamiento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1994,11 +1982,6 @@ msgstr "Utilizar la firma JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "¡Usando jarsigner de Java. No recomendado para verificar APKs! Use apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Usando androguard de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2010,9 +1993,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Usando almacén de claves existente \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Usando s3cmd para sincronizar con: {url}" +msgstr "Usando rclone para sincronizar con: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2021,7 +2004,7 @@ msgstr "Usando s3cmd para sincronizar con: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" -msgstr "Los comandos válidos son:" +msgstr "Las órdenes válidas son:" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." @@ -2035,15 +2018,28 @@ msgstr "Verificar la integridad de los paquetes descargados" msgid "Verifying index signature:" msgstr "Verificar el índice de la firma:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Verificando el paquete {path} con apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La clave de API de VirusTotal no puede subir archivos mayores de 32MB. Use {url} para subir {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Alertar sobre posibles errores de metadatos" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Archivo binario WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Cuando está configurado para índices firmados, crear solo índices sin signo en esta etapa" @@ -2056,6 +2052,14 @@ msgstr "Cuando se limpia el repositorio completo yamllint está deshabilitado po msgid "When signing or verifying fails, exit with an error code." msgstr "Cuando falla la firma o la verificación, sale con un código de error." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "¿Desea descargar e instalar F-Droid.apk mediante adb? (SÍ/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "¿Desea descargar la(s) aplicación(es) de f-droid.org? (SÍ/no)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Nombre Distintivo' (DN) usado al generar claves" @@ -2068,6 +2072,11 @@ msgstr "Puede usar ANDROID_HOME para definir la ruta a su SDK, p.ej.:" msgid "ZIP file archive" msgstr "Archivo de ficheros ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "¡adb informa que {serial} es \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2078,19 +2087,15 @@ msgstr "añadiendo IdentityFile a {path}" msgid "adding to {name}: {path}" msgstr "añadiendo a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opción ambigua: %(option)s podría corresponderse con %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opción ambigua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner en build-tools;{version} pasa APK con firmas v3 no válidas, ignorándolos." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2100,11 +2105,13 @@ msgstr "¡No se encontró apksigner! No se pueden firmar o verificar los APKs mo msgid "apksigner not found, it's required for signing!" msgstr "¡Se requiere apksigner para firmar pero no se encontró!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "identificador de aplicación del fichero en el que operar" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2115,8 +2122,6 @@ msgstr "identificador de aplicación con código de versión opcional en la form msgid "archive_url needs to end with /archive" msgstr "El archive_url debe terminar con /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2135,7 +2140,7 @@ msgstr "intentando conexión SSH pura para probar la llave de despliegue:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "no se puede procesar (no es una cadena) la especificación scrlib: '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no se puede abrir '%(filename)s': %(error)s" @@ -2149,14 +2154,10 @@ msgstr "no se puede abrir una url que no sea https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "no se encuentran las srclibs requeridas: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "no se puede tener varios argumentos de subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2175,14 +2176,6 @@ msgstr "clonando {url}" msgid "commands from plugin modules:" msgstr "órdenes de módulos de extensión (plugins):" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complejo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2213,10 +2206,6 @@ msgstr "no se ha podido analizar la especificación srclib (no se ha especificad msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "no se pudo procesar especificación srclib (demasiadas arrobas '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2234,15 +2223,13 @@ msgstr "eliminando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "archivo de dependencia sin bloqueo" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registro de proceso {path} desplegado en '{dest}'" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2260,8 +2247,6 @@ msgstr "la descarga del escaneo de la firma para '{}' falló" msgid "executable binary, possibly code" msgstr "binario ejecutable, posiblemente código" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2269,20 +2254,14 @@ msgid_plural "expected %s arguments" msgstr[0] "argumento inesperado %s" msgstr[1] "argumentos inesperados %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "se esperaba al menos 1 argumento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "no se esperaba más de 1 argumento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "se esperaba 1 argumento" @@ -2295,10 +2274,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "obtener la última versión de las firmas de la web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "punto flotante" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forzar que los errores en metadatos sean avisos, o que se ignoren (valor predeterminado: errores)." @@ -2311,8 +2286,6 @@ msgstr "falló git svn clone" msgid "gzip file archive" msgstr "archivo de ficheros gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2326,35 +2299,21 @@ msgstr "¡index-v1 tiene que tener una firma, use `fdroid signindex` para crearl msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 debe tener una firma, ¡ use `f droid signindex` para crearla!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "entero" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido de tipo %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opción no válida: %(value)r (escoja de entre %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor para conflict_resolution no válido: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2392,8 +2351,6 @@ msgstr "¡el espejo '%s' no termina en 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "¡espejos establecidos dos veces, en config.yml y {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "los argumentos mutuamente exclusivos tienen que ser opcionales" @@ -2412,30 +2369,15 @@ msgstr "{appid} sin \"icono\"" msgid "no APK supplied" msgstr "no se ha indicado APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "no hay tal opción: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "¡no se encontró información de la versión!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "no se encontró información de la versión" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "no permitido con el argumento %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2445,72 +2387,6 @@ msgstr "se necesita 1 de los argumentos %s" msgid "only accepts strings, lists, and tuples" msgstr "solo acepta cadenas, listas, y tuplas" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opción %s: Si de verdad quiere instalar todas las apps firmadas use --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "opción %s: valor de %s no válido: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opción %s: selección no válida: %r (elija de entre %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opción -%s no reconocida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opción -%s requiere un argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opción --%s no puede llevar argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opción --%s no es un prefijo único" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opción --%s no reconocida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opción --%s requiere un argumento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumentos opcionales" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opciones" @@ -2520,8 +2396,6 @@ msgstr "opciones" msgid "overwriting existing {path}" msgstr "sobrescribiendo {path} existente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionales" @@ -2554,19 +2428,15 @@ msgstr "repo_url debe terminar con /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync no existe o no funciona: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml no instalado. No se pueden escribir metadatos." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync indexa {path} a {url} y elimina" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sync indexa {path} a {url} y elimina" +msgstr "s3cmd sincroniza los índices de {path} a {url} y borra los eliminados" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2581,17 +2451,7 @@ msgstr "serverwebroot: la ruta no termina con \"fdroid\", tal vez se refería a msgid "shared library" msgstr "biblioteca compartida" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostrar el número de versión del programa y salir" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar este mensaje de ayuda y salir" @@ -2625,29 +2485,25 @@ msgstr "biblioteca estática" msgid "supplied reference binary has allowed signer {signer}" msgstr "el archivo binario de referencia ha proporcionado autorización al firmante {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "se requieren los siguientes argumentos: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "verdadero" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "cadena de opción inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser '%(parser_name)r' desconocido. (Opciones válidas: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2658,9 +2514,7 @@ msgstr "argumentos no reconocidos: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisos inseguros en '{config_file}' (¡debería ser 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " @@ -2673,6 +2527,10 @@ msgstr "usando Apache libcloud para sincronizar con {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com está limitando el consumo, esperando para reintentar..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sí" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2685,21 +2543,19 @@ msgstr[1] "{0} aplicaciones, {1} alias de clave" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "¡{apkfilename} ({appid}) no tiene metadatos!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "¡{apkfilename} tiene multiples ficheros {name}, parece un exploit de clave maestra!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "El AndroidManifest.xml de {apkfilename} tiene la fecha mal: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "¡{appid} no tiene nombre! Usando su identificador." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2720,7 +2576,6 @@ msgstr "{appid} tiene tanto APKs como archivos: {files}" msgid "{appid} is missing {name}" msgstr "{appid} no tiene {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2761,10 +2616,10 @@ msgstr "¡{file} está vacío o corrupto!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "¡{name} \"{section}/icons/{path}\" no existe! Corrijalo en config.yml." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} está obsoleto, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2786,6 +2641,11 @@ msgstr "¡{path} tiene una firma de fichero \"{pattern}\" mala, posible exploit msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} ha sido marcado por virustotal {count} veces:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "¡{path} tiene la huella incorrecta ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/es_AR/LC_MESSAGES/fdroidserver.po b/locale/es_AR/LC_MESSAGES/fdroidserver.po index 66858ede..a15ddd81 100644 --- a/locale/es_AR/LC_MESSAGES/fdroidserver.po +++ b/locale/es_AR/LC_MESSAGES/fdroidserver.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-04-10 21:26+0000\n" "Last-Translator: Germe the fur star \n" "Language-Team: Spanish (Argentina) \n" @@ -39,6 +39,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -49,11 +53,6 @@ msgstr "directorio_copia_local ¡tiene que ser una ruta absoluta!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -79,17 +78,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -105,14 +93,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opciones]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -133,13 +113,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -160,8 +133,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -175,11 +146,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +156,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -200,13 +166,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() no definida" @@ -300,10 +268,6 @@ msgstr "No se encontró Android SDK!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -330,6 +294,14 @@ msgstr "Archivando {apkfilename} con una firma invalida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -339,7 +311,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -390,16 +361,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "No se pudo empaquetar debido al {} error mientras se escaneaba" msgstr[1] "No se pudo empaquetar debido a los {} errores mientras se escaneaba" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "No se puede reescribir \"{path}\"" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "No se puede reescribir \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -422,6 +400,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Limpiar actualización - no utiliza cachés, reprocesa todos los APK's" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por coma." @@ -435,6 +417,10 @@ msgstr "No se reconoce el comando \"%s\".\n" msgid "Commit changes" msgstr "Cometer cambios" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -444,21 +430,18 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "Empaquetado con la ultima versión de cada paquete" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" @@ -479,6 +462,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" @@ -507,6 +491,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -569,11 +558,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -622,13 +606,12 @@ msgstr "No refrescar el repositorio, útil cuando se esta probando la construcci msgid "Don't use rsync checksums" msgstr "No usar sumas de validación de rsync" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -664,12 +647,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -679,6 +656,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -696,6 +693,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -712,6 +718,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -781,10 +791,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -816,7 +822,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -881,15 +886,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -934,6 +937,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1019,16 +1027,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1143,6 +1147,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1172,6 +1181,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1232,7 +1245,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1268,7 +1280,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1286,14 +1297,28 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Solo mostrar las diferencias con el Plays Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1303,10 +1328,6 @@ msgstr "Solo procesar las aplicaciones que cuenten con actualizaciones automatic msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opciones" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1365,6 +1386,11 @@ msgstr "Ruta al almacén de claves para la llave de firmado del repositorio" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1452,6 +1478,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1465,14 +1500,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renombrar archivos APK que no corresponden a package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Restablecer y crear un nuevo servidor de compilación, incluso si el existente parece estar bien." - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1486,6 +1518,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "Restringir la salida solo para advertencias y errores" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rescribir todos los archivos de metadatos" @@ -1499,6 +1536,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1546,6 +1588,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1666,6 +1712,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo prueba - pone la salida solo en el directorio temporal, y siempre construye, incluso cuando la salida ya exista." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1730,6 +1780,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1751,11 +1805,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1765,7 +1814,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "¡Se encontró una excepción desconocida!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1803,6 +1851,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1833,11 +1882,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizar información del repositorio para paquetes nuevos" @@ -1851,6 +1895,7 @@ msgstr "Actualizar el registro de transparencia binario de un URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1870,11 +1915,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1889,27 +1930,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Uso" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Uso: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1927,6 +1951,11 @@ msgstr "Utilizar la fecha del APK en vez de la actual para los APKs nuevos que s msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1943,11 +1972,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1958,6 +1982,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, fuzzy, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "usando libcloud de Apache para sincronizar con {url}" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1979,15 +2008,28 @@ msgstr "Verificar la integridad de los paquetes descargados" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advertir sobre posibles errores en los metadatos" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Si está configurado para índices firmados, crear sólo índices sin firma en este punto" @@ -2000,6 +2042,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py #, fuzzy msgid "X.509 'Distinguished Name' used when generating keys" @@ -2013,6 +2063,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2023,19 +2078,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opción ambigua: %(option)s podría corresponderse con %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opción ambigua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2045,12 +2096,14 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "app-id para verificar actualizaciones" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2062,8 +2115,6 @@ msgstr "app-id con VersionCode opcional con el formato APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2082,7 +2133,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "no se puede abrir '%(filename)s': %(error)s" @@ -2096,14 +2147,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2122,14 +2169,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2160,10 +2199,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2179,13 +2214,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2203,8 +2240,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2212,20 +2247,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2239,10 +2268,6 @@ msgstr "uso: fdroid [-h|--help|--version] []" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forzar errores al ser advertencias, o ignorar." @@ -2255,8 +2280,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2270,35 +2293,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2337,8 +2346,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2357,32 +2364,16 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "no hay tal opción: %s" - -#: ../fdroidserver/__main__.py -#, fuzzy -msgid "no version info found!" -msgstr "¡Se encontró una excepción desconocida!" - #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "¡Se encontró una excepción desconocida!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2392,72 +2383,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "No se reconoce el comando \"%s\"" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opción -%s requiere un argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opción --%s no puede llevar argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opción --%s no es un prefijo único" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "No se reconoce el comando --\"%s\"" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opción --%s requiere un argumento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumentos opcionales" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2468,8 +2393,6 @@ msgstr "Opciones" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionales" @@ -2502,13 +2425,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2525,17 +2449,7 @@ msgstr "local_copy_dir no termina en \"fdroid\", quizá quiso escribir: \"{path} msgid "shared library" msgstr "librería compartida" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostrar el número de versión del programa y salir" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar este mensaje de ayuda y salir" @@ -2569,29 +2483,25 @@ msgstr "librería estática" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "se requieren los siguientes argumentos: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Cadena de opción inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2602,9 +2512,7 @@ msgstr "argumentos no reconocidos: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " @@ -2617,6 +2525,10 @@ msgstr "usando libcloud de Apache para sincronizar con {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2629,21 +2541,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "el AndroidManifest.xml del {apkfilename} tiene una mala fecha: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2664,7 +2574,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2705,9 +2614,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2730,6 +2639,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/es_MX/LC_MESSAGES/fdroidserver.po b/locale/es_MX/LC_MESSAGES/fdroidserver.po index 03f0a510..aaddd007 100644 --- a/locale/es_MX/LC_MESSAGES/fdroidserver.po +++ b/locale/es_MX/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2020-04-29 12:49+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Spanish (Mexico) \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opciones]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +354,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualización limpia: no usar cachés, reprocese todos los APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorías separadas por comas." @@ -428,6 +410,10 @@ msgstr "El comando '%s' no fue reconocido\n" msgid "Commit changes" msgstr "Hacer Cambios" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,21 +423,18 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "No se pudo encontrar '{command}' en su sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "No se pudo encontrar el código de la última versión" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" @@ -472,6 +455,7 @@ msgstr "No se pudo abrir el archivo APK para su análisis" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" @@ -500,6 +484,11 @@ msgstr "Se creó un nuevo contenedor \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creando \"{path}\" para configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creando directorio de registro" @@ -562,11 +551,6 @@ msgstr "Descripción '%s' es solo el resumen de la aplicación" msgid "Description has a duplicate line" msgstr "La descripción tiene una línea duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -615,13 +599,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -657,12 +640,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -672,6 +649,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -689,6 +686,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -705,6 +711,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -774,10 +784,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -809,7 +815,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -874,15 +879,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -927,6 +930,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1012,16 +1020,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1134,6 +1138,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1163,6 +1172,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1223,7 +1236,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1258,7 +1270,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1276,13 +1287,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1293,10 +1318,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1354,6 +1375,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1440,6 +1466,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1453,12 +1488,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1474,6 +1506,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1487,6 +1524,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1534,6 +1576,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1654,6 +1700,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1718,6 +1768,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1739,11 +1793,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1753,7 +1802,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1791,6 +1839,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1821,11 +1870,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1839,6 +1883,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1858,11 +1903,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1877,27 +1918,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1915,6 +1939,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1931,11 +1960,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1946,6 +1970,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1967,15 +1996,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1988,6 +2030,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2000,6 +2050,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2010,18 +2065,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2032,11 +2083,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2047,8 +2100,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2067,7 +2118,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2081,14 +2132,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2107,14 +2154,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complejo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2145,10 +2184,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2164,13 +2199,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2188,8 +2225,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2197,20 +2232,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2223,10 +2252,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2239,8 +2264,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2254,35 +2277,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2320,8 +2329,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2340,30 +2347,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2373,72 +2365,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2449,8 +2375,6 @@ msgstr "%prog [opciones]" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2483,13 +2407,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2505,17 +2430,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2549,29 +2464,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2582,9 +2493,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2597,6 +2506,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2609,21 +2522,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2644,7 +2555,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2685,9 +2595,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2710,6 +2620,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/eu/LC_MESSAGES/fdroidserver.po b/locale/eu/LC_MESSAGES/fdroidserver.po index c76db7fb..4cb555c2 100644 --- a/locale/eu/LC_MESSAGES/fdroidserver.po +++ b/locale/eu/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -33,6 +33,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -43,11 +47,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -73,17 +72,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -99,14 +87,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -127,13 +107,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -154,8 +127,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -169,11 +140,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -184,7 +150,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -194,13 +160,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -291,10 +259,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -321,6 +285,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -330,7 +302,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -381,16 +352,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -413,6 +391,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -426,6 +408,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -435,20 +421,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -468,6 +451,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -494,6 +478,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -556,11 +545,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -609,13 +593,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -651,12 +634,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -666,6 +643,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -683,6 +680,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -699,6 +705,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -768,10 +778,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -803,7 +809,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -868,15 +873,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -921,6 +924,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1006,16 +1014,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1128,6 +1132,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1157,6 +1166,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1217,7 +1230,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1252,7 +1264,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1270,13 +1281,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1287,10 +1312,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1348,6 +1369,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1434,6 +1460,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1447,12 +1482,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1468,6 +1500,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1481,6 +1518,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1528,6 +1570,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1648,6 +1694,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1712,6 +1762,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1733,11 +1787,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1747,7 +1796,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1785,6 +1833,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1815,11 +1864,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1833,6 +1877,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1852,11 +1897,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1871,27 +1912,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1909,6 +1933,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1925,11 +1954,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1940,6 +1964,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1961,15 +1990,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1982,6 +2024,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1994,6 +2044,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2004,18 +2059,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2026,11 +2077,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2041,8 +2094,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2061,7 +2112,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2075,14 +2126,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2101,14 +2148,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "konplexua" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2139,10 +2178,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2158,13 +2193,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2182,8 +2219,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2191,20 +2226,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2217,10 +2246,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2233,8 +2258,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2248,35 +2271,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2314,8 +2323,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2334,30 +2341,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2367,72 +2359,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2442,8 +2368,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2476,13 +2400,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2498,17 +2423,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2542,29 +2457,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2575,9 +2486,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2590,6 +2499,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2602,21 +2515,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2637,7 +2548,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2678,9 +2588,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2703,6 +2613,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/fa/LC_MESSAGES/fdroidserver.po b/locale/fa/LC_MESSAGES/fdroidserver.po index 641e53b5..ff34a457 100644 --- a/locale/fa/LC_MESSAGES/fdroidserver.po +++ b/locale/fa/LC_MESSAGES/fdroidserver.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-07-23 04:12+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2024-11-26 15:16+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "Language: fa\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -37,20 +37,19 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "\"local_copy_dir\" {path} وجود ندارد!" +msgstr "{path} ‏local_copy_dir وجود ندارد!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." -msgstr "\"{apkfilename}\" قبلا در {dev} نصب شده است." - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" +msgstr "{apkfilename} از پیش روی {dev} نصب شده." #: ../fdroidserver/update.py #, python-brace-format @@ -60,34 +59,23 @@ msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" -msgstr "\"{path}\" وجود دارد اما s3cmd نصب نشده است!" +msgstr "\"{path}\" وجود دارد ولی s3cmd نصب نیست!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" -msgstr "\"{path}\" از فرمتِ پرونده پشتیبانی نمی‌کند (استفاده کنید از: metadata/*.yml)" +msgstr "{path} قالب پروندهٔ پشتیبانی شده‌ای نیست (استفاده: ‪metadata/*.yml‬)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "\"{path}\" توسط کلیدی که مجاز نیست امضاء می‌شود:" +msgstr "{path} به دست کلیدی که مجاز نیست امضا شده:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" -msgstr "\"{url}\" یک نشانی وب معتبر نیست!" +msgstr "{url} نشانی معتبری نیست!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "گزینه %(option)s نیاز به آرگومان %(number)d دارد" -msgstr[1] "گزینه %(option)s نیاز به آرگومان‌های %(number)d دارد" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,20 +89,12 @@ msgstr "" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" -msgstr "" +msgstr "%d مشکل پیدا شد" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "کاوش کردن" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" -msgstr "‏%r قابل صدا زدن نیست" +msgstr "‏%r قابل فراخوانی نیست" #: ../fdroidserver/signindex.py #, python-format @@ -131,16 +111,9 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "گزینۀ %s مقداری را نمی‌گیرد" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" -msgstr "'keypass' وجود ندارد در config.yml!" +msgstr "keypass در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" @@ -148,47 +121,40 @@ msgstr "" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" -msgstr "'keystore' وجود ندارد در config.yml!" +msgstr "keystore در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" -msgstr "'keystorepass' وجود ندارد در config.yml!" +msgstr "keystorepass در config.yml پیدا نشد!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" -msgstr "'repo_keyalias' وجود ندارد در config.yml!" +msgstr "repo_keyalias در config.yml پیدا نشد!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "'required' یک آرگومان نامعتبر برای موقعیت‌ها است" +msgstr "required آرگومانی نامعتبر برای موقعیتی‌هاست" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" -msgstr "'sdk_path' تنظیم نشده است در config.yml!" +msgstr "sdk_path در config.yml تنظیم نشده!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" -msgstr "'{aapt}' خیلی قدیمی است، اف‌دروید بهbuild- tools-{version} یا جدیدتر نیاز دارد!" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' به ترتیب تصادفی خواهد بود! اگر مهم است از () یا [] کروشه‌ها استفاده کنید!" +msgstr "'{aapt}' بیش از حد قدیمی است. اف‌دروید به build- tools-{version} یا جدیدتر نیاز دارد!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" -msgstr "'{path}' اجرا نشد!" +msgstr "اجرای {path} شکست خورد!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -198,20 +164,22 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" -msgstr ".__call__() تعریف نشده است" +msgstr "‪.__call__()‬ تعریف نشده است" #: ../fdroidserver/lint.py msgid "/issues is missing" -msgstr "" +msgstr "‪/issues‬ موجود نیست" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" @@ -261,15 +229,15 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" -msgstr "" +msgstr "کتابخانهٔ AAR اندروید" #: ../fdroidserver/scanner.py msgid "Android APK file" -msgstr "" +msgstr "پروندهٔ APK اندروید" #: ../fdroidserver/scanner.py msgid "Android DEX code" -msgstr "" +msgstr "کد DEX اندروید" #: ../fdroidserver/init.py #, python-brace-format @@ -295,10 +263,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -325,6 +289,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -334,7 +306,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -348,11 +319,11 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" -msgstr "" +msgstr "پیوند نمادین خراب: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" -msgstr "بسته‌ای را از کد منبع می‌سازد" +msgstr "ساخت بسته از کد مبدأ" #: ../fdroidserver/build.py msgid "Build all applications available" @@ -385,16 +356,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" -msgstr "" +msgstr "نمی‌توان {path} را بازنویسی کرد" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -406,7 +384,7 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" -msgstr "به‌روزرسانی‌ها برای برنامه‌ها را بررسی می‌کند" +msgstr "بررسی برای به‌روز رسانی‌های برنامه‌ها" #: ../fdroidserver/update.py #, python-brace-format @@ -417,6 +395,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +410,10 @@ msgstr "فرمان «%s» شناسایی نشد.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" +msgstr "ثبت دگرگونی‌ها" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py @@ -439,20 +425,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -472,6 +455,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -498,9 +482,14 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "خواندن {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" -msgstr "" +msgstr "ایجاد کردن شاخهٔ log" #: ../fdroidserver/deploy.py #, python-brace-format @@ -509,7 +498,7 @@ msgstr "" #: ../fdroidserver/publish.py msgid "Creating output directory" -msgstr "" +msgstr "ایجاد کردن شاخهٔ output" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" @@ -517,7 +506,7 @@ msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" -msgstr "" +msgstr "ایجاد کردن شاخهٔ temporary" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" @@ -534,7 +523,7 @@ msgstr "" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" -msgstr "پرونده‌های APK و یا OBB فاقد فراداده را از مخزن پاک می‌کند" +msgstr "حذف APKها و یا OBBهای بدون فراداده از مخزن" #: ../fdroidserver/deploy.py #, python-brace-format @@ -560,11 +549,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -613,15 +597,14 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "در حال بارگیری %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "" @@ -649,18 +632,12 @@ msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "خطا: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -670,6 +647,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -687,6 +684,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -703,6 +709,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -772,13 +782,9 @@ msgstr "" msgid "Finished" msgstr "پایان یافته" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" -msgstr "" +msgstr "برچسب‌های HTML ممنوعه" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." @@ -807,7 +813,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -866,24 +871,22 @@ msgstr "" #: ../fdroidserver/common.py msgid "Git clean failed" -msgstr "" +msgstr "پاک سازی گیت شکست خورد" #: ../fdroidserver/common.py msgid "Git fetch failed" -msgstr "" - -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" +msgstr "واکشی گیت شکست خورد" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" -msgstr "" +msgstr "بازنشانی گیت شکست خورد" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" @@ -925,6 +928,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -962,7 +970,7 @@ msgstr "" #: ../fdroidserver/common.py msgid "Initialising submodules" -msgstr "" +msgstr "مقداردهی نخستین زیرپیمانه‌ها" #: ../fdroidserver/install.py msgid "Install all signed applications available" @@ -970,12 +978,12 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" -msgstr "نصب بسته های ساخته شده روی دستگاه ها" +msgstr "نصب بسته های ساخته روی افزاره‌ها" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." -msgstr "" +msgstr "نصب کردن %s…" #: ../fdroidserver/install.py #, python-brace-format @@ -988,7 +996,7 @@ msgstr "تعامل با کارساز HTTP مخزن" #: ../fdroidserver/update.py msgid "Invalid APK" -msgstr "" +msgstr "APK نامعتبر" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -1003,26 +1011,22 @@ msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" -msgstr "" +msgstr "VercodeOperation نامعتبر: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" -msgstr "" +msgstr "سیاههٔ گلوله‌ای نامعتبر" #: ../fdroidserver/common.py #, python-format @@ -1066,7 +1070,7 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" -msgstr "" +msgstr "پروندهٔ JAR جاوا" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py @@ -1075,7 +1079,7 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "Java compiled class" -msgstr "" +msgstr "کلاس ترجمه شدهٔ جاوا" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" @@ -1121,24 +1125,29 @@ msgstr "" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." -msgstr "" +msgstr "آینه‌های مخزن بدریخت." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" -msgstr "" +msgstr "خط ریشهٔ وب کارساز بدریخت:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" -msgstr "" +msgstr "شاخهٔ output نیست" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" @@ -1161,6 +1170,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1175,7 +1188,7 @@ msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." -msgstr "" +msgstr "هیچ طّلاعاتی وجود ندارد." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" @@ -1200,7 +1213,7 @@ msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "" +msgstr "هیچ بسته‌ای مشخّص نشده" #: ../fdroidserver/install.py #, python-format @@ -1221,7 +1234,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1245,7 +1257,7 @@ msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" -msgstr "" +msgstr "کاری برای انجام نیست" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -1256,7 +1268,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1274,13 +1285,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1291,10 +1316,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "انتخاب‌ها" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1307,7 +1328,7 @@ msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" -msgstr "" +msgstr "خروجی دادن JSON" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." @@ -1352,6 +1373,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1364,17 +1390,17 @@ msgstr "" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" -msgstr "" +msgstr "پردازش به‌روز رسانی‌های خودکار" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" -msgstr "" +msgstr "پردازش {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" -msgstr "" +msgstr "پردازش {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" @@ -1404,7 +1430,7 @@ msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" -msgstr "" +msgstr "فرستادن به {url}" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" @@ -1417,7 +1443,7 @@ msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" -msgstr "" +msgstr "خواندن {config_file}" #: ../fdroidserver/common.py #, python-brace-format @@ -1438,25 +1464,31 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" -msgstr "" +msgstr "برداشتن پرونده‌های مشخّص" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" -msgstr "" +msgstr "برداشتن {path}" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1472,6 +1504,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1479,12 +1516,17 @@ msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "" +msgstr "بازنویسی {appid}" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1532,6 +1574,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1602,7 +1648,7 @@ msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" -msgstr "" +msgstr "پرش از {appid}: از کار افتاده" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" @@ -1652,6 +1698,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1716,6 +1766,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1737,11 +1791,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1749,9 +1798,8 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" -msgstr "خطای ناشناخته‌ای یافت شد!" +msgstr "استثنایی ناشناخته پیدا شد!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1773,11 +1821,11 @@ msgstr "" #: ../fdroidserver/lint.py msgid "Unnecessary leading space" -msgstr "" +msgstr "فضای پیشین نالازم" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" -msgstr "" +msgstr "فضای پسین نالازم" #: ../fdroidserver/metadata.py #, python-brace-format @@ -1789,6 +1837,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1819,11 +1868,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1837,6 +1881,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1856,11 +1901,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1875,34 +1916,17 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "استفاده" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "مصرف: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" #: ../fdroidserver/build.py msgid "Use build server" -msgstr "" +msgstr "استفاده از کارساز ساخت" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" @@ -1913,6 +1937,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1929,11 +1958,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1944,6 +1968,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1963,6 +1992,11 @@ msgstr "" #: ../fdroidserver/index.py msgid "Verifying index signature:" +msgstr "تأیید کردن امضای نمایه:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." msgstr "" #: ../fdroidserver/deploy.py @@ -1970,10 +2004,18 @@ msgstr "" msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1986,6 +2028,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1996,6 +2046,11 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" +msgstr "بایگانی پروندهٔ ZIP" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py @@ -2008,18 +2063,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2030,11 +2081,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2045,8 +2098,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2065,7 +2116,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2079,14 +2130,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2099,20 +2146,12 @@ msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" -msgstr "" +msgstr "شبیه‌سازی {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "پیچیده" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2143,14 +2182,10 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" -msgstr "" +msgstr "{path} را ایجاد کرد" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -2160,6 +2195,10 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" +msgstr "حذف کردن: ‪repo/{apkfilename}‬" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py @@ -2167,8 +2206,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2186,45 +2223,33 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "انتظار %s آرگومان می‌رفت" +msgstr[1] "انتظار %s آرگومان می‌رفت" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" -msgstr "" +msgstr "انتظار آرگومان می‌رفت" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" -msgstr "" +msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "ممیّز شناور" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,10 +2260,8 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" -msgstr "" +msgstr "بایگانی پروندهٔ gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2252,35 +2275,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "عدد صحیح" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2318,8 +2327,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,32 +2343,17 @@ msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" +msgstr "هیج APKای داده نشده" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2371,72 +2363,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "گزینه -%s شناسایی نشد" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "گزینه -%s نیازمند آرگومان است" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "گزینه --%s شناسایی نشد" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "آرگومان‌های اختیاری" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "گزینه‌ها" @@ -2444,13 +2370,11 @@ msgstr "گزینه‌ها" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" -msgstr "" +msgstr "پایمالی {path} موجود" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" -msgstr "" +msgstr "آرگومان‌های موقعیتی" #: ../fdroidserver/common.py #, python-brace-format @@ -2480,13 +2404,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,21 +2425,11 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" -msgstr "" +msgstr "کتابخانهٔ اشتراکی" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "نسخه برنامه را نمایش داده و خارج می‌شود" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" -msgstr "این پیام راهنما را نمایش داده و خارج می‌شود" +msgstr "نمایش این پیام راهنما و خروج" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." @@ -2539,51 +2454,45 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "static library" -msgstr "" +msgstr "کتابخانهٔ ایستا" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "درست" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" -msgstr "" +msgstr "آرگومان‌های ناشناخته: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " -msgstr "مصرف: " +msgstr "استفاده: " #: ../fdroidserver/deploy.py #, python-brace-format @@ -2594,6 +2503,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "بله" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2606,21 +2519,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2641,7 +2552,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2682,9 +2592,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2707,16 +2617,20 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format -#| msgid "'sdk_path' not set in config.yml!" +#, python-brace-format msgid "{path} is not a standard config file!" -msgstr "'sdk_path' تنظیم نشده است در config.yml!" +msgstr "{path} پروندهٔ پیکربندی استانداردی نیست!" #: ../fdroidserver/index.py #, python-brace-format @@ -2746,7 +2660,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" -msgstr "" +msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format @@ -2761,11 +2675,11 @@ msgstr "" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} ساخت شکست خورد" +msgstr[1] "{} ساخت شکست خوردند" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} ساخت موفّق شد" +msgstr[1] "{} ساخت موفّق شدند" diff --git a/locale/fdroidserver.pot b/locale/fdroidserver.pot index 27258a85..486f290d 100644 --- a/locale/fdroidserver.pot +++ b/locale/fdroidserver.pot @@ -5,9 +5,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: fdroidserver 2.3a1-162-gfbb3cc59\n" +"Project-Id-Version: fdroidserver 2.4.2-3-gdcb804f7\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +354,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +410,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +423,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +453,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +480,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +547,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +595,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +636,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -673,6 +650,16 @@ msgstr "" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -695,6 +682,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -715,6 +707,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -784,10 +780,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -819,7 +811,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -884,15 +875,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -937,6 +926,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1022,16 +1016,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1144,6 +1134,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1173,6 +1168,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1233,7 +1232,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1268,7 +1266,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1286,25 +1283,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1315,10 +1314,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1376,6 +1371,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1462,6 +1462,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1475,12 +1484,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1496,6 +1502,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1561,6 +1572,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1681,6 +1696,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1770,11 +1789,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1784,7 +1798,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1822,6 +1835,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1852,11 +1866,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1870,6 +1879,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1889,11 +1899,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1908,27 +1914,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1967,11 +1956,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2008,15 +1992,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -2029,6 +2026,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2041,6 +2046,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2051,18 +2061,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2073,11 +2079,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2088,8 +2096,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2108,7 +2114,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2122,14 +2128,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2148,14 +2150,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2186,10 +2180,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2214,8 +2204,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2233,8 +2221,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2242,20 +2228,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2268,10 +2248,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2284,8 +2260,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2299,35 +2273,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2365,8 +2325,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2385,30 +2343,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2418,72 +2361,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2493,8 +2370,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2527,10 +2402,6 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2554,17 +2425,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2598,29 +2459,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2631,9 +2488,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2646,6 +2501,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2658,21 +2517,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2693,7 +2550,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2734,9 +2590,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2759,6 +2615,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/fi/LC_MESSAGES/fdroidserver.po b/locale/fi/LC_MESSAGES/fdroidserver.po index d65eb248..31803e83 100644 --- a/locale/fi/LC_MESSAGES/fdroidserver.po +++ b/locale/fi/LC_MESSAGES/fdroidserver.po @@ -2,20 +2,21 @@ # This file is put in the public domain. # A , 2020. # Kaantaja , 2021. +# Ricky Tigg , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a0-62-gc63c4b3d\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2021-08-23 01:29+0000\n" -"Last-Translator: Kaantaja \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-01-31 14:19+0000\n" +"Last-Translator: Ricky Tigg \n" "Language-Team: Finnish \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" -"X-Generator: Weblate 4.8.1-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -35,6 +36,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -43,12 +48,7 @@ msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" +msgstr "\"{apkfilename}\" on jo asennettu kohteeseen {dev}." #: ../fdroidserver/update.py #, python-brace-format @@ -75,17 +75,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +90,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +110,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +130,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +143,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +153,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +163,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -293,10 +262,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -317,12 +282,20 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" -msgstr "" +msgstr "Arkistoidaan {apkfilename} virheellisellä allekirjoituksella!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +305,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +355,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +394,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +411,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +424,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +454,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +481,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +548,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +596,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +637,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +646,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +683,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +708,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -709,7 +720,7 @@ msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" -msgstr "" +msgstr "Allekirjoitusten nouto '{apkfilename}':lle epäonnistui: {error}" #: ../fdroidserver/update.py #, python-brace-format @@ -743,7 +754,7 @@ msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" -msgstr "" +msgstr "'{apkfilename}':n asentaminen kohteelle {dev} epäonnistui: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" @@ -757,7 +768,7 @@ msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" -msgstr "" +msgstr "Haetut allekirjoitukset kohteelle '{apkfilename}' -> '{sigdir}'" #: ../fdroidserver/update.py #, python-brace-format @@ -770,10 +781,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +812,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -840,17 +846,17 @@ msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" -msgstr "" +msgstr "{apkfilename} löytyi {url}:lla" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" -msgstr "" +msgstr "Löytyi {count} ongelmaa {filename}:ssa" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" -msgstr "" +msgstr "Löytyi {count} varoitusta {filename}:ssa" #: ../fdroidserver/update.py #, python-brace-format @@ -870,15 +876,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +927,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -930,7 +939,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" -msgstr "" +msgstr "Ohitetaan vanhentuneet välimuistitiedot kohteelle {apkfilename}" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" @@ -978,7 +987,7 @@ msgstr "" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." -msgstr "" +msgstr "Asennetaan '{apkfilename}' kohteelle {dev}..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" @@ -1008,16 +1017,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1086,7 +1091,7 @@ msgstr "" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" -msgstr "" +msgstr "Säilytetään epäonnistunut koonti \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" @@ -1130,6 +1135,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1169,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1233,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1254,7 +1267,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1262,7 +1274,7 @@ msgstr "" #: ../fdroidserver/update.py msgid "OBB filename must start with \"main.\" or \"patch.\":" -msgstr "" +msgstr "OBB-tiedoston nimen alussa on oltava \"main\". tai \"patch\".:" #: ../fdroidserver/update.py msgid "OBB's packagename does not match a supported APK:" @@ -1272,13 +1284,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1289,10 +1315,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1314,7 +1336,7 @@ msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" -msgstr "" +msgstr "Tyhjän versionName:n ohittaminen kohteessa {apkfilename} metatiedoista: {version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -1350,6 +1372,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1367,7 +1394,7 @@ msgstr "" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" -msgstr "" +msgstr "Käsitellään {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format @@ -1420,22 +1447,31 @@ msgstr "" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" -msgstr "" +msgstr "Kohteen packageName/versionCode/versionName lukeminen epäonnistui, APK virheellinen: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" -msgstr "" +msgstr "Kohteen packageName/versionCode/versionName lukeminen epäonnistui, APK virheellinen: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" -msgstr "" +msgstr "Luetaan {apkfilename} välimuistista" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1449,18 +1485,15 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" -msgstr "" +msgstr "Allekirjoitetaan {apkfilename} uudelleen toimitetulla debug.keystore:lla" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" @@ -1470,6 +1503,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1483,6 +1521,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1530,6 +1573,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1580,7 +1627,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" -msgstr "" +msgstr "Ohitetaan '{apkfilename}' virheellisellä allekirjoituksella!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format @@ -1595,7 +1642,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" -msgstr "" +msgstr "Ohitetaan {apkfilename} virheellisellä allekirjoituksella!" #: ../fdroidserver/scanner.py #, python-brace-format @@ -1621,7 +1668,7 @@ msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" -msgstr "" +msgstr "Salaperäisen allekirjoituksen poistaminen kohteesta {apkfilename}" #: ../fdroidserver/lint.py #, python-format @@ -1650,6 +1697,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1714,6 +1765,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1735,11 +1790,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1749,11 +1799,10 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" -msgstr "" +msgstr "Tuntematon tiedosto '{filename}' koonnissa '{versionName}'" #: ../fdroidserver/metadata.py #, python-format @@ -1787,6 +1836,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1817,11 +1867,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1835,6 +1880,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1854,11 +1900,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1866,34 +1908,17 @@ msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" -msgstr "" +msgstr "Ulosladataan {apkfilename}:a osoitteeseen androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" +msgstr "Ulosladataan {apkfilename} virustotaliin" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1911,6 +1936,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1927,11 +1957,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1942,6 +1967,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1963,15 +1993,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1984,6 +2027,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1996,6 +2047,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2006,18 +2062,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2028,11 +2080,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2043,8 +2097,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2063,10 +2115,10 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" -msgstr "" +msgstr "%(filename)s:a ei voi avata: %(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" @@ -2077,14 +2129,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2103,14 +2151,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "monimutkainen" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2141,10 +2181,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2158,6 +2194,10 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" +msgstr "Poistetaan: repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py @@ -2165,8 +2205,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2184,8 +2222,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2193,20 +2229,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2219,10 +2249,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,8 +2261,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2250,35 +2274,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2316,8 +2326,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,30 +2344,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2369,72 +2362,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2444,8 +2371,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2462,7 +2387,7 @@ msgstr "" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" -msgstr "" +msgstr "kieltäydy lataamisesta suojaamattoman HTTP-yhteyden kautta; käytä HTTPS:a tai määritä '--no-https-check': {apkfilename}" #: ../fdroidserver/index.py #, python-format @@ -2478,13 +2403,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2426,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2544,29 +2460,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2489,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2592,6 +2502,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2602,23 +2516,21 @@ msgstr[1] "" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" +msgstr "{apkfilename}:lla ({appid}) ei ole metatietoja!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " -msgstr "" +msgstr "{apkfilename}:n AndroidManifest.xml:ssa on väärä päivämäärä: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2551,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2591,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2616,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/fr/LC_MESSAGES/fdroidserver.po b/locale/fr/LC_MESSAGES/fdroidserver.po index 6c5bad80..d65abe95 100644 --- a/locale/fr/LC_MESSAGES/fdroidserver.po +++ b/locale/fr/LC_MESSAGES/fdroidserver.po @@ -31,25 +31,32 @@ # translator , 2022. # Julien Maulny , 2022. # Translator , 2022, 2023. -# Ldm Public , 2022, 2023. +# Ldm Public , 2022, 2023, 2024. # TopFox , 2022. # John Donne , 2022, 2023. # Deleted User , 2023. # Christopher Forzy , 2024. +# Phantomwise , 2024. +# Sylvain Pichon , 2024. +# Sylvain Pichon , 2024. +# Lzebulon , 2024. +# Armand Camponovo , 2024. +# Lula Bye , 2025. +# Laurent FAVOLE , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-06-09 16:09+0000\n" -"Last-Translator: Christopher Forzy \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-04-11 17:20+0000\n" +"Last-Translator: Laurent FAVOLE \n" "Language-Team: French \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" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -73,6 +80,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" n'a pas de fichier de métadonnées correspondant !" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "La clé \"isPrimary\" ne devrait pas être ajoutée aux miroirs !" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -83,11 +94,6 @@ msgstr "Le dossier racine pour « local_copy_dir » {path} n’existe pas !" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "«{apkfilename}» est déjà installé sur {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contient {name} obsolète ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -113,40 +119,21 @@ msgstr "\"{path}\" est signé par une clé qui n'est pas autorisée :" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" n'est pas une URL valide !" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "L'option %(option)s requiert %(number)d argument" -msgstr[1] "L'option %(option)s requiert %(number)d arguments" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" msgstr "%(prog)s : erreur : %(message)s\n" #: ../fdroidserver/publish.py -#, fuzzy, python-format +#, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "%d APK n'ont pas pu être signés ou vérifiés !" +msgstr "Les APK %d n'ont pas pu être signés ou vérifiés !" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problèmes trouvés" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [options]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -167,13 +154,6 @@ msgstr "%s a un mauvais SHA-256 : %s" msgid "%s is not an accepted build field" msgstr "%s n'est pas un champ de construction acceptable" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "l'option %s ne prend pas de valeur" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' non trouvé dans config.yml !" @@ -194,8 +174,6 @@ msgstr "'keystorepass' non trouvé dans config.yml !" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' non trouvé dans config.yml !" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' est invalide comme argument positionnel" @@ -209,11 +187,6 @@ msgstr "'sdk_path' n'est pas configuré dans 'config.yml' !" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' est obsolète, fdroid requiert build-tools-{version} ou plus !" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' sera ordonné aléatoirement ! Utilisez des parenthèses () ou des crochets [] si l'ordre est important !" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -224,7 +197,7 @@ msgstr "'{path}' n'a pas pu être exécuté !" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "Le format de '{path}' est incorrect, il devrait s'agir d’un dictionnaire !" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' n'est pas un(e) {field} valide dans {appid}. Motif regex : {pattern}" @@ -234,13 +207,15 @@ msgstr "'{value}' n'est pas un(e) {field} valide dans {appid}. Motif regex : {pa msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' n'est pas un(e) {field} valide et devrait être {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request fonctionne seulement sur un unique appid !" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate a échoué pour {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() n'est pas défini" @@ -254,9 +229,9 @@ msgid "A URL is required as an argument!" msgstr "Une URL est requise en argument !" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "Aucun certificat signé trouvé dans {path}" +msgstr "Les signatures des APK ont des certificats différents dans {path} :" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" @@ -332,13 +307,8 @@ msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to msgstr "L’application possède des fichiers binaires mais n'a pas les AllowedAPKSigningKeys correspondantes pour épingler le certificat." #: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "L'application a NoSourceSince ou ArchivePolicy « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None" - -#: ../fdroidserver/lint.py -#, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "L'application a NoSourceSince ou ArchivePolicy « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None" +msgstr "L'application a NoSourceSince ou ArchivePolicy à « 0 version » mais AutoUpdateMode ou UpdateCheckMode ne valent pas None" #: ../fdroidserver/lint.py #, python-brace-format @@ -362,6 +332,14 @@ msgstr "Archivage de {apkfilename} avec une signature invalide !" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode avec UpdateCheckMode : HTTP doit avoir un modèle." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Répondre automatiquement Non à toutes les demandes." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Répondre automatiquement Oui à toutes les demandes." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -371,7 +349,6 @@ msgstr "Mauvais type d'entrée \"{mirrortype}\" dans le paramétrage des miroirs msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL de base à mirorer, peut inclure la clef de signature d'index à l'aide de la chaîne de requête : ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -422,16 +399,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Build impossible à cause de l'erreur lors de l'analyse" msgstr[1] "Build impossible à cause des {} erreurs lors de l'analyse" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Erreur de lecture {path} : {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Impossible d'écrire sur \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Catégories « %s » invalides" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Catégories non définies" @@ -439,7 +423,7 @@ msgstr "Catégories non définies" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" -msgstr "" +msgstr "La catégorie « {category} » est définie mais n'est utilisée par aucune application !" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" @@ -454,6 +438,10 @@ msgstr "Vérification de l'archivage pour {appid} — apks : {integer}, keepvers msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Mise à jour propre — n'utilise pas les caches, traite à nouveau tous les APKs" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Colorer l'affichage des journaux" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Liste de catégories séparées par des virgules." @@ -467,6 +455,10 @@ msgstr "La commande '%s' n'est pas reconnue.\n" msgid "Commit changes" msgstr "Sauvegarder les changements (commit)" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Sauvegarder les changements, les pousser sur le dépôt et faire une demande d'intégration" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -476,20 +468,17 @@ msgstr "Conflit des définitions « {field} » entre les fichiers .yml et ceux msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Conflit d'arguments : '--verbose' et '--quiet' ne peuvent être choisis en même temps." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Conflit de fichiers de configuration ! Utilisation de {newfile}, ignorant {oldfile} !" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossible de trouver '{command}' sur votre système" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Impossible de trouver la dernière version du code" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Impossible de trouver le nom de la dernière version" @@ -509,6 +498,7 @@ msgstr "Impossible d'ouvrir le fichier APK {path} pour analyse : " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Impossible de récupérer la taille \"{size}\", mauvais type \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Impossible de trouver l'ID de l'application" @@ -535,6 +525,11 @@ msgstr "Nouveau container « {name} » créé" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Création de « {path} » pour configurer s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Création d'un fichier {config_file} vide" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Création du répertoire des logs" @@ -597,11 +592,6 @@ msgstr "Description de '%s' n'est qu'un résumé de l'application" msgid "Description has a duplicate line" msgstr "Ligne dupliquée dans la description" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "La description contient une liste (%s) mais ce n'est ni une liste à puces (*) ni une liste numérotée (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,12 +600,12 @@ msgstr "La longueur de la description {length} dépasser la limite du nombre de #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" -msgstr "" +msgstr "Vouliez-vous dire config/{name}.yml ?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" -msgstr "" +msgstr "Vouliez-vous dire {code} ?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" @@ -650,15 +640,14 @@ msgstr "Ne pas rafraîchir le dépôt, utile pour tester un build sans connexion msgid "Don't use rsync checksums" msgstr "Ne pas utiliser les sommes de contrôle rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Téléchager F-Droid.apk en utilisant des miroirs avec moins de fuites réseaux" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Télécharger une image complète des petits dépôts" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Téléchargement de %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Le téléchargement du référentiel a déjà échoué une fois, ne pas réessayer." @@ -686,20 +675,12 @@ msgstr "Lien dupliqué dans « {field} » : {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "ERREUR : %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERREUR : La sous-commande \"server\" a été supprimée, utilisez plutôt \"deploy\" !" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERREUR : cette commande ne devrait jamais être utilisée pour copier f-droid.org !\n" -"Une copie de f-droid.org occupe plus de 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERREUR : type de CI non supporté, les corrections sont bienvenues !" @@ -712,12 +693,22 @@ msgstr "ERREUR : hébergeur git « %s » non supporté, les corrections sont #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ERREUR : {key} dans {path} n'est pas \"archive\" ou \"repo\"." + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ERREUR : {key} n'est pas une clé valide !" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ERREUR : la valeur de {key} devrait être du type {t} !" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERREUR : {key} :{subkey} dans {path} n'est pas une clé valide parmi : {allowed_keys}." #: ../fdroidserver/__main__.py #, python-brace-format @@ -738,9 +729,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "La variable d'environnent {var} de {configname} n'est pas configurée !" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "La variable d'environnement {{env: {var}}} n'est pas configurée !" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Erreur lors du déploiement 'github_releases' : {} est absent (vous devriez peut-être d'abord lancer `fdroid update`)." #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -758,6 +754,10 @@ msgstr "Extraire les métadonnées de l'application depuis un dépôt source" msgid "Extract signatures from APKs" msgstr "Extraction des signatures à partir des APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk ne peut pas être téléchargé depuis les source connues !" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -827,10 +827,6 @@ msgstr "Le fichier a été supprimé au cours du traitement : {path}" msgid "Finished" msgstr "Terminé" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Les informations de dons via Flattr doivent être renseignées dans le champ FlattrID:" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Balises HTML interdites" @@ -862,7 +858,6 @@ msgstr "Mauvais fichier de financement « {path} » trouvé pour « {name} msgid "Found invalid appids in arguments" msgstr "Appids invalide trouvée dans l'argument" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Code de version invalide trouvée pour certaines application" @@ -873,9 +868,8 @@ msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Plusieurs fichiers de bloc de signature JAR trouvé à {path}" #: ../fdroidserver/common.py -#, fuzzy msgid "Found multiple Signer Certificates!" -msgstr "Plusieurs certificats de signature ont étés trouvés pour le référentiel." +msgstr "Plusieurs certificats de signatures ont été trouvés !" #: ../fdroidserver/metadata.py #, python-brace-format @@ -928,23 +922,20 @@ msgstr "Nettoyage du Git échoué" msgid "Git fetch failed" msgstr "Recherche du Git échouée" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune a échoué" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Reset de Git échouée" #: ../fdroidserver/common.py -#, fuzzy msgid "Git submodule deinit failed" -msgstr "Échec de la mise à jour du sous-module Git" +msgstr "Échec du sous-module Git deinit" #: ../fdroidserver/common.py msgid "Git submodule sync failed" @@ -982,6 +973,11 @@ msgstr "Ignorer l'entrée FUNDING.yml supérieure à 2048 : %s" msgid "Ignoring bad element in manifest: %s" msgstr "Un mauvais élément du manifest est ignoré : %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} est obsolète et ignoré, {newfile} est utilisé !" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Paquet sans métadonnées ignoré : " @@ -1067,16 +1063,12 @@ msgstr "VercodeOperation non valide : {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation non valide : {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID de l'application invalide {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Booléen '%s' non valide" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Liste à puces non valide" @@ -1153,7 +1145,7 @@ msgstr "Stockage des clés signée :\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " -msgstr "" +msgstr "La clé de débogage connue est utilisé dans AllowedAPKSigningKeys : " #: ../fdroidserver/lint.py #, python-brace-format @@ -1170,7 +1162,7 @@ msgstr "Lister les fichiers qui seront reformater (test à blanc)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" -msgstr "Les paramètres de lieu sont inclus dans f-droid.org URL" +msgstr "Les paramètres de localisation sont inclus dans l'URL f-droid.org" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" @@ -1189,6 +1181,11 @@ msgstr "serverwebroot malformer en ligne :" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profondeur maximale de récursivité dans le fichier ZIP atteinte : %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "La configuration du miroir pour {url} contient la clé \"isPrimary\" !" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Cloner entièrement le repo et les archives, tous les fichiers." @@ -1218,6 +1215,10 @@ msgstr "Aucun SDK Android trouvée !" msgid "No attached devices found" msgstr "Aucun périphérique connecté trouvé" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Aucun appareil trouvé pour `adb install` ! Veuillez en branchez un." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Aucune empreinte dans l'URL." @@ -1278,7 +1279,6 @@ msgstr "Aucun certificat signé trouvé dans {path}" msgid "No such package: %s" msgstr "Ce paquet n'existe pas : %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1293,9 +1293,8 @@ msgid "No unsigned directory - nothing to do" msgstr "Aucun dossier non signé — il n'y a rien à faire" #: ../fdroidserver/__main__.py -#, fuzzy msgid "No version information could be found." -msgstr "aucune information sur la version n’a été trouvée" +msgstr "Aucune information sur la version n’a été trouvée." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" @@ -1314,7 +1313,6 @@ msgstr "Rien à faire pour {appid}." msgid "Now set these in config.yml:" msgstr "Maintenant, définissez-les dans config.yml :" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1332,26 +1330,28 @@ msgstr "Le nom de paquet d'OBB ne correspond pas à un fichier APK pris en charg msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Machine hors-ligne, la génération du miroir git est sautée jusqu'à `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'packageNames'. ignoré..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'projectUrl'. ignoré..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "L'un des éléments de configuration 'github_releases' ne contient pas la valeur 'token'. suivant ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Seuls les formats PNG et JPEG sont pris en charge pour les graphiques, trouvés : {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Afficher uniquement les différences avec le Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "N'accepte qu'une seule clé \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1361,10 +1361,6 @@ msgstr "Traiter uniquement les applications ayant des mises à jour automatiques msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Les méthodes de donation OpenCollective vont dans le champ OpenCollective:" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Options" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Générez un rapport JSON dans un fichier nommé d'après l'APK." @@ -1422,6 +1418,11 @@ msgstr "Chemin vers le keystore pour la clé de signature du dépôt" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Afficher la variable secrète dans le terminal pour un copier/coller facilité" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Le mode de confidentialité a été activé, dû à votre localisation ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1468,9 +1469,8 @@ msgid "Pushing binary transparency log to {url}" msgstr "Envoyer les logs de transparence de la compilation vers {url}" #: ../fdroidserver/deploy.py -#, fuzzy msgid "Pushing to remote server failed!" -msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\"" +msgstr "L'envoie au serveur distant a échoué !" #: ../fdroidserver/deploy.py #, python-brace-format @@ -1506,9 +1506,17 @@ msgid "Reading {apkfilename} from cache" msgstr "Lecture de {apkfilename} à partir du cache" #: ../fdroidserver/build.py -#, fuzzy msgid "Refresh and cache scanner rules and signatures from the network" -msgstr "recupération de la dernière version des signatures depuis le web" +msgstr "Actualisation et mise en cache des règles et signature à partir du réseau." + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Signature de '{path}' refusée, le fichier existe à la fois dans les dossiers {dir1} et {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Supprimer l'archive d'origine et les APKs si la vérification est effectuée avec succès." #: ../fdroidserver/common.py msgid "Removing specified files" @@ -1523,13 +1531,10 @@ msgstr "Suppression de {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomme les fichiers APK dont le nom ne ressemble pas à nom.paquet_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Le mode de mise à jour de RepoTrunk n'a de sens que pour les dépôts git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Réinitialiser et créer un tout nouveau serveur de construction, même si le serveur existant semble correct." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1544,6 +1549,11 @@ msgstr "Redimensionner toutes les icônes excédant la taille maximale en pixels msgid "Restrict output to warnings and errors" msgstr "Limiter la sortie aux avertissements et aux erreurs" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Nouvel essai de téléchargement suite à échec : %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Réécrire toutes les métadonnées" @@ -1558,9 +1568,9 @@ msgid "Run on git repo that has uncommitted changes" msgstr "Exécuter sur le dépôt git qui a des modifications non validées" #: ../fdroidserver/nightly.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Lancer sur {cibase} pour trouver -debug.apk et passer repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1609,6 +1619,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Le scanneur a trouvé {} problème" msgstr[1] "Le scanneur a trouvé {} problèmes" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Analyse de l'APK à la recherche de signature de blocs supplémentaires." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Analyse de l’APK avec dexdump pour les classes non libres connues." @@ -1729,6 +1743,10 @@ msgstr "Le mode de mise à jour par étiquettes est utilisé dans git-svn, mais msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mode test — mettre la sortie dans le dossier tmp uniquement et toujours compiler, même si la sortie existe déjà." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Le paquet Python \"qrcode\" n'est pas installé (p. ex. apt-get install python3-qrcode) !" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1765,11 +1783,8 @@ msgid "These are the apps that have been archived from the main repo." msgstr "Voici les applications qui ont été archivées à partir du dépôt principal." #: ../fdroidserver/mirror.py -#, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." -msgstr "" -"ERREUR : cette commande ne devrait jamais être utilisée pour copier f-droid.org !\n" -"Une copie de f-droid.org occupe plus de 200GB." +msgstr "Cette commande ne devrait jamais être utilisée pour copier f-droid.org ! Une copie occupe plus de 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." @@ -1806,9 +1821,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Pour utiliser awsbucket, awssecretkey et awsaccesskeyid doivent aussi être configurées dans config.yml !" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Pour utiliser awsbucket, awssecretkey et awsaccesskeyid doivent aussi être configurées dans config.yml !" +msgstr "Pour utiliser rclone, rclone_config et awsbucket doivent être configurés dans config.yml." #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1816,7 +1830,7 @@ msgstr "L'URL doit commencer par https:// ou http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" -msgstr "Les raccourcisseurs d'URL ne devraient pas être utilisés" +msgstr "Les raccourcisseurs d'URL ne doivent pas être utilisés" #: ../fdroidserver/lint.py #, python-brace-format @@ -1831,11 +1845,6 @@ msgstr "Balise de licence non valide \"{}\" ! Utilisez uniquement des balises msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Balise de licence non valide \"{}\" ! Utilisez uniquement des balises de licence configurées dans votre fichier de configuration" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Cible du lien symbolique inattendue : {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1845,7 +1854,6 @@ msgstr "Entrée {key} inconnue dans {configname}" msgid "Unknown exception found!" msgstr "Exception inconnue détectée !" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1883,6 +1891,7 @@ msgstr "Champ application non reconnu '{fieldname}' dans '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Option de compilation '{build_flag}' non reconnue dans '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1913,11 +1922,6 @@ msgstr "Chemin scandelete inutilisé : %s" msgid "Unused scanignore path: %s" msgstr "Chemin scanignore inutilisé : %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Extraction vers %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Mettre à jour les données des dépôts pour les nouveaux paquets" @@ -1931,6 +1935,7 @@ msgstr "Mettre à jour le rapport de transparence des fichiers binaires pour une msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData a une URL invalide : {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1948,14 +1953,9 @@ msgstr "UpdateCheckData URL non valide : {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -#, fuzzy -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé" +msgstr "UpdateCheckMode est configuré mais on dirait que checkupdates n'a pas encore été lancé." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName est défini sur l’ID d’application connu, il peut être supprimé" @@ -1970,27 +1970,9 @@ msgstr "Téléversement de {apkfilename} vers androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Téléversement de {apkfilename} vers virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Usage" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Usage : %s\n" - #: ../fdroidserver/lint.py -#, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "Utiliser /HEAD plutôt que /master pour pointer un fichier dans la branche par défaut" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Utiliser /HEAD plutôt que /master pour pointer un fichier dans la branche par défaut" +msgstr "Utiliser /HEAD plutôt que /master pour pointer vers un fichier dans la branche par défaut" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." @@ -2010,9 +1992,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Utiliser \"{path}\" pour configurer s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Utiliser \"{path}\" pour configurer s3cmd." +msgstr "Utiliser \"{path}\" pour synchroniser avec un stockage distant." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -2023,19 +2005,13 @@ msgid "Using APK Signature v3" msgstr "Utilisation de la signature d'APK v3" #: ../fdroidserver/common.py -#, fuzzy msgid "Using JAR Signature" -msgstr "Utilisation de la signature d'APK v2" +msgstr "Utilisation de la signature JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "L'utilisation de l'utilitaire jarsigner de Java n'est pas recommandé pour vérifier les APKs ! Utiliser apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Utiliser d’androguard à partir de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2049,7 +2025,7 @@ msgstr "Utilise le trousseau existant \"{path}\"" #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Utiliser s3cmd pour synchroniser avec : {url}" +msgstr "Utiliser rclone pour synchroniser avec : {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2072,15 +2048,28 @@ msgstr "Vérifier l'intégrité des paquets téléchargés" msgid "Verifying index signature:" msgstr "Vérification de la signature d'index :" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Vérification du paquet {path} avec apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "L’API de VirusTotal ne permet pas d’envoyer des fichiers plus grands que 32Mo, utilisez {url} pour envoyer {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertir de possibles erreurs dans les métadonnées" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Fichier binaire WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Lorsqu'il est configuré pour les index signés, ne créez que des index non signés à ce stade" @@ -2091,7 +2080,15 @@ msgstr "Lors du linting, tout le dépôt yamllint est désactivé par défaut. C #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." -msgstr "" +msgstr "En cas d'échec de la signature ou de la vérification, fermer en indiquant un code d'erreur." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Souhaitez-vous télécharger et installer F-Droid.apk via adb ? (OUI/non)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Souhaitez-vous télécharger le(s) application(s) depuis f-droid.org ? (OUI/non)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" @@ -2105,6 +2102,11 @@ msgstr "Vous pouvez utiliser ANDROID_HOME pour définir le chemin de votre SDK, msgid "ZIP file archive" msgstr "Archive ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb reporte que {serial} est \"{status}\" !" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2115,19 +2117,15 @@ msgstr "ajoute IdentityFile à {path}" msgid "adding to {name}: {path}" msgstr "ajoute à {name} : {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "option ambiguë : %(option)s peut correspondre à %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "option ambiguë : %s (%s ?)" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner dans build-tools;{version} accepte les APKs avec des signatures v3 invalides, ignoré" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2137,11 +2135,13 @@ msgstr "apksigner introuvable ! Impossible de signer ou de vérifier les APK mo msgid "apksigner not found, it's required for signing!" msgstr "apksigner est introuvable, il est requis pour la signature !" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "applicationId du fichier à traiter" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2152,8 +2152,6 @@ msgstr "ID d'application avec le versionCode optionnel sous la forme APPID[:VERC msgid "archive_url needs to end with /archive" msgstr "archive_url doit se terminer par /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2172,7 +2170,7 @@ msgstr "tentative de connexion SSH simple pour tester la clé de déploiement :" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "impossible d'analyser la spécification de scrlib (not a string) : '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "impossible d'ouvrir « %(filename)s » : %(error)s" @@ -2186,14 +2184,10 @@ msgstr "impossible d'ouvrir les url sans https : '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "Impossible de trouver srclibs : \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Impossible d'avoir plusieurs arguments du sous-parseur" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2212,14 +2206,6 @@ msgstr "clonage de {url}" msgid "commands from plugin modules:" msgstr "commandes des modules d'extension :" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complexe" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2243,18 +2229,13 @@ msgid "could not parse '{path}'" msgstr "impossible de lire '{path}'" #: ../fdroidserver/common.py -#, fuzzy msgid "could not parse srclib spec (no name specified): '{}'" -msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée) : '{}'" +msgstr "impossible d'analyser la spécification srclib (pas de nom spécifié) : '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "impossible d'analyser la spécification srclib (pas de référence spécifiée) : '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "impossible d'analyser la spécification srclib (trop de caractères '@') : '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2272,15 +2253,13 @@ msgstr "suppression : repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "ficher de dépendance sans verrouillage" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "journal du processus déployé de {path} vers {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2298,8 +2277,6 @@ msgstr "le téléchargement de l'analyse des signatures de '{}' a échoué" msgid "executable binary, possibly code" msgstr "binaire exécutable, possiblement du code" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2307,20 +2284,14 @@ msgid_plural "expected %s arguments" msgstr[0] "%s argument attendu" msgstr[1] "%s arguments attendus" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "au moins un argument est attendu" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "un seul argument au plus est attendu" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "un seul argument est attendu" @@ -2333,10 +2304,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "recupération de la dernière version des signatures depuis le web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "virgule flottante" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forcer les erreurs (par défaut) sur les métadonnées à être des avertissements, ou les ignorer." @@ -2349,8 +2316,6 @@ msgstr "git svn clone a échoué" msgid "gzip file archive" msgstr "archive GZIP" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2364,35 +2329,21 @@ msgstr "index-v1 doit avoir une signature, utilisez `fdroid signindex` pour la c msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 doit avoir une signature, utilisez `fdroid signindex` pour la créer !" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "entier" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valeur %(type)s non valide : %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "choix non valide : %(value)r (choisissez parmi %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valeur de conflict_resolution invalide : %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2426,12 +2377,10 @@ msgid "mirror '%s' does not end with 'fdroid'!" msgstr "le miroir «%s» ne se termine pas par «fdroid» !" #: ../fdroidserver/index.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "Maintenant, définissez-les dans config.yml :" +msgstr "miroir configuré deux fois, dans config.yml et {path} !" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "les arguments qui s'excluent mutuellement doivent être optionnels" @@ -2450,30 +2399,15 @@ msgstr "aucune \"icon\" dans {appid}" msgid "no APK supplied" msgstr "aucun APK n’est fourni" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "option inexistante : %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "aucune information de version n'a été trouvée !" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "aucune information sur la version n’a été trouvée" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "non permis avec les arguments %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2483,72 +2417,6 @@ msgstr "un des arguments %s est requis" msgid "only accepts strings, lists, and tuples" msgstr "accepte uniquement les chaînes de caractères, listes et tuples" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "option %s : Si vous voulez vraiment installer toutes les applications signées, utilisez --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "option %s : valeur %s non valide : %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "option %s : choix non valide : %r (choisissez depuis %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "L'option -%s n'est pas reconnue" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "l'option -%s requiert un argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "L'option %s ne doit pas avoir d'argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "option --%s n'est pas un préfixe unique" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "option --%s non reconnue" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "L'option %s requiert un argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "arguments optionnels" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "options" @@ -2558,8 +2426,6 @@ msgstr "options" msgid "overwriting existing {path}" msgstr "écrasement de {path} en cours" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "arguments de position" @@ -2590,11 +2456,7 @@ msgstr "repo_url doit se terminer par /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml n’est pas installé, impossible d’écrire les métadonnées." +msgstr "rsync n'est pas présent ou ne fonctionne pas : {error}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2602,9 +2464,9 @@ msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer" +msgstr "s3cmd synchronise les index de {path} vers {url} et supprime ceux enlevés" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2612,25 +2474,14 @@ msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "l'analyse du cache est mal formée ! Vous pouvez le nettoyer avec : '{clear}'" #: ../fdroidserver/deploy.py -#, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" -msgstr "local_copy_dir ne semble pas se terminer avec \"fdroid\", peut être voulez-vous dire : \"{path}\"" +msgstr "serverwebroot : le chemin ne se termine pas par \"fdroid\", peut-être voulez-vous dire :" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "bibliothèque partagée" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "afficher le numéro de version du programme et quitter" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "afficher ce message d'aide et quitter" @@ -2664,29 +2515,25 @@ msgstr "librairie statique" msgid "supplied reference binary has allowed signer {signer}" msgstr "le fichier binaire de référence fourni a autorisé le signataire {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "les arguments suivants sont requis %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "vrai" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "chaîne d'option inattendue : %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser inconnu %(parser_name)r (choix : %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2697,9 +2544,7 @@ msgstr "arguments non reconnu : %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissions dangereuses sur '{config_file}' (doit être 0600) !" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "usage : " @@ -2712,6 +2557,10 @@ msgstr "utilisation de Apache libcloud pour syncronizer avec {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limite le nombre de requêtes, en attente avant de réessayer..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "oui" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2724,21 +2573,19 @@ msgstr[1] "{0} applis, {1} alias de clé" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) ne contient pas de métadonnées !" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} a plusieurs fichiers {name}, on dirait que c'est une faille ou exploitation de la clé maître (Master Key) !" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "Le fichier AndroidManifest.xml de {apkfilename} possède une date incorrecte : " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} n’a pas de nom ! Utilisation de l’ID d’application à la place." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2759,7 +2606,6 @@ msgstr "{appid} possède à la fois des APK et des fichiers : {files}" msgid "{appid} is missing {name}" msgstr "{appid} n'a pas de {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2800,10 +2646,10 @@ msgstr "{file} est vide ou corrompu !" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" n'existe pas ! Vérifiez \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} est obsolète, utilisez {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} est un doublon de {path2}, supprimez-en un !" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2821,29 +2667,34 @@ msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} a une mauvaise signature de fichier \"{pattern}\", possibilité d'une faille Janus !" #: ../fdroidserver/deploy.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "{path} a été signalé par virustotal {count} fois :" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} a la mauvaise empreinte ({fingerprint}) !" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} n'est pas un dictionnaire \"key: value\" mais un {datatype}." #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "{path} is not a standard config file!" -msgstr "'sdk_path' n'est pas configuré dans 'config.yml' !" +msgstr "{path} n'est pas un fichier de configuration standard !" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path} n'est pas une liste mais un {datatype}." #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} n'est pas un {expected_type}, mais un {datatype} !" #: ../fdroidserver/update.py #, python-brace-format @@ -2858,7 +2709,7 @@ msgstr "{path} supérieur à 200MB, envoi manuel : {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path} : \"{code}\" n'est pas un code de pays ISO_3166-1 alpha-2 valide !" #: ../fdroidserver/update.py #, python-brace-format diff --git a/locale/fy/LC_MESSAGES/fdroidserver.po b/locale/fy/LC_MESSAGES/fdroidserver.po index ddf37f55..1f751485 100644 --- a/locale/fy/LC_MESSAGES/fdroidserver.po +++ b/locale/fy/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-07-01 15:29+0000\n" "Last-Translator: Vancha March \n" "Language-Team: Frisian \n" @@ -34,6 +34,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +48,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,17 +73,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +88,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [options]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +108,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +128,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +141,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +151,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +161,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() net definiearre" @@ -292,10 +260,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +286,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +303,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -382,16 +353,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -414,6 +392,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -427,6 +409,10 @@ msgstr "Kommando '%s' net werkend.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -436,20 +422,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -469,6 +452,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -495,6 +479,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -557,11 +546,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,13 +594,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -652,12 +635,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -667,6 +644,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -684,6 +681,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -700,6 +706,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -769,10 +779,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -804,7 +810,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -869,15 +874,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -922,6 +925,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1007,16 +1015,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1129,6 +1133,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1158,6 +1167,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1218,7 +1231,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1253,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1271,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1288,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opsjes" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1349,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1435,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1448,12 +1483,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1469,6 +1501,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1482,6 +1519,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1529,6 +1571,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1649,6 +1695,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1713,6 +1763,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1734,11 +1788,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1748,7 +1797,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Ûnbekende útsûndering fûn!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1786,6 +1834,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1816,11 +1865,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1834,6 +1878,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1853,11 +1898,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1872,27 +1913,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Gebrûk" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Gebrûk: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1910,6 +1934,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,11 +1955,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1941,6 +1965,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1962,15 +1991,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1983,6 +2025,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1995,6 +2045,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2005,18 +2060,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2027,11 +2078,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2042,8 +2095,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2062,7 +2113,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2076,14 +2127,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,14 +2149,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2140,10 +2179,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2159,13 +2194,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2183,8 +2220,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2192,20 +2227,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2218,10 +2247,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2234,8 +2259,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2249,35 +2272,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2315,8 +2324,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2335,30 +2342,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2368,72 +2360,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opsje -%s wurd net werkend" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opsje -%s hat in argumint nedich" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opsje --%s wurd net werkend" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "opsjonele arguminten" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2444,8 +2370,6 @@ msgstr "Opsjes" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2478,13 +2402,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2425,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "lit it ferzje nûmer fan de applikaasje sjen en slút ôf" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "dit help berjocht sjen litte en ôfslute" @@ -2544,29 +2459,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2488,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "gebrûk: " @@ -2592,6 +2501,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2517,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2550,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2590,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2615,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ga/LC_MESSAGES/fdroidserver.po b/locale/ga/LC_MESSAGES/fdroidserver.po new file mode 100644 index 00000000..b9916f78 --- /dev/null +++ b/locale/ga/LC_MESSAGES/fdroidserver.po @@ -0,0 +1,2716 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# Aindriú Mac Giolla Eoin , 2024, 2025. +msgid "" +msgstr "" +"Project-Id-Version: fdroidserver 2.3a1-162-gfbb3cc59\n" +"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-27 19:35+0000\n" +"Last-Translator: Aindriú Mac Giolla Eoin \n" +"Language-Team: Irish \n" +"Language: ga\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :(n>6 && n<11) ? 3 : 4;\n" +"X-Generator: Weblate 5.11-dev\n" + +#: ../fdroidserver/nightly.py +msgid "" +"\n" +"SSH public key to be used as deploy key:" +msgstr "" +"\n" +"Eochair phoiblí SSH le húsáid mar eochair imlonnaithe:" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "" +"\n" +"{path} encoded for the DEBUG_KEYSTORE secret variable:" +msgstr "" +"\n" +"{path} ionchódaithe don athróg rúnda DEBUG_KEYSTORE:" + +#: ../fdroidserver/lint.py +#, python-format +msgid "\"%s/\" has no matching metadata file!" +msgstr "Níl aon chomhad meiteashonraí meaitseála ag \"%s/\"!" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Níor cheart eochair \"isPrimary\" a chur le scátháin!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "\"local_copy_dir\" {path} does not exist!" +msgstr "Níl \"local_copy_dir\" {path} ann!" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "Tá \"{apkfilename}\" suiteáilte cheana féin ar {dev}." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" contains recent {name} ({version})" +msgstr "Tá \"{path}\" le déanaí {name} ({version})" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "\"{path}\" exists but s3cmd is not installed!" +msgstr "Tá \"{path}\" ann ach níl s3cmd suiteáilte!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" +msgstr "Ní formáid comhaid tacaithe é \"{path}\" (úsáid: meiteashonraí/*.yml)" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" is signed by a key that is not allowed:" +msgstr "Tá \"{path}\" sínithe ag eochair nach bhfuil ceadaithe:" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "\"{url}\" is not a valid URL!" +msgstr "Ní URL bailí é \"{url}\"!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%(prog)s: error: %(message)s\n" +msgstr "%(prog)s: earráid: %(message)s\n" + +#: ../fdroidserver/publish.py +#, python-format +msgid "%d APKs failed to be signed or verified!" +msgstr "Theip ar %d APKs a shíniú nó a fhíorú!" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "%d problems found" +msgstr "Aimsíodh %d fadhbanna" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%r is not callable" +msgstr "Níl %r inghlaoite" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s did not produce a dict!" +msgstr "Níor tháirg %s deachtú!" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s has bad SHA-256: %s" +msgstr "Tá droch-SHA-256 ag %s: %s" + +#: ../fdroidserver/lint.py +#, python-format +msgid "%s is not an accepted build field" +msgstr "Ní réimse tógála inghlactha é %s" + +#: ../fdroidserver/common.py +msgid "'keypass' not found in config.yml!" +msgstr "Níl 'Keypass' le fáil i config.yml!" + +#: ../fdroidserver/common.py +msgid "'keystore' is NONE and 'smartcardoptions' is blank!" +msgstr "Is é 'keystore' NONE agus tá 'smartcardoptions' bán!" + +#: ../fdroidserver/common.py +msgid "'keystore' not found in config.yml!" +msgstr "Níl 'keystore' le fáil i config.yml!" + +#: ../fdroidserver/common.py +msgid "'keystorepass' not found in config.yml!" +msgstr "Níl 'keystorepass' le fáil i config.yml!" + +#: ../fdroidserver/common.py +msgid "'repo_keyalias' not found in config.yml!" +msgstr "Níl 'repo_keyalias' le fáil sa config.yml!" + +#: /usr/lib/python3.11/argparse.py +msgid "'required' is an invalid argument for positionals" +msgstr "Is argóint neamhbhailí é 'riachtanach' do shuíomhanna" + +#: ../fdroidserver/common.py +msgid "'sdk_path' not set in config.yml!" +msgstr "Níl 'sdk_path' socraithe sa config.yml!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" +msgstr "Tá '{aapt}' ró-shean, éilíonn fdroid build-tools-{version} nó níos nuaí!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{path}' failed to execute!" +msgstr "Theip ar '{path}' a rith!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{path}' has invalid format, it should be a dictionary!" +msgstr "Tá formáid neamhbhailí ag '{path}', ba chóir gur foclóir é!" + +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" +msgstr "Ní '{value}' bailí {field} in {appid}. Patrún Regex: {pattern}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field}, should be {pattern}" +msgstr "Ní '{field} bailí é '{value}', ba chóir go mbeadh {pattern}" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "Ní ritheann --merge-request ach ar aip amháin!" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "...checkupdate failed for {appid} : {error}" +msgstr "... theip ar checkupdate le haghaidh {appid} : {error}" + +#: /usr/lib/python3.11/argparse.py +msgid ".__call__() not defined" +msgstr ".__call__() gan sainmhíniú" + +#: ../fdroidserver/lint.py +msgid "/issues is missing" +msgstr "/tá saincheisteanna ar iarraidh" + +#: ../fdroidserver/mirror.py +msgid "A URL is required as an argument!" +msgstr "Tá URL ag teastáil mar argóint!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "APK signatures have different certificates in {path}:" +msgstr "Tá teastais éagsúla ag sínithe APK i {path}:" + +#: ../fdroidserver/__main__.py +msgid "Add PGP signatures using GnuPG for packages in repo" +msgstr "Cuir sínithe PGP leis ag baint úsáide as GnuPG le haghaidh pacáistí i repo" + +#: ../fdroidserver/update.py +msgid "Add a repo signing key to an unsigned repo" +msgstr "Cuir eochair sínithe repo le repo gan síniú" + +#: ../fdroidserver/update.py +msgid "Add skeleton metadata files for APKs that are missing them" +msgstr "Cuir comhaid mheiteashonraí cnámharlaigh le haghaidh APKs atá in easnamh orthu" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Adding new repo for only {name}" +msgstr "Ag cur repo nua le haghaidh {name} amháin" + +#: ../fdroidserver/init.py +msgid "Alias of the repo signing key in the keystore" +msgstr "Ailias an eochair sínithe repo sa siopa eochrach" + +#: ../fdroidserver/build.py +msgid "AllowedAPKSigningKeys missing but reference binary supplied" +msgstr "AllowedAPKSigningKeys ar iarraidh ach tagairt dénártha soláthraithe" + +#: ../fdroidserver/import_subcommand.py +msgid "Allows a different revision (or git branch) to be specified for the initial import" +msgstr "Ceadaíonn sé seo athbhreithniú difriúil (nó brainse git) a shonrú le haghaidh na hiompórtála tosaigh" + +#: ../fdroidserver/mirror.py +msgid "Also mirror the full archive section" +msgstr "Chomh maith leis sin scáthánaigh rannóg iomlán na cartlainne" + +#: ../fdroidserver/lint.py +msgid "Also warn about formatting issues, like rewritemeta -l" +msgstr "Chomh maith leis sin rabhadh faoi shaincheisteanna formáidithe, cosúil le rewritemeta -l" + +#: ../fdroidserver/scanner.py +msgid "Android AAR library" +msgstr "Leabharlann Android AAR" + +#: ../fdroidserver/scanner.py +msgid "Android APK file" +msgstr "Comhad Android APK" + +#: ../fdroidserver/scanner.py +msgid "Android DEX code" +msgstr "Cód Android DEX" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Android SDK not found at {path}!" +msgstr "Android SDK gan fáil ag {path}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' does not exist!" +msgstr "Níl cosán SDK Android '{path}' ann!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' is not a directory!" +msgstr "Ní eolaire é cosán SDK Android '{path}'!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK tool {cmd} not found!" +msgstr "Android SDK uirlis {cmd} gan aimsiú!" + +#: ../fdroidserver/lint.py +msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Tá Binaries ag app ach níl AllowedAPKSigningKeys comhfhreagrach aige chun deimhniú a phionnáil." + +#: ../fdroidserver/lint.py +msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" +msgstr "Tá NoSourceSince nó ArchivePolicy \"leaganacha 0\" nó 0 ag an bhfeidhmchlár ach níl aon cheann ag AutoUpdateMode nó UpdateCheckMode" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "App is in '{repo}' but has a link to {url}" +msgstr "Tá an feidhmchlár in '{repo}' ach tá nasc aige le {url}" + +#: ../fdroidserver/lint.py +msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "Tá dénártha ag leagan app ach níl AllowedAPKSigningKeys comhfhreagrach aige chun deimhniú a phionnáil." + +#: ../fdroidserver/lint.py +msgid "Appending .git is not necessary" +msgstr "Ní gá .git a iarcheangal" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Archiving {apkfilename} with invalid signature!" +msgstr "Cartlannú {apkfilename} le síniú neamhbhailí!" + +#: ../fdroidserver/lint.py +msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." +msgstr "AutoUpdateMode le UpdateCheckMode: Caithfidh patrún a bheith ag HTTP." + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Uimh uathoibríoch do gach leideanna." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Tá go huathoibríoch le gach leideanna." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" +msgstr "Drochchineál iontrála \"{mirrortype}\" i gcumraíocht scátháin: {mirror}" + +#: ../fdroidserver/mirror.py +msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" +msgstr "Bun-URL le scáthán, is féidir an eochair sínithe innéacs a áireamh ag baint úsáide as teaghrán an iarratais: ?fingerprint=" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in build '{versionName}'" +msgstr "Brainse '{branch}' a úsáidtear mar gheall ar thógáil '{versionName}'" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in srclib '{srclib}'" +msgstr "Brainse '{branch}' a úsáidtear mar chimire sa srclib '{srclib}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Broken symlink: {path}" +msgstr "Nasc siombalach briste: {path}" + +#: ../fdroidserver/__main__.py +msgid "Build a package from source" +msgstr "Tóg pacáiste ón bhfoinse" + +#: ../fdroidserver/build.py +msgid "Build all applications available" +msgstr "Tóg gach iarratas atá ar fáil" + +#: ../fdroidserver/lint.py +msgid "Build generated by `fdroid import` - remove disable line once ready" +msgstr "Tóg ginte ag 'iompórtáil fdroid' - bain líne dhíchumasaigh nuair atá sé réidh" + +#: ../fdroidserver/checkupdates.py +msgid "Build metadata git repo has uncommited changes!" +msgstr "Tóg meiteashonraí git repo Tá athruithe neamhchoitianta!" + +#: ../fdroidserver/build.py +msgid "Build only the latest version of each package" +msgstr "Ná tóg ach an leagan is déanaí de gach pacáiste" + +#: ../fdroidserver/init.py +#, python-format +msgid "Built repo based in \"%s\" with this config:" +msgstr "Repo tógtha bunaithe i \"%s\" leis an gcumraíocht seo:" + +#: ../fdroidserver/checkupdates.py +msgid "Can't auto-update app with no CurrentVersionCode" +msgstr "Ní féidir feidhmchlár a nuashonrú go huathoibríoch gan aon CurrentVersionCode" + +#: ../fdroidserver/build.py +msgid "Can't build due to {} error while scanning" +msgid_plural "Can't build due to {} errors while scanning" +msgstr[0] "Ní féidir tógáil de bharr earráid {} agus scanadh" +msgstr[1] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" +msgstr[2] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" +msgstr[3] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" +msgstr[4] "Ní féidir tógáil de bharr {} earráidí agus an scanadh" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Theip ar léamh {path}: {error}" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Cannot rewrite \"{path}\"" +msgstr "Ní féidir \"{path}\" a athscríobh" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +#, python-format +msgid "Categories '%s' is not valid" +msgstr "Níl catagóirí '%s' bailí" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +msgid "Categories are not set" +msgstr "Níl catagóirí socraithe" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Category \"{category}\" defined but not used for any apps!" +msgstr "Catagóir \"{category}\" sainithe ach nach n-úsáidtear le haghaidh aon apps!" + +#: ../fdroidserver/__main__.py +msgid "Check for updates to applications" +msgstr "Seiceáil le haghaidh nuashonruithe ar fheidhmchláir" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" +msgstr "Ag seiceáil cartlannú le haghaidh {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" + +#: ../fdroidserver/update.py +msgid "Clean update - don't uses caches, reprocess all APKs" +msgstr "Nuashonrú glan - ná húsáid taisce, athphróiseáil gach APKs" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Dathaigh an t-aschur loga" + +#: ../fdroidserver/import_subcommand.py +msgid "Comma separated list of categories." +msgstr "Camóga scartha liosta de chatagóirí." + +#: ../fdroidserver/__main__.py +#, python-format +msgid "Command '%s' not recognised.\n" +msgstr "Níor aithníodh ordú '%s'.\n" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes" +msgstr "Cuir athruithe i bhfeidhm" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Déan athruithe, brúigh, ansin déan iarratas cumaisc" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Conflicting \"{field}\" definitions between .yml and localized files:" +msgstr "Sainmhínithe contrártha \"{field}\" idir comhaid .yml agus logánaithe:" + +#: ../fdroidserver/__main__.py +msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." +msgstr "Argóintí contrártha: ní féidir '--verbose' agus '--quiet' a shonrú ag an am céanna." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not find '{command}' on your system" +msgstr "Níorbh fhéidir '{command}' a aimsiú ar do chóras" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version code" +msgstr "Níorbh fhéidir an cód leagain is déanaí a aimsiú" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version name" +msgstr "Níorbh fhéidir ainm an leagain is déanaí a aimsiú" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not find {path} to remove it" +msgstr "Níorbh fhéidir {path} a aimsiú chun é a bhaint" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not open APK {path} for analysis: " +msgstr "Níorbh fhéidir APK {path} a oscailt le haghaidh anailíse: " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not parse size \"{size}\", wrong type \"{type}\"" +msgstr "Níorbh fhéidir méid \"{size}\" a pharsáil, cineál mícheart \"{type}\"" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/import_subcommand.py +msgid "Couldn't find Application ID" +msgstr "Níorbh fhéidir aitheantas feidhmchláir a aimsiú" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find any version information" +msgstr "Níorbh fhéidir aon eolas faoin leagan a aimsiú" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find package ID" +msgstr "Níorbh fhéidir aitheantas an phacáiste a aimsiú" + +#: ../fdroidserver/update.py +msgid "Cowardily refusing to overwrite existing signing key setup!" +msgstr "Cowardily diúltú a overwrite thus eochair síniú atá ann cheana féin!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Created new container \"{name}\"" +msgstr "Cruthaíodh coimeádán nua \"{name}\"" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating \"{path}\" for configuring s3cmd." +msgstr "Ag cruthú \"{path}\" chun s3cmd a chumrú." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "{config_file} folamh á chruthú" + +#: ../fdroidserver/publish.py +msgid "Creating log directory" +msgstr "Comhadlann logála á cruthú" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating new S3 bucket: {url}" +msgstr "Buicéad nua S3 á chruthú: {url}" + +#: ../fdroidserver/publish.py +msgid "Creating output directory" +msgstr "Comhadlann aschurtha á cruthú" + +#: ../fdroidserver/index.py +msgid "Creating signed index with this key (SHA256):" +msgstr "Innéacs sínithe a chruthú leis an eochair seo (SHA256):" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "Creating temporary directory" +msgstr "Comhadlann shealadach á cruthú" + +#: ../fdroidserver/index.py +msgid "Creating unsigned index in preparation for signing" +msgstr "Innéacs gan síniú a chruthú mar ullmhúchán do shíniú" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" +msgstr "Tá CurrentVersionCode {cv} níos lú ná an iontráil tógála is sine {versionCode}" + +#: ../fdroidserver/nightly.py +msgid "DEBUG_KEYSTORE is not set or the value is incomplete" +msgstr "nach bhfuil DEBUG_KEYSTORE socraithe nó go bhfuil an luach neamhiomlán" + +#: ../fdroidserver/update.py +msgid "Delete APKs and/or OBBs without metadata from the repo" +msgstr "Scrios APKs agus/nó OBBanna gan meiteashonraí ón repo" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting archive, repo is too big ({size} max {limit})" +msgstr "Cartlann á scriosadh, tá repo rómhór ({size} max {limit})" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" +msgstr "Ag scriosadh stair git-scáthán, tá repo rómhór ({size} max {limit})" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Deleting unknown file: {path}" +msgstr "Comhad anaithnid á scriosadh: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Description '%s' is just the app's summary" +msgstr "Níl sa chur síos ar '%s' ach achoimre an fheidhmchláir" + +#: ../fdroidserver/lint.py +msgid "Description has a duplicate line" +msgstr "Tá líne dhúbailte ag cur síos" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Description of length {length} is over the {limit} char limit" +msgstr "Tá cur síos ar fhad {length} os cionn na teorann char {limit}" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Did you mean config/{name}.yml?" +msgstr "An raibh cumraíocht/{name}i gceist agat.yml?" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Did you mean {code}?" +msgstr "An raibh {code}i gceist agat?" + +#: ../fdroidserver/import_subcommand.py +msgid "Do not add 'disable:' to the generated build entries" +msgstr "Ná cuir 'díchumasaigh:' leis na hiontrálacha tógála ginte" + +#: ../fdroidserver/nightly.py +msgid "Do not deploy the new files to the repo" +msgstr "Ná húsáid na comhaid nua chuig an repo" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Do not include \"{path}\" in URL!" +msgstr "Ná cuir \"{path}\" san URL!" + +#: ../fdroidserver/init.py +msgid "Do not prompt for Android SDK path, just fail" +msgstr "Ná pras le haghaidh cosán SDK Android, ach teip" + +#: ../fdroidserver/nightly.py +msgid "Do not remove the private keys generated from the keystore" +msgstr "Ná bain na heochracha príobháideacha a ghintear ón siopa eochrach" + +#: ../fdroidserver/build.py +msgid "Don't create a source tarball, useful when testing a build" +msgstr "Ná chruthú tarball foinse, úsáideach nuair a thástáil a thógáil" + +#: ../fdroidserver/build.py +msgid "Don't refresh the repository, useful when testing a build with no internet connection" +msgstr "Ná athnuaigh an stór, úsáideach agus tú ag tástáil tógála gan aon nasc idirlín" + +#: ../fdroidserver/deploy.py ../fdroidserver/nightly.py +msgid "Don't use rsync checksums" +msgstr "Ná húsáid seiceálacha rsync" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Íoslódáil F-Droid.apk ag baint úsáide as scátháin a sceitheann níos lú don líonra" + +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" +msgstr "Íoslódáil scátháin iomlána de repos beag" + +#: ../fdroidserver/common.py +msgid "Downloading the repository already failed once, not trying again." +msgstr "Theip ar an stór a íoslódáil cheana féin uair amháin, gan iarracht a dhéanamh arís." + +#: ../fdroidserver/verify.py +#, python-brace-format +msgid "Downloading {url} failed. {error}" +msgstr "Níorbh fhéidir {url} a íosluchtú. {error}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Duplicate Anti-Feature declaration at {path} was ignored!" +msgstr "Rinneadh neamhaird ar dhearbhú Dúblach Frith-Ghné ag {path}!" + +#: ../fdroidserver/index.py +#, python-format +msgid "Duplicate entry \"%s\" in mirrors config!" +msgstr "Dúblach iontráil \"%s\" i gcumraíocht scátháin!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Duplicate link in '{field}': {url}" +msgstr "Nasc dúblach i '{field}': {url}" + +#: ../fdroidserver/common.py +#, python-format +msgid "ERROR: %(message)s" +msgstr "EARRÁID: %(message)s" + +#: ../fdroidserver/__main__.py +msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" +msgstr "EARRÁID: Baineadh an fo-ordú \"freastalaí\", bain úsáid as \"imscaradh\"!" + +#: ../fdroidserver/nightly.py +msgid "ERROR: unsupported CI type, patches welcome!" +msgstr "EARRÁID: cineál CI gan tacaíocht, fáilte roimh phaistí!" + +#: ../fdroidserver/nightly.py +#, python-format +msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "EARRÁID: Óstríomhaire git gan tacaíocht \"%s\", fáilte roimh phaistí!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "EARRÁID: Níl {key} i {path} \"archive\" nó \"repo\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "EARRÁID: Ní eochair bhailí í {key}!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "EARRÁID: Ba cheart gur de chineál {t} luach {key}!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "EARRÁID: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" + +#: ../fdroidserver/__main__.py +#, python-brace-format +msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." +msgstr "Tá ionchódú socraithe chun '{enc}' d'fhéadfadh fdroid rith i saincheisteanna ionchódú. Socraigh é chuig 'UTF-8' chun na torthaí is fearr a fháil." + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"Enter the path to the Android SDK (%s) here:\n" +"> " +msgstr "" +"Cuir isteach an chonair go dtí an SDK Android (%s) anseo:\n" +"> " + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {var} from {configname} is not set!" +msgstr "Níl athróg timpeallachta {var} ó {configname} socraithe!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Níl athróg timpeallachta {{env: {var}}} socraithe!" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "Earráid agus 'github_releases' á úsáid, {} gan a bheith i láthair. (B'fhéidir go mbeidh ort 'nuashonrú fdroid' a rith ar dtús.)" + +#: ../fdroidserver/import_subcommand.py +msgid "Error while getting repo address" +msgstr "Earráid agus seoladh repo á fháil" + +#: ../fdroidserver/scanner.py +msgid "Exit with a non-zero code if problems were found" +msgstr "Scoir le cód neamh-nialasach má aimsíodh fadhbanna" + +#: ../fdroidserver/__main__.py +msgid "Extract application metadata from a source repository" +msgstr "Bain meiteashonraí feidhmchláir as stór foinseach" + +#: ../fdroidserver/__main__.py +msgid "Extract signatures from APKs" +msgstr "Sleachta sínithe ó APKs" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "Níorbh fhéidir F-Droid.apk a íoslódáil ó fhoinse aitheanta ar bith!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed copying {path}: {error}" +msgstr "Theip ar chóipeáil {path}: {error}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Failed fetching signatures for '{apkfilename}': {error}" +msgstr "Theip ar shínithe a fháil le haghaidh '{apkfilename}': {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed reading {path}: {error}" +msgstr "Theip ar léamh {path}: {error}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed resizing {path}: {error}" +msgstr "Theip ar athrú {path}: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Failed to create S3 bucket: {url}" +msgstr "Theip ar bhuicéad S3 a chruthú: {url}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, deleting {path}" +msgstr "Theip ar fhaisnéis APK a fháil, ag scriosadh {path}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, skipping {path}" +msgstr "Theip ar fhaisnéis APK a fháil, gan bacadh le {path}" + +#: ../fdroidserver/update.py +msgid "Failed to get APK signing key fingerprint" +msgstr "Níorbh fhéidir méarlorg eochracha sínithe APK a fháil" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Failed to install '{apkfilename}' on {dev}: {error}" +msgstr "Theip ar shuiteáil '{apkfilename}' ar {dev}: {error}" + +#: ../fdroidserver/common.py +msgid "Failed to sign application" +msgstr "Theip ar an bhfeidhmchlár a shíniú" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Fetched buildserverid from VM: {buildserverid}" +msgstr "Fetched buildserverid ó VM: {buildserverid}" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" +msgstr "Sínithe faighte le haghaidh '{apkfilename}' -> '{sigdir}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "File disappeared while processing it: {path}" +msgstr "D'imigh an comhad agus é á phróiseáil: {path}" + +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py +#: ../fdroidserver/update.py +msgid "Finished" +msgstr "Críochnaithe" + +#: ../fdroidserver/lint.py +msgid "Forbidden HTML tags" +msgstr "Clibeanna HTML toirmiscthe" + +#: ../fdroidserver/build.py +msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." +msgstr "Fórsa tógáil apps faoi mhíchumas, agus déanann sé beag beann ar fhadhbanna scanadh. Ní cheadaítear ach amháin i mód tástála." + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Force halting build after {0} sec timeout!" +msgstr "Fórsa stopadh a thógáil tar éis {0} timeout sec!" + +#: ../fdroidserver/scanner.py +msgid "Force scan of disabled apps and builds." +msgstr "Fórsa scanadh apps faoi mhíchumas agus tógann." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" +msgstr "Aimsíodh grafach \"{path}\" gan meiteashonraí don fheidhmchlár \"{name}\"!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found bad funding file \"{path}\" for \"{name}\":" +msgstr "Aimsíodh drochchomhad maoinithe \"{path}\" in ionad \"{name}\":" + +#: ../fdroidserver/common.py +msgid "Found invalid appids in arguments" +msgstr "Aimsíodh appids neamhbhailí in argóintí" + +#: ../fdroidserver/common.py +msgid "Found invalid versionCodes for some apps" +msgstr "Aimsíodh leagan neamhbhailíCodes for some apps" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Found multiple JAR Signature Block Files in {path}" +msgstr "Aimsíodh ilchomhaid Bloc Sínithe JAR i {path}" + +#: ../fdroidserver/common.py +msgid "Found multiple Signer Certificates!" +msgstr "Aimsíodh il-Theastais Signer!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Found multiple metadata files for {appid}" +msgstr "Aimsíodh ilchomhaid mheiteashonraí le haghaidh {appid}" + +#: ../fdroidserver/index.py +msgid "Found multiple signing certificates for repository." +msgstr "Aimsíodh ildeimhnithe sínithe don stór." + +#: ../fdroidserver/index.py +msgid "Found no signing certificates for repository." +msgstr "Níor aimsíodh aon deimhnithe sínithe don stór." + +#: ../fdroidserver/lint.py +#, python-format +msgid "Found non-file at %s" +msgstr "Aimsíodh neamhchomhad ag %s" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Found {apkfilename} at {url}" +msgstr "Aimsíodh {apkfilename} ag {url}" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} problems in {filename}" +msgstr "Aimsíodh fadhbanna {count} i {filename}" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} warnings in {filename}" +msgstr "Aimsíodh rabhaidh {count} in {filename}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Generated skeleton metadata for {appid}" +msgstr "Meiteashonraí cnámharlaigh ginte le haghaidh {appid}" + +#: ../fdroidserver/common.py +#, python-format +msgid "Git checkout of '%s' failed" +msgstr "Theip ar sheiceáil Git de '%s'" + +#: ../fdroidserver/common.py +msgid "Git clean failed" +msgstr "Theip ar Git glan" + +#: ../fdroidserver/common.py +msgid "Git fetch failed" +msgstr "Theip ar ghabháil Git" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +#, python-format +msgid "Git remote set-head failed: \"%s\"" +msgstr "Theip ar cheann socraithe cianda Git: \"%s\"" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Git reset failed" +msgstr "Theip ar athshocrú Git" + +#: ../fdroidserver/common.py +msgid "Git submodule deinit failed" +msgstr "Theip ar Git submodule deinit" + +#: ../fdroidserver/common.py +msgid "Git submodule sync failed" +msgstr "Theip ar shioncronú submodule Git" + +#: ../fdroidserver/common.py +msgid "Git submodule update failed" +msgstr "Theip ar nuashonrú submodule Git" + +#: ../fdroidserver/common.py +msgid "HTTPS must be used with Subversion URLs!" +msgstr "Ní mór HTTPS a úsáid le URLanna Subversion!" + +#: ../fdroidserver/deploy.py +msgid "If a git mirror gets to big, allow the archive to be deleted" +msgstr "Má éiríonn scáthán git mór, lig don chartlann a scriosadh" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "If this upload fails, try manually uploading to {url}" +msgstr "Má theipeann ar an uaslódáil seo, déan iarracht uaslódáil de láimh chuig {url}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." +msgstr "Neamhaird a dhéanamh ar mheiteashonraí '{field}' i meiteashonraí '{metapath}' toisc go bhfuil sé dímheasta." + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring FUNDING.yml entry longer than 2048: %s" +msgstr "Gan neamhaird a dhéanamh FUNDING.yml iontráil níos faide ná 2048: %s" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring bad element in manifest: %s" +msgstr "Neamhaird á déanamh ar dhrocheilimint sa léiriú: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Má dhéantar neamhaird de {oldfile}, úsáid {newfile}!" + +#: ../fdroidserver/index.py +msgid "Ignoring package without metadata: " +msgstr "Neamhaird a dhéanamh ar phacáiste gan mheiteashonraí: " + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Ignoring stale cache data for {apkfilename}" +msgstr "Neamhaird a dhéanamh ar shonraí taisce stale le haghaidh {apkfilename}" + +#: ../fdroidserver/update.py +msgid "Include APKs that are signed with disabled algorithms like MD5" +msgstr "Cuir APKs san áireamh atá sínithe le halgartaim faoi mhíchumas cosúil le MD5" + +#: ../fdroidserver/mirror.py +msgid "Include the PGP signature .asc files in the mirror" +msgstr "Cuir na comhaid sínithe PGP .asc san áireamh sa scáthán" + +#: ../fdroidserver/mirror.py +msgid "Include the build logs in the mirror" +msgstr "Cuir na logaí tógála sa scáthán san áireamh" + +#: ../fdroidserver/mirror.py +msgid "Include the source tarballs in the mirror" +msgstr "Cuir na tarballs foinse sa scáthán" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Including metadata from %s@%s" +msgstr "Meiteashonraí ó %s@%s san áireamh" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Including metadata from {path}" +msgstr "Meiteashonraí ó {path} san áireamh" + +#: ../fdroidserver/common.py +msgid "Initialising submodules" +msgstr "Fo-mhodúil a thúsú" + +#: ../fdroidserver/install.py +msgid "Install all signed applications available" +msgstr "Suiteáil gach feidhmchlár sínithe atá ar fáil" + +#: ../fdroidserver/__main__.py +msgid "Install built packages on devices" +msgstr "Suiteáil pacáistí tógtha ar ghléasanna" + +#: ../fdroidserver/install.py +#, python-format +msgid "Installing %s..." +msgstr "%s á shuiteáil..." + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Installing '{apkfilename}' on {dev}..." +msgstr "Ag suiteáil '{apkfilename}' ar {dev}..." + +#: ../fdroidserver/__main__.py +msgid "Interact with the repo HTTP server" +msgstr "Idirghníomhú leis an bhfreastalaí repo HTTP" + +#: ../fdroidserver/update.py +msgid "Invalid APK" +msgstr "APK neamhbhailí" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid AutoUpdateMode: {mode}" +msgstr "AutoUpdateMode neamhbhailí: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid UpdateCheckMode: {mode}" +msgstr "Nuashonrú NeamhbhailíCheckMode: {mode}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid VercodeOperation: {field}" +msgstr "VercodeOperation neamhbhailí: {field}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Invalid VercodeOperation: {invalid_ops}" +msgstr "VercodeOperation neamhbhailí: {invalid_ops}" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid application ID {appid}" +msgstr "Aitheantas neamhbhailí feidhmchláir {appid}" + +#: ../fdroidserver/lint.py +msgid "Invalid bulleted list" +msgstr "Liosta neamhbhailí le hurchair" + +#: ../fdroidserver/common.py +#, python-format +msgid "Invalid name for published file: %s" +msgstr "Ainm neamhbhailí ar chomhad foilsithe: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid ndk: entry in build: \"{ndk}\"" +msgstr "Invalid ndk: iontráil sa tógáil: \"{ndk}\"" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid redirect to non-HTTPS: {before} -> {after} " +msgstr "Atreorú neamhbhailí chuig neamh-HTTPS: {before} -> {after} " + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid scrlib metadata: '{file}' does not exist" +msgstr "Meiteashonraí scrlib neamhbhailí: níl '{file}' ann" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: could not parse '{file}'" +msgstr "Meiteashonraí neamhbhailí srclib: níorbh fhéidir '{file}' a pharsáil" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" +msgstr "Meiteashonraí neamhbhailí srclic: eochair anaithnid '{key}' in '{file}'" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature failed to verify: {path}" +msgstr "Theip ar shíniú JAR a fhíorú: {path}" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature verified: {path}" +msgstr "Síniú JAR fíoraithe: {path}" + +#: ../fdroidserver/scanner.py +msgid "Java JAR file" +msgstr "Comhad Java JAR" + +#: ../fdroidserver/mirror.py ../fdroidserver/publish.py +#: ../fdroidserver/update.py +msgid "Java JDK not found! Install in standard location or set java_paths!" +msgstr "Níor aimsíodh Java JDK! Suiteáil i suíomh caighdeánach nó socraigh java_paths!" + +#: ../fdroidserver/scanner.py +msgid "Java compiled class" +msgstr "Rang tiomsaithe Java" + +#: ../fdroidserver/signindex.py +msgid "Java jarsigner not found! Install in standard location or set java_paths!" +msgstr "Níor aimsíodh jarsigner Java! Suiteáil i suíomh caighdeánach nó socraigh java_paths!" + +#: ../fdroidserver/lint.py +msgid "Javascript in HTML src attributes" +msgstr "Javascript i html src tréithe" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Keeping failed build \"{apkfilename}\"" +msgstr "Theip ar an tógáil \"{apkfilename}\" a choinneáil" + +#: ../fdroidserver/init.py +msgid "Keystore for signing key:\t" +msgstr "Keystore le haghaidh eochair sínithe:\t" + +#: ../fdroidserver/lint.py +msgid "Known debug key is used in AllowedAPKSigningKeys: " +msgstr "Úsáidtear eochair dífhabhtaithe aitheanta i AllowedAPKSigningKeys: " + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" +msgstr "Breathnaíonn an tiomantas is déanaí a úsáidtear '{commit}' cosúil le clib, ach updateCheckMode is '{ucm}'" + +#: ../fdroidserver/lint.py +msgid "Liberapay donation methods belong in the Liberapay: field" +msgstr "Baineann modhanna síntiús Liberapay sa Liberapay: réimse" + +#: ../fdroidserver/rewritemeta.py +msgid "List files that would be reformatted (dry run)" +msgstr "Liostaigh comhaid a leasófaí (rith tirim)" + +#: ../fdroidserver/lint.py +msgid "Locale included in f-droid.org URL" +msgstr "Logchaighdeán san áireamh sa URL f-droid.org" + +#: ../fdroidserver/build.py +msgid "Make the build stop on exceptions" +msgstr "Déan an stad tógála ar eisceachtaí" + +#: ../fdroidserver/index.py +msgid "Malformed repository mirrors." +msgstr "Scátháin stór míchumtha." + +#: ../fdroidserver/deploy.py +msgid "Malformed serverwebroot line:" +msgstr "Líne freastalaí míchumthawebroot:" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Max recursion depth in ZIP file reached: %s" +msgstr "Sroicheadh uasdoimhneacht athchúrsaithe sa chomhad ZIP: %s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Tá eochair \"isPrimary\" i gcumraíocht scátháin do {url}!" + +#: ../fdroidserver/mirror.py +msgid "Mirror the full repo and archive, all file types." +msgstr "Scáthánaigh an repo iomlán agus cartlann, gach cineál comhaid." + +#: ../fdroidserver/gpgsign.py +msgid "Missing output directory" +msgstr "Comhadlann aschurtha ar iarraidh" + +#: ../fdroidserver/metadata.py +msgid "Moving Anti-Features declarations to localized files:" +msgstr "Dearbhuithe Frith-Gnéithe a bhogadh chuig comhaid logánaithe:" + +#: ../fdroidserver/index.py +msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" +msgstr "Níl \"repo_pubkey\" ná \"keystorepass\" leagtha síos i config.yml" + +#: ../fdroidserver/verify.py +#, python-format +msgid "No APK for package: %s" +msgstr "Gan APK don phacáiste: %s" + +#: ../fdroidserver/common.py +msgid "No Android SDK found!" +msgstr "Níor aimsíodh SDK Android!" + +#: ../fdroidserver/install.py +msgid "No attached devices found" +msgstr "Níor aimsíodh aon ghléas ceangailte" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Níor aimsíodh aon ghléas le haghaidh `adb install`! Cuir ceann isteach le do thoil." + +#: ../fdroidserver/index.py +msgid "No fingerprint in URL." +msgstr "Gan méarlorg in URL." + +#: ../fdroidserver/common.py +msgid "No git submodules available" +msgstr "Níl aon submodules git ar fáil" + +#: ../fdroidserver/import_subcommand.py +msgid "No gradle project could be found. Specify --subdir?" +msgstr "Ní raibh aon tionscadal grádaithe le fáil. Sonraigh --subdir?" + +#: ../fdroidserver/import_subcommand.py +msgid "No information found." +msgstr "Níor aimsíodh aon eolas." + +#: ../fdroidserver/checkupdates.py +msgid "No matching tags found" +msgstr "Níor aimsíodh clibeanna meaitseála" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "No minimum SDK version found in {0}, using default (3)." +msgstr "Níor aimsíodh aon leagan SDK íosta i {0}, ag baint úsáide as réamhshocrú (3)." + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is Free Software" +msgstr "Ní gá a shonrú go bhfuil an app Bogearraí Saor in Aisce" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is for Android" +msgstr "Ní gá a shonrú go bhfuil an aip le haghaidh Android" + +#: ../fdroidserver/deploy.py +msgid "No option set! Edit your config.yml to set at least one of these:" +msgstr "Níl aon rogha socraithe! Cuir do config.yml in eagar chun ceann amháin díobh seo ar a laghad a shocrú:" + +#: ../fdroidserver/common.py +msgid "No packages specified" +msgstr "Níor sonraíodh aon phacáistí" + +#: ../fdroidserver/install.py +#, python-format +msgid "No signed APK available for %s" +msgstr "Níl APK sínithe ar fáil le haghaidh %s" + +#: ../fdroidserver/install.py +msgid "No signed output directory - nothing to do" +msgstr "Gan chomhadlann aschurtha sínithe - níl aon rud le déanamh" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No signing certificates found in {path}" +msgstr "Níor aimsíodh aon deimhnithe sínithe i {path}" + +#: ../fdroidserver/common.py +#, python-format +msgid "No such package: %s" +msgstr "Gan a leithéid de phacáiste: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No such versionCode {versionCode} for app {appid}" +msgstr "Níl a leithéid de versionCode {versionCode} for app {appid}" + +#: ../fdroidserver/checkupdates.py +msgid "No tags found" +msgstr "Níor aimsíodh clibeanna ar bith" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "No unsigned directory - nothing to do" +msgstr "Gan chomhadlann gan síniú - níl aon rud le déanamh" + +#: ../fdroidserver/__main__.py +msgid "No version information could be found." +msgstr "Níorbh fhéidir aon eolas faoin leagan a aimsiú." + +#: ../fdroidserver/common.py +msgid "Not a valid size definition: \"{}\"" +msgstr "Ní sainmhíniú bailí méide é: \"{}\"" + +#: ../fdroidserver/signindex.py +msgid "Nothing to do" +msgstr "Faic le déanamh" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Nothing to do for {appid}." +msgstr "Níl aon rud le déanamh le haghaidh {appid}." + +#: ../fdroidserver/init.py +msgid "Now set these in config.yml:" +msgstr "Anois leagtar iad seo i config.yml:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "Tá leagan níos nuaíCode({integer}) ag comhad OBB ná aon APK:" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "Ní mór ainm comhaid OBB tosú le \"príomh.\" nó \"paiste.\":" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "Ní mheaitseálann ainm pacáiste OBB APK tacaithe:" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "Meaisín as líne, gan bacadh le giniúint scáthán git go dtí 'imscaradh fdroid'" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Tá luach 'packageNames' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "Tá luach 'projectUrl' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Tá an luach 'comhartha' in easnamh ar cheann de na míreanna cumraíochta 'github_releases'. gan bacadh ..." + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Only PNG and JPEG are supported for graphics, found: {path}" +msgstr "Ní thacaítear ach le PNG agus JPEG le haghaidh grafaicí, le fáil: {path}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Ní ghlacann ach le \"env\" eochair amháin" + +#: ../fdroidserver/checkupdates.py +msgid "Only process apps with auto-updates" +msgstr "Ná próiseáil ach feidhmchláir le nuashonruithe uathoibríocha" + +#: ../fdroidserver/lint.py +msgid "OpenCollective donation methods belong in the OpenCollective: field" +msgstr "Baineann modhanna síntiús OpenCollective sa OpenCollective: réimse" + +#: ../fdroidserver/verify.py +msgid "Output JSON report to file named after APK." +msgstr "Aschuir tuarascáil JSON le comhad ainmnithe i ndiaidh APK." + +#: ../fdroidserver/scanner.py +msgid "Output JSON to stdout." +msgstr "Aschur JSON go dtí an gnáth-roinn." + +#: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py +#: ../fdroidserver/publish.py ../fdroidserver/signindex.py +#: ../fdroidserver/update.py +msgid "Outputting JSON" +msgstr "Aschur JSON" + +#: ../fdroidserver/import_subcommand.py +msgid "Overall license of the project." +msgstr "Ceadúnas foriomlán an tionscadail." + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" +msgstr "Leagan bán sáraitheachName in {apkfilename} ó mheiteashonraí: {version}" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "Package \"{appid}\" already exists" +msgstr "Tá pacáiste \"{appid}\" ann cheana" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Parsing manifest at '{path}'" +msgstr "Léiriú parsála ag '{path}'" + +#: ../fdroidserver/common.py +msgid "Password required with username" +msgstr "Pasfhocal de dhíth le hainm úsáideora" + +#: ../fdroidserver/import_subcommand.py +msgid "Path to main Android project subdirectory, if not in root." +msgstr "Conair chuig príomhchomhadlann tionscadail Android, más rud é nach bhfuil sé i bhfréamh." + +#: ../fdroidserver/init.py +msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" +msgstr "Conair chuig an SDK Android (uaireanta a leagtar i ANDROID_HOME)" + +#: ../fdroidserver/btlog.py +msgid "Path to the git repo to use as the log" +msgstr "Conair chuig an repo git le húsáid mar an logáil isteach" + +#: ../fdroidserver/init.py +msgid "Path to the keystore for the repo signing key" +msgstr "Conair chuig an siopa eochrach don eochair sínithe repo" + +#: ../fdroidserver/nightly.py +msgid "Print the secret variable to the terminal for easy copy/paste" +msgstr "Priontáil an athróg rúnda chuig an teirminéal le haghaidh cóip / greamaigh éasca" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Cumasaíodh mód príobháideachta bunaithe ar do logán ({country_code})." + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Problem with ZIP file: %s, error %s" +msgstr "Fadhb le comhad ZIP: %s, earráid %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Problem with xml at '{path}'" +msgstr "Fadhb le xml ag '{path}'" + +#: ../fdroidserver/checkupdates.py +msgid "Process auto-updates" +msgstr "Próiseas uath-nuashonruithe" + +#: ../fdroidserver/publish.py ../fdroidserver/update.py +#, python-brace-format +msgid "Processing {apkfilename}" +msgstr "Próiseáil {apkfilename}" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py +#, python-brace-format +msgid "Processing {appid}" +msgstr "Próiseáil {appid}" + +#: ../fdroidserver/update.py +msgid "Produce human-readable XML/JSON for index files" +msgstr "XML / JSON atá inléite ag an duine a tháirgeadh le haghaidh comhaid innéacs" + +#: ../fdroidserver/import_subcommand.py +msgid "Project URL to import from." +msgstr "URL an tionscadail le hiompórtáil uaidh." + +#: ../fdroidserver/lint.py +msgid "Punctuation should be avoided" +msgstr "Ba cheart poncaíocht a sheachaint" + +#: ../fdroidserver/btlog.py +msgid "Push the log to this git remote repository" +msgstr "Brúigh an logáil isteach sa stór cianda git seo" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing binary transparency log to {url}" +msgstr "Ag brú loga trédhearcachta dénártha chuig {url}" + +#: ../fdroidserver/deploy.py +msgid "Pushing to remote server failed!" +msgstr "Theip ar bhrú chuig freastalaí cianda!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing to {url}" +msgstr "Ag brú go {url}" + +#: ../fdroidserver/__main__.py +msgid "Quickly start a new repository" +msgstr "Tosaigh stór nua go tapa" + +#: ../fdroidserver/__main__.py +msgid "Read all the metadata files and exit" +msgstr "Léigh na comhaid mheiteashonraí go léir agus scoir" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading '{config_file}'" +msgstr "Ag léamh '{config_file}'" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" +msgstr "Pacáiste á léamhName/versionCode/versionName failed, APK invalid: '{apkfilename}'" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" +msgstr "Pacáiste á léamhName/versionCode/versionName failed,APK invalid: '{apkfilename}'" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Reading {apkfilename} from cache" +msgstr "{apkfilename} á léamh ón taisce" + +#: ../fdroidserver/build.py +msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "Athnuaigh agus cuir rialacha agus sínithe scanóirí taisce ón líonra" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Ag diúltú '{path}' a shíniú, tá an comhad san fhillteán {dir1} agus {dir2} araon." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Bain tarball foinse agus aon APKanna má fhíoraítear go rathúil é." + +#: ../fdroidserver/common.py +msgid "Removing specified files" +msgstr "Comhaid shonraithe á mbaint" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Removing {path}\"" +msgstr "Ag baint {path}\"" + +#: ../fdroidserver/update.py +msgid "Rename APK files that do not match package.name_123.apk" +msgstr "Athainmnigh comhaid APK nach bhfuil comhoiriúnach package.name_123.apk" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Resigning {apkfilename} with provided debug.keystore" +msgstr "Ag éirí as {apkfilename} le debug.keystore ar fáil" + +#: ../fdroidserver/update.py +msgid "Resize all the icons exceeding the max pixel size and exit" +msgstr "Athraigh méid na ndeilbhíní go léir a sháraíonn an t-uasmhéid picteilín agus scoir" + +#: ../fdroidserver/common.py +msgid "Restrict output to warnings and errors" +msgstr "Cuir srian le haschur le rabhaidh agus earráidí" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Theip ar íosluchtú arís: %s" + +#: ../fdroidserver/__main__.py +msgid "Rewrite all the metadata files" +msgstr "Athscríobh na comhaid mheiteashonraí go léir" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Rewriting '{appid}'" +msgstr "Athscríobh '{appid}'" + +#: ../fdroidserver/checkupdates.py +msgid "Run on git repo that has uncommitted changes" +msgstr "Rith ar repo git go bhfuil athruithe uncommitted" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "Rith thar {cibase} chun -debug.apk a aimsiú. agus scipeáil repo_basedir {repo_basedir}" + +#: ../fdroidserver/lint.py +msgid "Run rewritemeta to fix formatting" +msgstr "Rith rewritemeta chun formáidiú a shocrú" + +#: ../fdroidserver/deploy.py +msgid "Running first pass with MD5 checking disabled" +msgstr "Ag rith an chéad phas le MD5 seiceáil faoi mhíchumas" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Running wget in {path}" +msgstr "Ag rith wget in {path}" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "SHA-256 of {url} does not match entry!" +msgstr "Ní mheaitseálann SHA-256 de {url} iontráil!" + +#: ../fdroidserver/build.py +msgid "Scan the resulting APK(s) for known non-free classes." +msgstr "Scan an APK (í) mar thoradh air sin le haghaidh ranganna neamh-saor in aisce ar a dtugtar." + +#: ../fdroidserver/__main__.py +msgid "Scan the source code of a package" +msgstr "Scan cód foinse pacáiste" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {apk}" +msgstr "Fuair scanóir fadhbanna {count} i {apk}" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:" +msgstr "D'aimsigh scanóir fadhbanna {count} i {appid}:" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:{versionCode}:" +msgstr "Fuair scanóir fadhbanna {count} in {appid}:{versionCode}:" + +#: ../fdroidserver/build.py +msgid "Scanner found {} problem" +msgid_plural "Scanner found {} problems" +msgstr[0] "Aimsíodh {} fadhb leis an scanóir" +msgstr[1] "Fuair an scanóir {} fadhbanna" +msgstr[2] "Fuair an scanóir {} fadhbanna" +msgstr[3] "Fuair an scanóir {} fadhbanna" +msgstr[4] "Fuair an scanóir {} fadhbanna" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Scanadh APK le haghaidh bloic sínithe breise." + +#: ../fdroidserver/scanner.py +msgid "Scanning APK with dexdump for known non-free classes." +msgstr "Scanadh APK le dexdump do ranganna neamh-saor in aisce ar a dtugtar." + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Set NDK {release} ({version}) up" +msgstr "Socraigh NDK {release} ({version}) suas" + +#: ../fdroidserver/common.py +msgid "Set clock to that time using:" +msgstr "Socraigh clog go dtí an t-am sin ag baint úsáide as:" + +#: ../fdroidserver/nightly.py +msgid "Set maximum releases in repo before older ones are archived" +msgstr "Socraigh na heisiúintí uasta in repo sula gcuirtear na cinn níos sine i gcartlann" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Set open file limit to {integer}" +msgstr "Socraigh teorainn oscailte comhaid go {integer}" + +#: ../fdroidserver/__main__.py +msgid "Set up an app build for a nightly build repo" +msgstr "Socraigh tógáil app le haghaidh repo tógála oíche" + +#: ../fdroidserver/build.py +msgid "Setting open file limit failed: " +msgstr "Níorbh fhéidir teorainn oscailte comhaid a shocrú: " + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Setting {0} sec timeout for this build" +msgstr "Am istigh soic {0} leagan síos don tógáil seo" + +#: ../fdroidserver/__main__.py +msgid "Sign and place packages in the repo" +msgstr "Sínigh agus cuir pacáistí sa repo" + +#: ../fdroidserver/__main__.py +msgid "Sign indexes created using update --nosign" +msgstr "Sínigh innéacsanna a cruthaíodh le nuashonrú --nosign" + +#: ../fdroidserver/build.py +msgid "Skip scanning the source code for binaries and other problems" +msgstr "Scipeáil scanadh an cód foinse do binaries agus fadhbanna eile" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping '{apkfilename}' with invalid signature!" +msgstr "Scipeáil '{apkfilename}' le síniú neamhbhailí!" + +#: ../fdroidserver/deploy.py ../fdroidserver/index.py +#, python-format +msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" +msgstr "Scáthán Leathanaigh GitLab á scipeáil toisc go bhfuil an repo ró-mhór (>%.2fGB)!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping index generation for {appid}" +msgstr "Gan bacadh le giniúint innéacs le haghaidh {appid}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping {apkfilename} with invalid signature!" +msgstr "Scipeáil {apkfilename} le síniú neamhbhailí!" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Skipping {appid}: disabled" +msgstr "Scipeáil {appid}: disabled" + +#: ../fdroidserver/deploy.py +msgid "Specify a local folder to sync the repo to" +msgstr "Sonraigh fillteán logánta chun an t-athshealbhú a shioncronú" + +#: ../fdroidserver/deploy.py +msgid "Specify an identity file to provide to SSH for rsyncing" +msgstr "Sonraigh comhad aitheantais le soláthar do SSH le haghaidh rsyncing" + +#: ../fdroidserver/nightly.py +msgid "Specify which debug keystore file to use." +msgstr "Sonraigh an comhad siopa eochrach dífhabhtaithe atá le húsáid." + +#: ../fdroidserver/common.py +msgid "Spew out even more information than normal" +msgstr "Spew amach níos mó eolais ná mar is gnách" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Stripping mystery signature from {apkfilename}" +msgstr "Síniú rúndiamhrach á stialladh ó {apkfilename}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Summary '%s' is just the app's name" +msgstr "Achoimre níl i '%s' ach ainm an fheidhmchláir" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Summary of length {length} is over the {limit} char limit" +msgstr "Tá achoimre ar fhad {length} os cionn na teorann char {limit}" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "System clock is older than date in {path}!" +msgstr "Tá clog an chórais níos sine ná an dáta i {path}!" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" +msgstr "Ní oibríonn mód nuashonraithe clibeanna ach amháin le haghaidh stórtha git, hg, bzr agus git-svn faoi láthair" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode used in git-svn, but the repo was not set up with tags" +msgstr "Clibeanna cothrom le dáta modh a úsáidtear i git-svn, ach ní raibh an repo ar bun le clibeanna" + +#: ../fdroidserver/build.py +msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "Modh tástála - aschur a chur san eolaire tmp amháin, agus a thógáil i gcónaí, fiú má tá an t-aschur ann cheana féin." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Níl an pacáiste Python \"qrcode\" suiteáilte (m.sh. apt-get install python3-qrcode)!" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "The OBB version code must come after \"{name}.\":" +msgstr "Ní mór don chód leagan OBB teacht i ndiaidh \"{name}.\":" + +#: ../fdroidserver/btlog.py +msgid "The base URL for the repo to log (default: https://f-droid.org)" +msgstr "An URL bonn le haghaidh an repo a logáil (réamhshocrú: https://f-droid.org)" + +#: ../fdroidserver/mirror.py +msgid "The directory to write the mirror to" +msgstr "An chomhadlann chun an scáthán a scríobh chuig" + +#: ../fdroidserver/nightly.py +msgid "The file to be included in the repo (path or glob)" +msgstr "An comhad atá le cur san áireamh sa repo (cosán nó glob)" + +#: ../fdroidserver/index.py +msgid "The repository's fingerprint does not match." +msgstr "Ní mheaitseálann méarlorg an stóir." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "The root dir for local_copy_dir \"{path}\" does not exist!" +msgstr "Níl an dir fréimhe do local_copy_dir \"{path}\" ann!" + +#: ../fdroidserver/publish.py +msgid "There is a keyalias collision - publishing halted" +msgstr "Tá imbhualadh keyalias ann - cuireadh stop leis an bhfoilsitheoireacht" + +#: ../fdroidserver/common.py +msgid "These are the apps that have been archived from the main repo." +msgstr "Is iad seo na feidhmchláir atá curtha i gcartlann ón bpríomh-repo." + +#: ../fdroidserver/mirror.py +msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." +msgstr "Níor chóir an t-ordú seo a úsáid riamh chun scáthán a dhéanamh ar f-droid.org! Éilíonn cóip iomlán níos mó ná 600GB." + +#: ../fdroidserver/common.py +msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." +msgstr "Is stór feidhmchlár é seo atá le húsáid le F-Droid. Tá iarratais sa stór ceachtar binaries oifigiúla tógtha ag na forbróirí iarratas bunaidh, nó tá binaries tógtha ó fhoinse ag an admin f-droid.org ag baint úsáide as na huirlisí ar https://gitlab.com/fdroid." + +#: ../fdroidserver/import_subcommand.py +#, python-format +msgid "This repo already has local metadata: %s" +msgstr "Tá meiteashonraí logánta ag an athiarratas seo cheana: %s" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"To complete the setup, add your APKs to \"%s\"\n" +"then run \"fdroid update -c; fdroid update\". You might also want to edit\n" +"\"config.yml\" to set the URL, repo name, and more. You should also set up\n" +"a signing key (a temporary one might have been automatically generated).\n" +"\n" +"For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"and https://f-droid.org/docs/Signing_Process" +msgstr "" +"Chun an socrú a chríochnú, cuir do APKs le \"%s\"\n" +"Ansin rith \"Nuashonrú FDROID -C; nuashonrú fdroid\". B'fhéidir gur mhaith leat eagarthóireacht a dhéanamh freisin\n" +"\"config.yml\" a shocrú ar an URL, ainm repo, agus níos mó. Chomh maith leis sin, ba cheart duit\n" +"eochair shínithe (d'fhéadfadh ceann sealadach a bheith ginte go huathoibríoch).\n" +"\n" +"Tuilleadh eolais: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"agus https://f-droid.org/docs/Signing_Process" + +#: ../fdroidserver/deploy.py +msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" +msgstr "Chun awsbucket a úsáid, ní mór awssecretkey agus awsaccesskeyid a shocrú i config.yml freisin!" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "Chun rclone a úsáid, ní mór rclone_config agus awsbucket a shocrú i config.yml!" + +#: ../fdroidserver/lint.py +msgid "URL must start with https:// or http://" +msgstr "Ní mór URL tosú le https:// nó http://" + +#: ../fdroidserver/lint.py +msgid "URL shorteners should not be used" +msgstr "Níor chóir giorraithe URL a úsáid" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "URL {url} in Description: {error}" +msgstr "URL {url} in Description: {error}" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" +msgstr "Clib cheadúnais gan choinne \"{}\"! Ná húsáid ach clibeanna faofa FSF nó OSI ó https://spdx.org/license-list" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" +msgstr "Clib cheadúnais gan choinne \"{}\"! Ná húsáid ach clibeanna ceadúnais atá cumraithe i do chomhad cumraíochta" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Unknown entry {key} in {configname}" +msgstr "Iontráil anaithnid {key} in {configname}" + +#: ../fdroidserver/__main__.py +msgid "Unknown exception found!" +msgstr "Aimsíodh eisceacht anaithnid!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Unknown file '{filename}' in build '{versionName}'" +msgstr "Comhad anaithnid '{filename}' in build '{versionName}'" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Unknown metadata format: %s" +msgstr "Formáid anaithnid mheiteashonraí: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unknown metadata format: {path} (use: *.yml)" +msgstr "Formáid mheiteashonraí anaithnid: {path} (úsáid: *.yml)" + +#: ../fdroidserver/common.py +msgid "Unknown version of aapt, might cause problems: " +msgstr "Leagan anaithnid de aapt, d'fhéadfadh fadhbanna a chruthú: " + +#: ../fdroidserver/lint.py +msgid "Unnecessary leading space" +msgstr "Spás tosaigh gan ghá" + +#: ../fdroidserver/lint.py +msgid "Unnecessary trailing space" +msgstr "Spás rianaithe gan ghá" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised app field '{fieldname}' in '{path}'" +msgstr "Réimse app neamhaitheanta '{fieldname}' in '{path}'" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised build flag '{build_flag}' in '{path}'" +msgstr "Bratach tógála neamhaitheanta '{build_flag}' in '{path}'" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported file type \"{extension}\" for repo graphic" +msgstr "Cineál comhaid gan tacaíocht \"{extension}\" le haghaidh grafach repo" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported graphics file found: {path}" +msgstr "Aimsíodh comhad grafaicí gan tacaíocht: {path}" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused extlib at %s" +msgstr "Extlib neamhúsáidte ag %s" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused file at %s" +msgstr "Comhad neamhúsáidte ag %s" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scandelete path: %s" +msgstr "Conair scanta neamhúsáidte: %s" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scanignore path: %s" +msgstr "Conair scanignore neamhúsáidte: %s" + +#: ../fdroidserver/__main__.py +msgid "Update repo information for new packages" +msgstr "Nuashonraigh faisnéis maidir le pacáistí nua" + +#: ../fdroidserver/__main__.py +msgid "Update the binary transparency log for a URL" +msgstr "Nuashonraigh an logchomhad trédhearcachta dénártha le haghaidh URL" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "UpdateCheckData has invalid URL: {url}" +msgstr "Tá URL neamhbhailí ag UpdateCheckData: {url}" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" +msgstr "Ní mór do UpdateCheckData an cód leagain a mheaitseáil mar slánuimhir (\\d nó [0-9]): {codeex}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must use HTTPS URL: {url}" +msgstr "Ní mór do UpdateCheckData URL HTTPS a úsáid: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData not a valid URL: {url}" +msgstr "UpdateCheckData ní URL bailí é: {url}" + +#: ../fdroidserver/lint.py +msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." +msgstr "Tá UpdateCheckMode socraithe ach tá an chuma air nach bhfuil checkupdates rite fós." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/lint.py +msgid "UpdateCheckName is set to the known application ID, it can be removed" +msgstr "UpdateCheckName is set to the known application ID, is féidir é a bhaint" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to androidobservatory.org" +msgstr "{apkfilename} á uaslódáil chuig androidobservatory.org" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to virustotal" +msgstr "{apkfilename} á uaslódáil chuig virustotal" + +#: ../fdroidserver/lint.py +msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" +msgstr "Úsáid / HEAD in ionad / máistir nó / príomh go pointe ag comhad sa bhrainse réamhshocraithe" + +#: ../fdroidserver/update.py +msgid "Use `fdroid update -c` to create it." +msgstr "Bain úsáid as 'nuashonrú fdroid -c' chun é a chruthú." + +#: ../fdroidserver/build.py +msgid "Use build server" +msgstr "Úsáid freastalaí tógála" + +#: ../fdroidserver/update.py +msgid "Use date from APK instead of current time for newly added APKs" +msgstr "Dáta úsáide ó APK in ionad an ama reatha le haghaidh APKs nua-bhreise" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for configuring s3cmd." +msgstr "Ag baint úsáide as \"{path}\" chun s3cmd a chumrú." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "Ag baint úsáide as \"{path}\" chun sioncronú le cianstóráil." + +#: ../fdroidserver/common.py +msgid "Using APK Signature v2" +msgstr "Ag baint úsáide as Síniú APK v2" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v3" +msgstr "Ag baint úsáide as Síniú APK v3" + +#: ../fdroidserver/common.py +msgid "Using JAR Signature" +msgstr "Ag baint úsáide as Síniú JAR" + +#: ../fdroidserver/common.py +msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" +msgstr "Ag baint úsáide as jarsigner Java, ní mholtar chun APKs a fhíorú! Úsáid apksigner" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Using blank dictionary instead of contents of {path}!" +msgstr "Ag baint úsáide as foclóir bán in ionad ábhar {path}!" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Using existing keystore \"{path}\"" +msgstr "Ag baint úsáide as keystore atá ann cheana \"{path}\"" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "Ag baint úsáide as rclone chun sioncronú le: {url}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using s3cmd to sync with: {url}" +msgstr "Ag baint úsáide as s3cmd chun sioncronú le: {url}" + +#: ../fdroidserver/__main__.py +msgid "Valid commands are:" +msgstr "Is iad na horduithe bailí ná:" + +#: ../fdroidserver/verify.py +msgid "Verify against locally cached copy rather than redownloading." +msgstr "Fíoraigh i gcoinne cóip atá i dtaisce go háitiúil seachas athluchtú." + +#: ../fdroidserver/__main__.py +msgid "Verify the integrity of downloaded packages" +msgstr "Fíoraigh sláine na bpacáistí íoslódáilte" + +#: ../fdroidserver/index.py +msgid "Verifying index signature:" +msgstr "Síniú an innéacs á fhíorú:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Pacáiste {path} á fhíorú le apksigner." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "Ní féidir le heochair API VirusTotal comhaid níos mó ná 32MB a uaslódáil, úsáid {url} chun {path} a uaslódáil." + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Warn about possible metadata errors" +msgstr "Tabhair rabhadh faoi earráidí meiteashonraí a d'fhéadfadh a bheith ann" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Comhad dénártha WebAssembly" + +#: ../fdroidserver/update.py +msgid "When configured for signed indexes, create only unsigned indexes at this stage" +msgstr "Nuair atá sé cumraithe le haghaidh innéacsanna sínithe, ná cruthaigh ach innéacsanna gan síniú ag an gcéim seo" + +#: ../fdroidserver/lint.py +msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." +msgstr "Nuair a linting an yamllint stór ar fad faoi mhíchumas de réir réamhshocraithe. Cuireann an rogha seo iallach ar yamllint beag beann." + +#: ../fdroidserver/publish.py +msgid "When signing or verifying fails, exit with an error code." +msgstr "Nuair a theipeann ar shíniú nó ar fhíorú, scoir le cód earráide." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Ar mhaith leat F-Droid.apk a íoslódáil agus a shuiteáil trí adb? (TÁ/Níl)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Ar mhaith leat na haipeanna/na haipeanna a íoslódáil ó f-droid.org? (TÁ/Níl)" + +#: ../fdroidserver/init.py +msgid "X.509 'Distinguished Name' used when generating keys" +msgstr "X.509 'Ainm Oirirce' a úsáidtear agus eochracha á nginiúint" + +#: ../fdroidserver/common.py +msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" +msgstr "Is féidir leat ANDROID_HOME a úsáid chun an cosán a shocrú chuig do SDK, i.e.:" + +#: ../fdroidserver/scanner.py +msgid "ZIP file archive" +msgstr "Cartlann comhad ZIP" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "tuarascálacha adb {serial} is \"{status}\"!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "adding IdentityFile to {path}" +msgstr "IdentityFile á chur le {path}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "adding to {name}: {path}" +msgstr "ag cur le {name}: {path}" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "Rogha dhébhríoch: D'fhéadfadh %(option)s %(matches)s a mheaitseáil" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner in uirlisí tógála; Gabhann {version} APKanna le sínithe v3 neamhbhailí, gan aird a thabhairt." + +#: ../fdroidserver/common.py +msgid "apksigner not found! Cannot sign or verify modern APKs" +msgstr "apksigner gan aimsiú! Ní féidir APKs nua-aimseartha a shíniú nó a fhíorú" + +#: ../fdroidserver/common.py +msgid "apksigner not found, it's required for signing!" +msgstr "apksigner gan aimsiú, tá sé ag teastáil le síniú!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py +#: ../fdroidserver/rewritemeta.py +msgid "application ID of file to operate on" +msgstr "aitheantas feidhmchláir an chomhaid le hoibriú air" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/publish.py ../fdroidserver/scanner.py +#: ../fdroidserver/verify.py +msgid "application ID with optional versionCode in the form APPID[:VERCODE]" +msgstr "ID iarratais le leagan roghnachCode san fhoirm APPID[:VERCODE]" + +#: ../fdroidserver/common.py +msgid "archive_url needs to end with /archive" +msgstr "Caithfidh archive_url deireadh a chur le /cartlann" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument \"-\" with mode %r" +msgstr "argóint \"-\" le mód %r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument %(argument_name)s: %(message)s" +msgstr "argóint %(argument_name)s: %(message)s" + +#: ../fdroidserver/nightly.py +msgid "attempting bare SSH connection to test deploy key:" +msgstr "ag iarraidh nasc SSH lom chun eochair imscaradh tástála:" + +#: ../fdroidserver/common.py +msgid "can not parse scrlib spec (not a string): '{}'" +msgstr "ní féidir spec scrlib a pharsáil (ní teaghrán): '{}'" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "can't open '%(filename)s': %(error)s" +msgstr "ní féidir '%(filename)s' a oscailt: %(error)s" + +#: ../fdroidserver/scanner.py +msgid "can't open non-https url: '{};" +msgstr "ní féidir url neamh-https a oscailt: '{};" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "cannot find required srclibs: \"{path}\"" +msgstr "ní féidir srclibs riachtanacha a aimsiú: \"{path}\"" + +#: /usr/lib/python3.11/argparse.py +msgid "cannot have multiple subparser arguments" +msgstr "ní féidir argóintí éagsúla subparser a bheith acu" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "ní féidir gníomhartha a chumasc - ainmnítear %r ar dhá ghrúpa" + +#: ../fdroidserver/nightly.py +msgid "cannot publish update, did you set the deploy key?" +msgstr "Ní féidir nuashonrú a fhoilsiú, ar shocraigh tú an eochair imlonnaithe?" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "cloning {url}" +msgstr "clónáil {url}" + +#: ../fdroidserver/__main__.py +msgid "commands from plugin modules:" +msgstr "orduithe ó mhodúil bhreiseáin:" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting option string: %s" +msgid_plural "conflicting option strings: %s" +msgstr[0] "teaghrán rogha contrártha: %s" +msgstr[1] "teaghráin roghanna contrártha: %s" +msgstr[2] "teaghráin roghanna contrártha: %s" +msgstr[3] "teaghráin roghanna contrártha: %s" +msgstr[4] "teaghráin roghanna contrártha: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser alias: %s" +msgstr "ailias fo-pharsála contrártha: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser: %s" +msgstr "fopharsálaí contrártha: %s" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "could not parse '{path}'" +msgstr "níorbh fhéidir '{path}' a pharsáil" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no name specified): '{}'" +msgstr "Níorbh fhéidir srclib spec a pharsáil (níor sonraíodh ainm ar bith): '{}'" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no ref specified): '{}'" +msgstr "Níorbh fhéidir srclib spec a pharsáil (níor sonraíodh tag): '{}'" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "created {path}" +msgstr "cruthaíodh {path}" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "current version is newer: old vercode={old}, new vercode={new}" +msgstr "Tá an leagan reatha níos nuaí: sean-vercode={old}, vercode nua={new}" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "deleting: repo/{apkfilename}" +msgstr "scriosadh: repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "comhad spleáchais gan ghlas" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "deployed process log {path} to {dest}" +msgstr "loga próiseas imlonnaithe {path} go {dest}" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "dest= is required for options like %r" +msgstr "dest= ag teastáil le haghaidh roghanna cosúil le %r" + +#: ../fdroidserver/scanner.py +msgid "downloading '{}'" +msgstr "'{}' á íosluchtú" + +#: ../fdroidserver/scanner.py +msgid "downloading scanner signatures from '{}' failed" +msgstr "Theip ar shínithe scanóirí a íosluchtú ó '{}'" + +#: ../fdroidserver/scanner.py +msgid "executable binary, possibly code" +msgstr "dénártha inrite, cód b'fhéidir" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "expected %s argument" +msgid_plural "expected %s arguments" +msgstr[0] "bhíothas ag súil le argóint %s" +msgstr[1] "bhíothas ag súil le %s argóint" +msgstr[2] "bhíothas ag súil le %s argóint" +msgstr[3] "bhíothas ag súil le %s argóint" +msgstr[4] "bhíothas ag súil le %s argóint" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at least one argument" +msgstr "bhíothas ag súil le hargóint amháin ar a laghad" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at most one argument" +msgstr "bhíothas ag súil le hargóint amháin ar a mhéad" + +#: /usr/lib/python3.11/argparse.py +msgid "expected one argument" +msgstr "bhíothas ag súil le hargóint amháin" + +#: ../fdroidserver/__main__.py +msgid "fdroid [] [-h|--help|--version|]" +msgstr "fdroid [] [-h|--help|--leagan|]" + +#: ../fdroidserver/scanner.py +msgid "fetch the latest version of signatures from the web" +msgstr "Faigh an leagan is déanaí de shínithe ón ngréasán" + +#: ../fdroidserver/metadata.py +msgid "force metadata errors (default) to be warnings, or to be ignored." +msgstr "bhfeidhm earráidí meiteashonraí (réamhshocrú) a bheith ina rabhaidh, nó le neamhaird a dhéanamh orthu." + +#: ../fdroidserver/common.py +msgid "git svn clone failed" +msgstr "theip ar chlón git svn" + +#: ../fdroidserver/scanner.py +msgid "gzip file archive" +msgstr "Cartlann Comhad Gzip" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ignored explicit argument %r" +msgstr "neamhaird ar argóint fhollasach %r" + +#: ../fdroidserver/index.py +msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" +msgstr "Ní mór síniú a bheith ag Innéacs-V1, bain úsáid as 'FDROID Signindex' chun é a chruthú!" + +#: ../fdroidserver/index.py +msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" +msgstr "Ní mór síniú a bheith ag Innéacs-V2, bain úsáid as 'FDROID Signindex' chun é a chruthú!" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid %(type)s value: %(value)r" +msgstr "luach neamhbhailí %(type)s: %(value)r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid choice: %(value)r (choose from %(choices)s)" +msgstr "rogha neamhbhailí: %(value)r (roghnaigh ó %(choices)s)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "Luach conflict_resolution neamhbhailí:%r" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" +msgstr "teaghrán neamhbhailí roghanna %(option)r: ní mór tosú le carachtar %(prefix_chars)r" + +#: ../fdroidserver/common.py +msgid "ipfs_cid not found, skipping CIDv1 generation" +msgstr "ipfs_cid gan aimsiú, gan bacadh le giniúint CIDv1" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" +msgstr "Tá an t-oideas tógála is déanaí níos nuaí: sean-vercode={old}, vercode nua={new}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" +msgstr "Ní chríochnaíonn local_copy_dir le \"fdroid\", b'fhéidir gur chiallaigh tú: \"{path}\"" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be an absolute path!" +msgstr "Caithfidh local_copy_dir a bheith ina cosán iomlán!" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be directory, not a file!" +msgstr "Ní mór local_copy_dir a bheith eolaire, ní comhad!" + +#: ../fdroidserver/index.py +#, python-format +msgid "mirror '%s' does not end with 'fdroid'!" +msgstr "ní chríochnaíonn scáthán '%s' le 'fdroid'!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "mirrors set twice, in config.yml and {path}!" +msgstr "scátháin leagtha faoi dhó, i config.yml agus {path}!" + +#: /usr/lib/python3.11/argparse.py +msgid "mutually exclusive arguments must be optional" +msgstr "ní mór argóintí comheisiacha a bheith roghnach" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "next {name} cache update due in {time}" +msgstr "an chéad nuashonrú taisce {name} eile dlite i {time}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "no \"icon\" in {appid}" +msgstr "níl \"icon\" in {appid}" + +#: ../fdroidserver/signatures.py +msgid "no APK supplied" +msgstr "níor soláthraíodh aon APK" + +#: ../fdroidserver/checkupdates.py +msgid "no version information found" +msgstr "Níor aimsíodh aon eolas leagain" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "not allowed with argument %s" +msgstr "ní cheadaítear le hargóint %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "one of the arguments %s is required" +msgstr "tá ceann de na hargóintí %s ag teastáil" + +#: ../fdroidserver/common.py ../fdroidserver/index.py +msgid "only accepts strings, lists, and tuples" +msgstr "ní ghlacann ach teaghráin, liostaí, agus tuples" + +#: /usr/lib/python3.11/argparse.py +msgid "options" +msgstr "roghanna" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "overwriting existing {path}" +msgstr "overwriting atá ann cheana {path}" + +#: /usr/lib/python3.11/argparse.py +msgid "positional arguments" +msgstr "argóintí suímh" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "process log deploy {path} to {dest} failed!" +msgstr "Theip ar logchomhad an phróisis {path} go {dest}!" + +#: ../fdroidserver/build.py +msgid "reference binary missing signature" +msgstr "tagairt dénártha síniú ar iarraidh" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" +msgstr "diúltú íoslódáil trí nasc HTTP neamhchinnte (úsáid HTTPS nó sonraigh --no-https-check): {apkfilename}" + +#: ../fdroidserver/index.py +#, python-format +msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." +msgstr "repo_icon níl \"repo/icons/%s\" ann, rud a ghineann sealbhóir áite." + +#: ../fdroidserver/common.py +msgid "repo_url needs to end with /repo" +msgstr "Caithfidh repo_url deireadh a chur le / repo" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "rsync is missing or broken: {error}" +msgstr "rsync ar iarraidh nó briste: {error}" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" +msgstr "innéacsanna sioncronaithe s3cmd {path} go {url} agus scrios" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "sioncrónaíonn s3cmd innéacsanna ó {path} go {url} agus scriosann sé bainte" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "scanner cache is malformed! You can clear it with: '{clear}'" +msgstr "tá taisce scanóir míchumtha! Is féidir leat é a ghlanadh le: '{clear}'" + +#: ../fdroidserver/deploy.py +msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" +msgstr "serverwebroot: ní chríochnaíonn cosán le \"fdroid\", b'fhéidir gur chiallaigh tú ceann acu seo:" + +#: ../fdroidserver/scanner.py +msgid "shared library" +msgstr "leabharlann chomhroinnte" + +#: /usr/lib/python3.11/argparse.py +msgid "show this help message and exit" +msgstr "Taispeáin an teachtaireacht chabhrach seo agus scoir" + +#: ../fdroidserver/signatures.py +msgid "signed APK, either a file-path or HTTPS URL." +msgstr "APK sínithe, cosán comhaid nó URL HTTPS." + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: log content is empty" +msgstr "Ná bac le logaí tógála iomlána a úsáid: tá an t-ábhar logála folamh" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: not enabled in config" +msgstr "Ná bac le logaí iomlána tógála a úsáid: níl sé cumasaithe sa chumraíocht" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "skipping source tarball: {path}" +msgstr "tarball foinse scipeála: {path}" + +#: ../fdroidserver/lint.py +msgid "srclibs missing name and/or @" +msgstr "srclibs ainm ar iarraidh agus / nó @" + +#: ../fdroidserver/scanner.py +msgid "static library" +msgstr "Leabharlann statach" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "supplied reference binary has allowed signer {signer}" +msgstr "tá dénártha tagartha soláthraithe ceadaithe signer {signer}" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "the following arguments are required: %s" +msgstr "Tá na hargóintí seo a leanas ag teastáil: %s" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "fíor" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unexpected option string: %s" +msgstr "teaghrán rogha gan choinne: %s" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unknown parser %(parser_name)r (choices: %(choices)s)" +msgstr "parsálaí anaithnid %(parser_name)r (roghanna: %(choices)s)" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unrecognized arguments: %s" +msgstr "argóintí neamhaitheanta: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "unsafe permissions on '{config_file}' (should be 0600)!" +msgstr "ceadanna neamhshábháilte ar '{config_file}' (ba chóir go mbeadh 0600)!" + +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py +msgid "usage: " +msgstr "úsáid: " + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "using Apache libcloud to sync with {url}" +msgstr "ag baint úsáide as Apache libcloud chun sioncronú le {url}" + +#: ../fdroidserver/deploy.py +msgid "virustotal.com is rate limiting, waiting to retry..." +msgstr "Tá virustotal.com ag teorannú ráta, ag fanacht le triail a bhaint as ..." + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "tá" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "{0} app, {1} key aliases" +msgid_plural "{0} apps, {1} key aliases" +msgstr[0] "{0} aip, {1} ailiasanna eochrach" +msgstr[1] "{0} aippeanna, {1} ailiasanna eochrach" +msgstr[2] "{0} aippeanna, {1} ailiasanna eochrach" +msgstr[3] "{0} aippeanna, {1} ailiasanna eochrach" +msgstr[4] "{0} aippeanna, {1} ailiasanna eochrach" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename} ({appid}) has no metadata!" +msgstr "{apkfilename} ({appid}) níl aon mheiteashonraí aige!" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " +msgstr "Tá drochdháta ag AndroidManifest.xml {apkfilename}: " + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} does not have a name! Using application ID instead." +msgstr "Níl ainm ar {appid}! Ag baint úsáide as ID iarratais ina ionad." + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Android application ID!" +msgstr "Ní ID feidhmchlár Android bailí é {appid} ó {path}!" + +#: ../fdroidserver/metadata.py ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Java Package Name!" +msgstr "Ní Ainm Pacáiste Java bailí é {appid} ó {path}!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} has both APKs and files: {files}" +msgstr "Tá APKs agus comhaid araon ag {appid}: {files}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{appid} is missing {name}" +msgstr "Tá {appid} ar iarraidh {name}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: Unknown extlib {path} in build '{versionName}'" +msgstr "{appid}: Extlib {path} anaithnid i dtógáil '{versionName}'" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "{appid}: no builds specified, running on current source state" +msgstr "{appid}: níl aon tógáil sonraithe, ag rith ar staid na foinse reatha" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" +msgstr "{appid}: Caithfidh {field} a bheith ina '{type}', ach is '{fieldtype}' é!'" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" +msgstr "{appid}: Caithfidh {field} a bheith ina '{type}', ach is '{fieldtype}' é!" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be an integer, found: {value}" +msgstr "Ní mór {build_flag} a bheith ina slánuimhir, le fáil: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be list or string, found: {value}" +msgstr "Ní mór {build_flag} a bheith liosta nó teaghrán, le fáil: {value}" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{file} is blank or corrupt!" +msgstr "Tá {file} bán nó truaillithe!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." +msgstr "{name} Níl \"{section}/icons/{path}\" ann! Seiceáil \"config.yml\"." + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "Is dúblach é {path1} de {path2}, bain ceann amháin!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{path} already exists, ignoring import results!" +msgstr "Tá {path} ann cheana féin, gan aird ar thorthaí iompórtála!" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "{path} does not exist! Create it by running:" +msgstr "Níl {path} ann! Cruthaigh é trí rith:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" +msgstr "{path} Tá síniú comhad dona \"{pattern}\", is féidir Janus leas a bhaint as!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} has been flagged by virustotal {count} times:" +msgstr "{path} curtha faoi bhratach ag virustotal {count} times:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "Tá an méarloirg mícheart ag {path} ({fingerprint})!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not \"key: value\" dict, but a {datatype}!" +msgstr "Níl {path} \"eochair: luach\" dict, ach {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not a standard config file!" +msgstr "Ní comhad cumraíochta caighdeánach é {path}!" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "{path} is not list, but a {datatype}!" +msgstr "Níl {path} liosta, ach {datatype}!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not {expected_type}, but a {datatype}!" +msgstr "Níl {path} {expected_type}, ach {datatype}!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} is zero size!" +msgstr "Is é {path} méid nialasach!" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} more than 200MB, manually upload: {url}" +msgstr "{path} níos mó ná 200MB, uaslódáil de láimh: {url}" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" +msgstr "{path}: Ní cód tíre bailí ISO_3166-1 alfa-2 é \"{code}\"!" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path}: {error}" +msgstr "{path}: {error}" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{url} does not end with \"fdroid\", check the URL path!" +msgstr "Ní chríochnaíonn {url} le \"fdroid\", seiceáil an cosán URL!" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{url} does not start with \"http\"!" +msgstr "Ní thosaíonn {url} le \"http\"!" + +#: ../fdroidserver/build.py +msgid "{} build failed" +msgid_plural "{} builds failed" +msgstr[0] "Theip ar {} tógáil" +msgstr[1] "Theip ar {} tógálacha" +msgstr[2] "Theip ar {} tógálacha" +msgstr[3] "Theip ar {} tógálacha" +msgstr[4] "Theip ar {} tógálacha" + +#: ../fdroidserver/build.py +msgid "{} build succeeded" +msgid_plural "{} builds succeeded" +msgstr[0] "D'éirigh le {} tógáil" +msgstr[1] "D'éirigh le {} tógálacha" +msgstr[2] "D'éirigh le {} tógálacha" +msgstr[3] "D'éirigh le {} tógálacha" +msgstr[4] "D'éirigh le {} tógálacha" diff --git a/locale/he/LC_MESSAGES/fdroidserver.po b/locale/he/LC_MESSAGES/fdroidserver.po index 4a17275c..f9a3a7fd 100644 --- a/locale/he/LC_MESSAGES/fdroidserver.po +++ b/locale/he/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-03-25 11:36+0100\n" "PO-Revision-Date: 2024-08-18 06:27+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [אפשרויות]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "‎.__call__()‎ לא מוגדר" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -388,11 +359,13 @@ msgstr[1] "" msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +388,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +405,10 @@ msgstr "הפקודה ‚%s’ אינה מוכרת.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +418,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +448,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +475,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +542,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +590,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +631,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +640,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +677,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +702,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -770,10 +775,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +806,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -870,15 +870,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +921,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1008,16 +1011,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1130,6 +1129,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1163,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1227,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1254,7 +1261,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1272,13 +1278,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1289,10 +1309,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "אפשרויות" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1350,6 +1366,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1436,6 +1457,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1449,14 +1479,6 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "לשנות שמות של קובצי APK שאינם בתבנית package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1470,6 +1492,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "לשכתב את כל קובצי נתוני העל" @@ -1483,6 +1510,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1530,6 +1562,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1650,6 +1686,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1714,6 +1754,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1735,11 +1779,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1749,7 +1788,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "אירעה חריגה לא מוכרת!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1787,6 +1825,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1817,11 +1856,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1835,6 +1869,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1854,11 +1889,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1873,27 +1904,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "שימוש" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "שימוש: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1911,6 +1925,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1927,11 +1946,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1942,6 +1956,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1963,6 +1982,11 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." @@ -1972,6 +1996,10 @@ msgstr "" msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1984,6 +2012,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1996,6 +2032,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2006,18 +2047,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2028,11 +2065,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2043,8 +2082,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2063,7 +2100,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2077,14 +2114,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2103,14 +2136,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2141,10 +2166,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2160,13 +2181,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2184,8 +2207,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2193,20 +2214,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2219,10 +2234,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,8 +2246,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2250,35 +2259,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2316,8 +2311,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,30 +2329,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2369,72 +2347,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "האפשרות ‎-%s לא מוכרת" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "האפשרות ‎-%s דורשת משתנה" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "האפשרות ‎--%s לא מוכרת" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "משתני רשות" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "אפשרויות" @@ -2444,8 +2356,6 @@ msgstr "אפשרויות" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2478,13 +2388,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2411,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "להציג את מספר הגרסה של התוכנית ולצאת" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "להציג את הודעת העזרה הזאת ולצאת" @@ -2544,29 +2445,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2474,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "שימוש: " @@ -2592,6 +2487,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2503,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2536,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2576,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2601,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/hi/LC_MESSAGES/fdroidserver.po b/locale/hi/LC_MESSAGES/fdroidserver.po index 48764286..58779021 100644 --- a/locale/hi/LC_MESSAGES/fdroidserver.po +++ b/locale/hi/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-02-22 11:24+0000\n" "Last-Translator: Saurmandal \n" "Language-Team: Hindi \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() परिभाषित नहीं" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +354,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +410,10 @@ msgstr "कमांड '%s' पहचाना नहीं।\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +423,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +453,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +480,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +547,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +595,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +636,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +645,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +682,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +707,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -770,10 +780,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +811,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -870,15 +875,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +926,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1008,16 +1016,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1130,6 +1134,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1168,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1232,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1254,7 +1266,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1272,13 +1283,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1289,10 +1314,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "विकल्प" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1350,6 +1371,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1436,6 +1462,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1449,12 +1484,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1470,6 +1502,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1483,6 +1520,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1530,6 +1572,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1650,6 +1696,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1714,6 +1764,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1735,11 +1789,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1749,7 +1798,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "अज्ञात अपवाद मिला!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1787,6 +1835,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1817,11 +1866,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1835,6 +1879,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1854,11 +1899,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1873,27 +1914,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "प्रयोग" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "प्रयोग: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1911,6 +1935,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1927,11 +1956,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1942,6 +1966,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1963,15 +1992,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1984,6 +2026,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1996,6 +2046,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2006,18 +2061,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2028,11 +2079,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2043,8 +2096,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2063,7 +2114,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2077,14 +2128,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2103,14 +2150,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "जटिल" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2141,10 +2180,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2160,13 +2195,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2184,8 +2221,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2193,20 +2228,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2219,10 +2248,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,8 +2260,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2250,35 +2273,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2316,8 +2325,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,30 +2343,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2369,72 +2361,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "विकल्प -%s मान्यता प्राप्त नहीं" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "वैकल्पिक तर्क" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2445,8 +2371,6 @@ msgstr "विकल्प" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2479,13 +2403,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2501,17 +2426,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "यह मदद संदेश दिखाएं और बाहर निकलें" @@ -2545,29 +2460,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2578,9 +2489,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "प्रयोग: " @@ -2593,6 +2502,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2605,21 +2518,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2640,7 +2551,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2681,9 +2591,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2706,6 +2616,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/hu/LC_MESSAGES/fdroidserver.po b/locale/hu/LC_MESSAGES/fdroidserver.po index b9f8ee7b..6e232ead 100644 --- a/locale/hu/LC_MESSAGES/fdroidserver.po +++ b/locale/hu/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-04-10 13:33+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Hungarian \n" @@ -40,6 +40,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "A(z) „%s/” nem rendelkezik megfelelő metaadatfájllal." +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +54,6 @@ msgstr "\"local_copy_dir\" {path} nem létezik!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "A(z) „{apkfilename}” már telepítve van ezen: {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "A(z) „{path}” elavult {name} csomagot tartalmaz ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,17 +79,6 @@ msgstr "\"{path}\" kulccsal aláírt és így nem engedélyezett:" msgid "\"{url}\" is not a valid URL!" msgstr "A(z) „{url}” nem érvényes URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "A(z) %(option)s kapcsoló %(number)d argumentumot igényel" -msgstr[1] "A(z) %(option)s kapcsoló %(number)d argumentumot igényel" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -106,14 +94,6 @@ msgstr "" msgid "%d problems found" msgstr "%d probléma található" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [kapcsolók]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -134,13 +114,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "A(z) %s nem elfogadott összeállítási mező" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "A(z) %s kapcsoló nem fogad értéket" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "A „keypass” nem található a config.yml fájlban." @@ -161,8 +134,6 @@ msgstr "A „keystorepass” nem található a config.yml fájlban." msgid "'repo_keyalias' not found in config.yml!" msgstr "A „repo_keyalias” nem található a config.yml fájlban." -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "A „required” argumentum érvénytelen argumentum pozicionális paraméterek esetén" @@ -176,11 +147,6 @@ msgstr "Az „sdk_path” nincs megadva a „config.yml” fájlban." msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "Az „{aapt}” túl régi, az fdroidhoz build-tools-{version} vagy újabb szükséges." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "A(z) „{field}” véletlenszerű sorrendben lesz. Használjon () vagy [] zárójeleket, ha fontos a sorrend." - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -191,7 +157,7 @@ msgstr "A(z) „{path}” végrehajtása sikertelen." msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex minta: {pattern}" @@ -201,13 +167,15 @@ msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex mi msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "A(z) „{value}” nem érvényes {field} érték itt: minta: {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…checkupdate sikertelen ennél: {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nincs definiálva" @@ -298,10 +266,6 @@ msgstr "A(z) „{cmd}” Android SDK eszköz megtalálva!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -328,6 +292,14 @@ msgstr "Az érvénytelen aláírású {apkfilename} archiválása!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -337,7 +309,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "A tükrözendő alap URL, tartalmazhatja az index aláírókulcsát a lekérdezésben: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -388,16 +359,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" msgstr[1] "Nem lehet összeállítani, mert {} hiba történt az átvizsgáláskor" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "A(z) {path} olvasása sikertelen: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "A(z) „{path}” nem írható újra" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "A(z) „%s” kategória érvénytelen" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "A kategóriák nincsenek megadva" @@ -420,6 +398,10 @@ msgstr "Archiválás ellenőrzése ennél: {appid} – apks:{integer}, keepversi msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Tiszta frissítés – nem használ gyorsítótárat, minden APK-k újra feldolgoz" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kategóriák vesszőkkel elválasztott listája." @@ -433,6 +415,10 @@ msgstr "A(z) „%s” nem ismerhető fel.\n" msgid "Commit changes" msgstr "Változások véglegesítése" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -442,20 +428,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Ütköző argumentumok: a „--verbose” és a „--quite” kapcsolók együtt nem adhatók meg." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Ütköző konfigurációs fájlok! {newfile} használata, {oldfile} mellőzése!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "A(z) „{command}” nem található a rendszeren" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "A legfrissebb verzió kódja nem található" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "A legfrissebb verzió neve nem található" @@ -475,6 +458,7 @@ msgstr "A(z) {path} APK nem nyitható meg az elemzéshez: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "A(z) „{size}” méret nem dolgozható fel, hibás „{type}” típus" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Az alkalmazásazonosító nem található" @@ -502,6 +486,11 @@ msgstr "Új „{name}” konténer létrehozva" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "„{path}” létrehozása a s3cmd beállításához." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "„{config_file}” olvasása" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Naplókönyvtár létrehozása" @@ -564,11 +553,6 @@ msgstr "A(z) „%s” leírás csak az alkalmazás összegzése" msgid "Description has a duplicate line" msgstr "A leírás ismételt sorokat tartalmaz" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "A leírás listát (%s) tartalmaz, de nem pontozott (*) vagy számozott (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -617,15 +601,14 @@ msgstr "Ne frissítse a tárolót, hasznos ha internetkapcsolat nélkül tesztel msgid "Don't use rsync checksums" msgstr "Ne használja az rsync ellenőrzőösszegeit" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Kis tárolók teljes tükrének letöltése" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "A tároló letöltése már egyszer sikertelen volt, nem próbálja meg újra." @@ -659,14 +642,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HIBA: A „server” alparancs eltávolításra került, használja ezt: „deploy”!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"HIBA: a parancsot sose használja az f-droid.org tükrözéséhez.\n" -"Az f-droid.org teljes tükrözéséhez több mint 200 GB tárhely szükséges." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HIBA: nem támogatott CI típus, foltokat szívesen fogadunk!" @@ -681,6 +656,16 @@ msgstr "" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -705,6 +690,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "A(z) {configname} konfigurációból származó {var} környezeti változó nincs beállítva!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "A(z) {configname} konfigurációból származó {var} környezeti változó nincs beállítva!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -725,6 +715,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "Aláírások kinyerése az APK-kból" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -795,10 +789,6 @@ msgstr "A fájl feldolgozás közben eltűnt: {path}" msgid "Finished" msgstr "Befejezve" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "A Flattr adományozási módok a FlattrID: mezőbe tartoznak" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tiltott HTML címkék" @@ -830,7 +820,6 @@ msgstr "Hibás „{path}” finanszírozási fájl található a(z) „{name}” msgid "Found invalid appids in arguments" msgstr "Érvénytelen alkalmazásazonosítók találhatók az argumentumokban" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Egyes alkalmazásoknál érvénytelen versionCode paraméterek találhatók" @@ -896,16 +885,13 @@ msgstr "A git tisztítás sikertelen" msgid "Git fetch failed" msgstr "A git lekérés sikertelen" -#: ../fdroidserver/common.py -#, fuzzy -msgid "Git prune failed" -msgstr "A git helyreállítás sikertelen" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "A git távoli fej beállítás sikertelen: „%s”" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "A git helyreállítás sikertelen" @@ -951,6 +937,11 @@ msgstr "A 2048-nál hosszabb FUNDING.yml bejegyzés figyelmen kívül hagyása: msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "A metaadatok nélküli csomag figyelmen kívül hagyása: " @@ -1036,16 +1027,12 @@ msgstr "Érvénytelen VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Érvénytelen VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Érvénytelen alkalmazásazonosító: {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Érvénytelen logikai érték: „%s”" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Érvénytelen felsorolás" @@ -1159,6 +1146,11 @@ msgstr "Rosszul formázott serverwebroot sor:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "A teljes tároló és archívum tükrözés, minden fájltípussal." @@ -1188,6 +1180,10 @@ msgstr "Nem található Android SDK!" msgid "No attached devices found" msgstr "Nem található csatolt eszköz" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nincs ujjlenyomat az URL-ben." @@ -1248,7 +1244,6 @@ msgstr "Nem található aláíró-tanúsítvány itt: {path}" msgid "No such package: %s" msgstr "Nincs ilyen csomag: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1285,7 +1280,6 @@ msgstr "Nincs teendő a(z) {appid} alkalmazásnál." msgid "Now set these in config.yml:" msgstr "Most adja meg ezeket a config.yml fájlban:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1303,26 +1297,28 @@ msgstr "Az OBB csomagneve nem egyezik egyik támogatott APK-val sem:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Offline gép, git tükör előállításának kihagyása az „fdroid deploy” kiadásáig" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "A grafikáknál csak PNG és JPEG formátum támogatott, ez található: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Csak a különbségek kiírása Play Áruház esetén" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1332,10 +1328,6 @@ msgstr "Csak az automatikus frissítésekkel rendelkező alkalmazások feldolgoz msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Az OpenCollective adományozási módok a OpenCollective: mezőbe tartoznak" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Beállítások" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "A JSON jelentés kiírása egy APK után elnevezett fájlba." @@ -1393,6 +1385,11 @@ msgstr "A tároló aláírókulcsához használt kulcstároló elérési útja" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "A titkos változó kiírása a terminálba a könnyű másolás és beillesztés érdekében" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1480,6 +1477,15 @@ msgstr "A(z) {apkfilename} olvasása gyorsítótárból" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Megadott fájlok eltávolítása" @@ -1493,14 +1499,11 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Azon APK fájlok átnevezése, melyek nem illeszkednek a csomag.név_123.apk mintára" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Visszaállítás és teljesen új összeállítási kiszolgáló létrehozása, még akkor is, ha a meglévő rendben lévőnek tűnik." - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1514,6 +1517,11 @@ msgstr "A legnagyobb képpontméretet meghaladó összes ikon átméretezése, msgid "Restrict output to warnings and errors" msgstr "A kimenet figyelmeztetésekre és hibákra korlátozása" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Összes metaadatfájl újraírása" @@ -1579,6 +1587,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Az átvizsgáló {count} problémát talált" msgstr[1] "Az átvizsgáló {count} problémát talált" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." @@ -1700,6 +1712,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1792,11 +1808,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1806,7 +1817,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Ismeretlen kivétel észlelve!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1844,6 +1854,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1874,11 +1885,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Tárolóinformációk frissítése az új csomagoknál" @@ -1892,6 +1898,7 @@ msgstr "A bináris átláthatósági napló frissítése az URL-nél" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1911,11 +1918,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1930,27 +1933,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Használat" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Használat: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1989,11 +1975,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2030,15 +2011,28 @@ msgstr "Ellenőrizze a letöltött csomagok érintetlenségét" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Figyelmeztetés a lehetséges metaadat-hibákról" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -2051,6 +2045,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2063,6 +2065,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2073,19 +2080,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "nem egyértelmű kapcsoló: %(option)s, ezekre illeszkedhet: %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "nem egyértelmű kapcsoló: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2095,11 +2098,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2110,8 +2115,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2130,7 +2133,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "„%(filename)s” nem nyitható meg: %(error)s" @@ -2144,14 +2147,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2170,14 +2169,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "komplex" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2208,10 +2199,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2236,8 +2223,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2255,8 +2240,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2264,20 +2247,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2290,10 +2267,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "lebegőpontos" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2306,8 +2279,6 @@ msgstr "git svn klónozás meghiúsult" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2322,35 +2293,21 @@ msgstr "az index-v1-nek kell legyen aláírása, használja az „fdroid signind msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "az index-v1-nek kell legyen aláírása, használja az `fdroid signindex` parancsot a létrehozásához!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2388,8 +2345,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "Most adja meg ezeket a config.yml fájlban:" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2408,30 +2363,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "nincs ilyen kapcsoló: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2441,72 +2381,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "a(z) -%s kapcsoló nem ismert" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "a(z) -%s kapcsolóhoz argumentum szükséges" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "a(z) --%s kapcsolóhoz argumentum szükséges" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "a(z) --%s kapcsoló nem egyedi előtag" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "a(z) --%s kapcsoló nem ismert" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "a(z) --%s kapcsolóhoz argumentum szükséges" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "nem kötelező argumentumok" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2517,8 +2391,6 @@ msgstr "Beállítások" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "pozicionális argumentumok" @@ -2551,10 +2423,6 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2578,17 +2446,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "a programverzió megjelenítése és kilépés" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "ezen üzenet kiírása és kilépés" @@ -2622,29 +2480,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "a következő argumentumok szükségesek: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "váratlan kapcsoló karakterlánc: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2655,9 +2509,7 @@ msgstr "nem felismert argumentumok: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "nem biztonságos jogosultságok ennél: „{config_file}” (0600-nak kellene lennie)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "használat: " @@ -2670,6 +2522,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2682,21 +2538,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2717,7 +2571,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2758,9 +2611,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2783,6 +2636,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/id/LC_MESSAGES/fdroidserver.po b/locale/id/LC_MESSAGES/fdroidserver.po index 8c277b3a..86e4a246 100644 --- a/locale/id/LC_MESSAGES/fdroidserver.po +++ b/locale/id/LC_MESSAGES/fdroidserver.po @@ -3,20 +3,21 @@ # signz signotorez , 2020, 2021. # Reza Almanda , 2021. # whenwesober , 2021. +# Doctorredits_here , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2021-06-23 23:32+0000\n" -"Last-Translator: whenwesober \n" +"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"PO-Revision-Date: 2024-10-04 04:26+0000\n" +"Last-Translator: Doctorredits_here \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" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.7.1-dev\n" +"X-Generator: Weblate 5.8-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -40,6 +41,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" tidak ada kesesuaian pada berkas metadata!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +55,6 @@ msgstr "\"local_copy_dir\" {path} tidak ada!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" sudah terpasang pada {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" berisi {name}({version}) kadaluarsa" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,16 +80,6 @@ msgstr "\"{path}\" ditandatangani oleh kunci yang tidak diperbolehkan:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" URL tudak valid!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "opsi %(option)s memerlukan argumen sebanyak %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -98,21 +88,13 @@ msgstr "%(prog)s: galat: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "" +msgstr "%d APK gagal ditandatangani atau diverifikasi!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d terdapat masalah" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opsi]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -121,25 +103,18 @@ msgstr "%r tidak bisa dipanggil" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" -msgstr "" +msgstr "%s terdapat sebuah kesalahan!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" -msgstr "" +msgstr "%s checksum yg dihitung untuk file tersebut tidak cocok dengan yang diharapkan %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s bukan bidang build yang diterima" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s opsi tidak mengambil nilai" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' tidak ditemukan dalam config.yml!" @@ -160,11 +135,9 @@ msgstr "'keystorepass' tidak ditemukan dalam config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' tidak ditemukan dalam config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "" +msgstr "'diperlukan' adalah argumen yang tidak valid untuk posisi" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" @@ -175,11 +148,6 @@ msgstr "'sdk_path' belum diatur di config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' terlalu usang, fdroid memerlukan build-tools-{version} atau yang lebih baru!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' akan dalam urutan acak! Gunakan kurung () atau [] jika urutan tersebut penting!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -188,25 +156,27 @@ msgstr "'{path}' gagal dieksekusi!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" -msgstr "" +msgstr "'{path}' memiliki format yang tidak valid, seharusnya kamus!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' tidak valid pada {field} dalam {appid}. Pakem regex: {pattern}" #: ../fdroidserver/metadata.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" -msgstr "'{value}' tidak valid pada {field} dalam {appid}. Pakem regex: {pattern}" +msgstr "'{value}' bukan {field} yang valid, seharusnya {pattern}" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" -msgstr "" +msgstr "...checkupdate gagal untuk {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() tidak didefinisikan" @@ -222,7 +192,7 @@ msgstr "URL diperlukan sebagai argumen!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "" +msgstr "Tanda tangan APK memiliki sertifikat berbeda di {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" @@ -234,7 +204,7 @@ msgstr "Tambahkan sebuah kunci penandatangan repo ke repo yang tidak ditandatang #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" -msgstr "" +msgstr "Tambahkan file metadata kerangka untuk APK yang tidak memilikinya" #: ../fdroidserver/update.py #, python-brace-format @@ -243,67 +213,63 @@ msgstr "Menambahkan repo baru hanya untuk {name}" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" -msgstr "" +msgstr "Alias kunci penandatanganan repo di keystore" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" -msgstr "" +msgstr "AllowedAPKSigningKeys hilang tetapi biner referensi disediakan" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" -msgstr "" +msgstr "Mengizinkan revisi berbeda (atau cabang git) ditentukan untuk impor awal" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" -msgstr "" +msgstr "Juga cerminkan bagian arsip lengkap" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" -msgstr "" +msgstr "Juga peringatkan tentang masalah pemformatan, seperti rewritemeta -l" #: ../fdroidserver/scanner.py msgid "Android AAR library" -msgstr "" +msgstr "Perpustakaan AAR Android" #: ../fdroidserver/scanner.py msgid "Android APK file" -msgstr "" +msgstr "Android APK file" #: ../fdroidserver/scanner.py msgid "Android DEX code" -msgstr "" +msgstr "format file Android DEX" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" -msgstr "" +msgstr "Android SDK tidak ditemukan di {path}!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" -msgstr "" +msgstr "Jalur Android SDK '{path}' tidak ada!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" -msgstr "" +msgstr "Jalur Android SDK '{path}' bukan direktori!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" -msgstr "" +msgstr "Alat Android SDK {cmd} tidak ditemukan!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "" - -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "Aplikasi memiliki Biner tetapi tidak memiliki AllowedAPKSigningKeys yang sesuai untuk menyematkan sertifikat." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "Aplikasi memiliki NoSource Since atau ArchivePolicy \"0 versi\" atau 0 tetapi AutoUpdateMode atau UpdateCheckMode bukan Tidak Ada" #: ../fdroidserver/lint.py #, python-brace-format @@ -327,6 +293,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -336,7 +310,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -391,11 +364,13 @@ msgstr[0] "" msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -418,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -431,6 +410,10 @@ msgstr "Perintah '%s' tidak dikenal.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -440,20 +423,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -473,6 +453,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -499,6 +480,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -561,11 +547,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -614,13 +595,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -656,12 +636,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -671,6 +645,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -688,6 +682,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -704,6 +707,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -773,10 +780,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -808,7 +811,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -873,15 +875,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -926,6 +926,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1011,16 +1016,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1133,6 +1134,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1162,6 +1168,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1222,7 +1232,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1257,7 +1266,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1275,13 +1283,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1292,10 +1314,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opsi" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1353,6 +1371,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1439,6 +1462,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1452,14 +1484,6 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Ubah nama berkas APK yang tidak sesuai dengan package.nama_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1473,6 +1497,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Tulis ulang semua berkas metadata" @@ -1486,6 +1515,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1532,6 +1566,10 @@ msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1652,6 +1690,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1716,6 +1758,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1737,11 +1783,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1751,7 +1792,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Eksepsi tidak ditemukan!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1789,6 +1829,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1819,11 +1860,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Perbarui informasi repo untuk paket yang baru" @@ -1837,6 +1873,7 @@ msgstr "Perbarui log transparansi biner untuk URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1856,11 +1893,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1875,27 +1908,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Penggunaan" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Penggunaan: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1913,6 +1929,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1929,11 +1950,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1944,6 +1960,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1965,6 +1986,11 @@ msgstr "Verifikasi integritas paket yang didownload" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." @@ -1974,6 +2000,10 @@ msgstr "" msgid "Warn about possible metadata errors" msgstr "Peringatkan mengenai kemungkinan error pada metadata" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1986,6 +2016,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1998,6 +2036,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2008,19 +2051,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opsi ambigu: %(option)s bisa sesuai dengan %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opsi ambigu: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2030,11 +2069,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2045,8 +2086,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2065,7 +2104,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "tidak bisa dibuka '%(filename)s': %(error)s" @@ -2079,14 +2118,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2105,14 +2140,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "kompleks" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2142,10 +2169,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2161,13 +2184,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2185,28 +2210,20 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2219,10 +2236,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2235,8 +2248,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2250,35 +2261,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2316,8 +2313,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2336,30 +2331,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "tidak ada opsi: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2369,72 +2349,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opsi -%s tidak dikenal" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opsi -%s memerlukan argumen" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opsi --%s harus tidak mengandung argumen" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opsi --%s bukan prefiks unik" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opsi --%s tidak dikenal" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opsi --%s memerlukan argumen" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumen opsional" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2445,8 +2359,6 @@ msgstr "Opsi" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumen posisi" @@ -2479,13 +2391,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2501,17 +2414,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "menampilkan nomor versi program dan keluar" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "menampilkan bantuan ini dan keluar" @@ -2545,29 +2448,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "argumen berikut ini diperlukan: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "string opsi tak terduga: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2578,9 +2477,7 @@ msgstr "argumen tidak dikenal: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "izin tidak aman pada '{config_file}' (seharusnya 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "penggunaan: " @@ -2593,6 +2490,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2505,19 @@ msgstr[0] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2538,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2578,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2603,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/it/LC_MESSAGES/fdroidserver.po b/locale/it/LC_MESSAGES/fdroidserver.po index 75e21d6a..5117e2d4 100644 --- a/locale/it/LC_MESSAGES/fdroidserver.po +++ b/locale/it/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ # IvanDan , 2020, 2021. # Massimiliano Caniparoli , 2020. # x , 2020, 2021. -# Hans-Christoph Steiner , 2020. +# Hans-Christoph Steiner , 2020, 2024. # Francesco Saltori , 2020. # Francesco Esposito , 2021. # mondstern , 2021. @@ -17,20 +17,21 @@ # Mirko Di , 2023. # coronabond , 2023. # Random , 2023, 2024. +# Champ0999 , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-04-13 17:01+0000\n" -"Last-Translator: Random \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-20 16:21+0000\n" +"Last-Translator: Champ0999 \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: Weblate 5.5-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -54,6 +55,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" non ha un file di metadati corrispondente!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -64,11 +69,6 @@ msgstr "La directory principale per \"local_copy_dir\" {path} non esiste!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" è già installato su {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contiene {name} obsoleto ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -94,17 +94,6 @@ msgstr "\"{path}\" è firmato da una chiave non autorizzata:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" non è un URL valido!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "l'opzione %(option)s richiede l'argomento %(number)d" -msgstr[1] "l'opzione %(option)s richiede gli argomenti %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -120,14 +109,6 @@ msgstr "" msgid "%d problems found" msgstr "trovati %d problemi" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opzioni]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -148,13 +129,6 @@ msgstr "%s ha un SHA-256 errato: %s" msgid "%s is not an accepted build field" msgstr "%s non è un campo di build accettato" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "l'opzione %s non accetta un valore" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "\"keypass\" non trovato in config.yml!" @@ -175,8 +149,6 @@ msgstr "\"keystorepass\" non trovato in config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "\"repo_keyalias\" non trovato in config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"required\" è un argomento invalido per i posizionali" @@ -190,11 +162,6 @@ msgstr "\"sdk_path\" non impostato in config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' è troppo vecchio, fdroid richiede build-tools-{version} o più recente!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "\"{field}\" sarà in ordine casuale! Usa le parentesi () o [] se l'ordine è importante!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -205,7 +172,7 @@ msgstr "Esecuzione di \"{path}\" fallita!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ha un formato non valido, dovrebbe essere un dizionario!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "\"{value}\" non è un {field} valido in {appid}. Espressione regolare: {pattern}" @@ -215,13 +182,15 @@ msgstr "\"{value}\" non è un {field} valido in {appid}. Espressione regolare: { msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "\"{value}\" non è un {field} valido, dovrebbe essere {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate fallito per {appid}:{error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() non definita" @@ -235,9 +204,9 @@ msgid "A URL is required as an argument!" msgstr "È richiesto un URL come argomento!" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "Nessun certificato di firma trovato in {path}" +msgstr "" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" @@ -312,10 +281,6 @@ msgstr "Strumento Android SDK {cmd} non trovato!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "L'app ha Binaries ma non ha AllowedAPKSigningKeys corrispondente per fissare il certificato." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "L'app ha NoSourceSince o ArchivePolicy \"0 versioni\" ma AutoUpdateMode o UpdateCheckMode non sono None" - #: ../fdroidserver/lint.py #, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" @@ -343,6 +308,14 @@ msgstr "Archiviando {apkfilename} con una firma invalida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode con UpdateCheckMode: HTTP deve avere uno schema." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -352,7 +325,6 @@ msgstr "Tipo di voce \"{mirrortype}\" errato nella configurazione dei mirror: {m msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Indirizzo URL base per il mirror, può includere la chiave di firma dell'indice utilizzando la query string: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -403,16 +375,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Impossibile costruire a causa di un errore con {} durante la scansione" msgstr[1] "Impossibile costruire a causa di errori con {} durante la scansione" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Impossibile leggere {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Impossibile riscrivere \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "La categoria \"%s\" non è valida" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Le categorie non sono impostate" @@ -435,6 +414,10 @@ msgstr "Controllo dell'archiviazione per {appid} - apks:{integer}, keepversions: msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Aggiornamento pulito - non usa cache, riprocessa tutti gli APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista di categorie separate da una virgola." @@ -448,6 +431,10 @@ msgstr "Comando \"%s\" non riconosciuto.\n" msgid "Commit changes" msgstr "Cambiamenti del commit" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -457,20 +444,17 @@ msgstr "Definizioni \"{field}\" in conflitto tra .yml e file localizzati:" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argomenti in conflitto: '--verbose' e '--quiet' non possono essere specificati contemporaneamente." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "File di configurazione in conflitto! Utilizzando {newfile}, ignorando {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossibile trovare \"{command}\" sul tuo sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Impossibile trovare il codice della versione più recente" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Impossibile trovare il nome della versione più recente" @@ -490,6 +474,7 @@ msgstr "Impossibile aprire il file APK {path} per l'analisi: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Impossibile analizzare la dimensione \"{size}\", tipo sbagliato \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Impossibile trovare l'ID dell'applicazione" @@ -516,6 +501,11 @@ msgstr "Nuovo container \"{name}\" creato" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Creazione \"{path}\" per configurazione s3cmd." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Lettura di '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Creazione della directory dei log" @@ -578,11 +568,6 @@ msgstr "La descrizione \"%s\" è solo il riassunto dell'app" msgid "Description has a duplicate line" msgstr "La descrizione ha una riga duplicata" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "La descrizione ha un elenco (%s) ma non è puntato (*) né numerato (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -631,15 +616,14 @@ msgstr "Non aggiornare il repository, utile per testare una build offline" msgid "Don't use rsync checksums" msgstr "Non usare checksum rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Scarica mirror completi di piccoli repository" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Scaricando %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Lo scaricamento del repository è gia fallito una volta, non verrà riprovato." @@ -667,20 +651,12 @@ msgstr "Link duplicato in '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "ERRORE: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRORE: il sottocomando \"server\" è stato rimosso, usa \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERRORE: questo comando non deve mai essere utilizzato per il mirror f-droid.org!\n" -"L’intero mirror di f-droid.org richiede più di 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRORE: tipo di CI non supportato, le patch sono benvenute!" @@ -695,6 +671,16 @@ msgstr "ERRORE: host git \"%s\" non supportato, le patch sono benvenute!" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -719,6 +705,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "La variabile d'ambiente {var} da {configname} non è impostata!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "La variabile d'ambiente {var} da {configname} non è impostata!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -739,6 +730,10 @@ msgstr "Estrarre i metadati dell'applicazione da una repository di origine" msgid "Extract signatures from APKs" msgstr "Estrai le firme dagli APK" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -808,10 +803,6 @@ msgstr "Il file è scomparso durante l'elaborazione: {path}" msgid "Finished" msgstr "Finito" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "I metodi di donazione di Flattr appartengono al campo FlattrID" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tag HTML vietati" @@ -843,7 +834,6 @@ msgstr "Trovato file di finanziamento non valido \"{path}\" per \"{name}\":" msgid "Found invalid appids in arguments" msgstr "Trovati appid non validi negli argomenti" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Trovati codici di versione non validi per alcune app" @@ -854,9 +844,8 @@ msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Trovati più file di blocco della firma JAR in {path}" #: ../fdroidserver/common.py -#, fuzzy msgid "Found multiple Signer Certificates!" -msgstr "Trovati più certificati di firma per il repository." +msgstr "Trovati più certificati di firma per il repository!" #: ../fdroidserver/metadata.py #, python-brace-format @@ -909,15 +898,13 @@ msgstr "Git clean non riuscito" msgid "Git fetch failed" msgstr "Recupero Git non riuscito" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Cancellazione Git non riuscita" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Set-head remoto Git non riuscito: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Ripristino Git non riuscito" @@ -963,6 +950,11 @@ msgstr "Ignorando la voce FUNDING.yml più lunga di 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorato elemento errato nel manifest: %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} è deprecato, usa {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorare il pacchetto senza metadati: " @@ -1048,16 +1040,12 @@ msgstr "VercodeOperation non valido: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation non valido: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID applicazione non valida {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Valore booleano '%s' non valido" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Elenco puntato non valido" @@ -1170,6 +1158,11 @@ msgstr "Riga del serverwebroot malformata:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Raggiunta la massima profondità di ricorsione nel file ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Rispecchiare il repository completo e l'archivio, tutti i tipi di file." @@ -1199,6 +1192,10 @@ msgstr "Android SDK non trovato!" msgid "No attached devices found" msgstr "Nessun dispositivo collegato trovato" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nessuna impronta digitale nell'URL." @@ -1259,7 +1256,6 @@ msgstr "Nessun certificato di firma trovato in {path}" msgid "No such package: %s" msgstr "Nessun pacchetto di questo tipo: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1274,9 +1270,8 @@ msgid "No unsigned directory - nothing to do" msgstr "Nessuna directory non firmata - niente da fare" #: ../fdroidserver/__main__.py -#, fuzzy msgid "No version information could be found." -msgstr "nessuna informazione sulla versione trovata" +msgstr "Nessuna informazione sulla versione trovata." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" @@ -1295,7 +1290,6 @@ msgstr "Niente da fare per {appid}." msgid "Now set these in config.yml:" msgstr "Ora imposta i seguenti campi in config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1313,26 +1307,28 @@ msgstr "Il nome del pacchetto di OBB non corrisponde a un APK supportato:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Macchina offline, saltando la generazione del mirror git fino a quando `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Solo PNG e JPEG sono supportati per la grafica, trovati: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Stampa solo le differenze con il Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1342,10 +1338,6 @@ msgstr "Elabora solo app con aggiornamenti automatici" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "I metodi di donazione di OpenCollective appartengono al campo OpenCollective" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opzioni" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Rapporto di uscita JSON al file chiamato dopo APK." @@ -1403,6 +1395,11 @@ msgstr "Percorso del keystore per la chiave di firma del repository" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Stampa la variabile segreta sul terminale per un facile copia/incolla" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1449,9 +1446,8 @@ msgid "Pushing binary transparency log to {url}" msgstr "Invio del log di trasparenza binaria su {url}" #: ../fdroidserver/deploy.py -#, fuzzy msgid "Pushing to remote server failed!" -msgstr "Set-head remoto Git non riuscito: \"%s\"" +msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format @@ -1491,6 +1487,15 @@ msgstr "Lettura di {apkfilename} dalla cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "recupera l'ultima versione delle firme dal web" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Rimozione dei file specificati" @@ -1504,13 +1509,10 @@ msgstr "Rimozione di {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Rinomina i file APK che non corrispondono a package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "La modalità di aggiornamento RepoTrunk ha senso solo nei repository git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Reimposta e crea un nuovo server di compilazione, anche se quello esistente sembra essere ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1525,6 +1527,11 @@ msgstr "Ridimensiona tutte le icone che superano la dimensione massima dei pixel msgid "Restrict output to warnings and errors" msgstr "Limita l'output ad avvisi ed errori" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Riscrivi tutti i file di metadati" @@ -1590,6 +1597,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Scanner trovato {} problema" msgstr[1] "Scanner trovato {} problemi" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Scansiona gli APK con apkanalyzer per le classi note non libere." @@ -1710,6 +1721,10 @@ msgstr "Modalità di aggiornamento dei tag utilizzata in git-svn, ma il repo non msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modalità test - mette l'output solo nella directory tmp, e costruisce sempre, anche se l'output esiste già." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1748,9 +1763,7 @@ msgstr "Queste sono le applicazioni che sono state archiviate dal repo principal #: ../fdroidserver/mirror.py #, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." -msgstr "" -"ERRORE: questo comando non deve mai essere utilizzato per il mirror f-droid.org!\n" -"L’intero mirror di f-droid.org richiede più di 200GB." +msgstr "Questo comando non deve mai essere utilizzato per il mirror f-droid.org! L’intero mirror richiede più di 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." @@ -1810,11 +1823,6 @@ msgstr "Tag di licenza inaspettato \"{}\"! Usare solo tag approvati da FSF o OSI msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Tag di licenza inaspettato \"{}\"! Usa solo i tag di licenza configurati nel tuo file di configurazione" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Destinazione collegamento simbolico inattesa: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1824,7 +1832,6 @@ msgstr "Voce sconosciuta {key} in {configname}" msgid "Unknown exception found!" msgstr "Eccezione sconosciuta trovata!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1862,6 +1869,7 @@ msgstr "Campo dell'app non riconosciuto '{fieldname}' in '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flag di costruzione non riconosciuto '{build_flag}' in '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1892,11 +1900,6 @@ msgstr "Percorso scandelete non utilizzato: %s" msgid "Unused scanignore path: %s" msgstr "Percorso scanignore non utilizzato: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Decomposizione in %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Aggiorna le informazioni del repository coi nuovi pacchetti" @@ -1910,6 +1913,7 @@ msgstr "Aggiorna il log di trasparenza binario con un nuovo URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ha un URL non valido: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1929,12 +1933,7 @@ msgstr "UpdateCheckData non è un URL valido: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -#, fuzzy -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito." - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName è impostato sull'ID dell'applicazione nota, può essere rimosso" @@ -1949,28 +1948,11 @@ msgstr "Caricamento di {apkfilename} su androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Caricamento di {apkfilename} su virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Uso" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Utilizzo: %s\n" - #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Usare /HEAD invece di /master per puntare a un file nel ramo predefinito" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Usare /HEAD invece di /master per puntare a un file nel ramo predefinito" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Usa `fdroid update -c` per crearlo." @@ -2010,11 +1992,6 @@ msgstr "Usare la firma APK v2" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Utilizzando jarsigner di Java, non raccomandato per verificare APK! Utilizzare apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Usando androguard da \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2051,15 +2028,28 @@ msgstr "Verifica l'integrità dei pacchetti scaricati" msgid "Verifying index signature:" msgstr "Verifica della firma dell'indice:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "La chiave API di VirusTotal non può caricare file più grandi di 32MB, usa {url} per caricare {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avvisa riguardo possibili errori nei metadati" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Se configurato per indici firmati, crea solo indici senza segno in questa fase" @@ -2072,6 +2062,14 @@ msgstr "Quando linting l'intero repository yamllint è disabilitato per impostaz msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Vuoi scaricare e installare F-Droid.apk tramite adb? (SÌ/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' usato quando si generano le chiavi" @@ -2084,6 +2082,11 @@ msgstr "Potete usare ANDROID_HOME per impostare il percorso del vostro SDK, cio msgid "ZIP file archive" msgstr "Archivio di file ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2094,19 +2097,15 @@ msgstr "aggiungendo IdentityFile a {path}" msgid "adding to {name}: {path}" msgstr "aggiungendo a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opzione ambigua: %(option)s potrebbe corrispondere a %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opzione ambigua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2116,11 +2115,13 @@ msgstr "apksigner non trovato! Impossibile firmare o verificare gli APK moderni" msgid "apksigner not found, it's required for signing!" msgstr "apksigner non trovato, è necessario per la firma!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID dell'applicazione del file su cui operare" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2131,8 +2132,6 @@ msgstr "ID dell'applicazione con versionCode opzionale nella forma APPID[:VERCOD msgid "archive_url needs to end with /archive" msgstr "archive_url deve terminare con /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2151,7 +2150,7 @@ msgstr "tentativo di connessione SSH nuda per testare la chiave di distribuzione msgid "can not parse scrlib spec (not a string): '{}'" msgstr "impossibile analizzare le specifiche scrlib (non una stringa): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "impossibile aprire '%(filename)s': %(error)s" @@ -2165,14 +2164,10 @@ msgstr "impossibile aprire l'url non-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "impossibile trovare srclibs richiesto: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "impossibile avere più argomenti subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2191,14 +2186,6 @@ msgstr "clonazione {url}" msgid "commands from plugin modules:" msgstr "dai moduli dei plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complesso" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2230,10 +2217,6 @@ msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specifi msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "non ha potuto analizzare la specifica srclib (troppi segni '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2258,8 +2241,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "log di processo distribuito {path} a {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2277,8 +2258,6 @@ msgstr "scaricamento delle firme dello scanner da '{}' fallito" msgid "executable binary, possibly code" msgstr "binario eseguibile, eventualmente codice" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2286,20 +2265,14 @@ msgid_plural "expected %s arguments" msgstr[0] "atteso %s argomento" msgstr[1] "atteso %s argomenti" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "si aspettava almeno un argomento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "atteso al massimo un argomento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "atteso un argomento" @@ -2312,10 +2285,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "recupera l'ultima versione delle firme dal web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "in virgola mobile" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forza gli errori di metadati (predefinito) come avvisi, o da ignorare." @@ -2328,8 +2297,6 @@ msgstr "git svn clone fallito" msgid "gzip file archive" msgstr "archivio file gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2343,35 +2310,21 @@ msgstr "index-v1 deve avere una firma, usa `fdroid signindex` per crearla!" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve avere una firma, usa `fdroid signindex` per crearla!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "intero" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valore %(type)s non valido: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "scelta non valida: %(value)r (scegliere tra %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valore di risoluzione dei conflitti non valido: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2405,12 +2358,10 @@ msgid "mirror '%s' does not end with 'fdroid'!" msgstr "il mirror '%s' non finisce con 'fdroid'!" #: ../fdroidserver/index.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "Ora imposta i seguenti campi in config.yml:" +msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "gli argomenti che si escludono a vicenda devono essere opzionali" @@ -2429,30 +2380,15 @@ msgstr "nessuna \"icona\" in {appid}" msgid "no APK supplied" msgstr "nessun APK fornito" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "opzione inesistente: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "nessuna informazione sulla versione è stata trovata!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nessuna informazione sulla versione trovata" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "non consentito con argomento %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2462,72 +2398,6 @@ msgstr "uno degli argomenti %s è richiesto" msgid "only accepts strings, lists, and tuples" msgstr "accetta solo stringhe, liste e tuple" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opzione %s: Se volete davvero installare tutte le app firmate, usate --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "opzione %s: valore %s non valido: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opzione %s: scelta non valida: %r (scegliere da %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opzione -%s non riconosciuta" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "l'opzione -%s richiede degli argomenti" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "l'opzione --%s non deve avere argomenti" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "l'opzione --%s non ha un prefisso univoco" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opzione --%s non riconosciuta" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "l'opzione --%s richiede un argomento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argomenti facoltativi" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opzioni" @@ -2537,8 +2407,6 @@ msgstr "opzioni" msgid "overwriting existing {path}" msgstr "sovrascrivendo il {path} esistente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argomenti posizionali" @@ -2569,11 +2437,7 @@ msgstr "Il repo_url deve terminare con /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml non installato, non può scrivere metadati." +msgstr "rsync è assente o non funziona: {error}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2591,25 +2455,14 @@ msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "la cache dello scanner è malformata! Puoi svuotarla con: '{clear}'" #: ../fdroidserver/deploy.py -#, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" -msgstr "local_copy_dir not finisce con \"fdroid\", forse intendevi: \"{path}\"" +msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "libreria condivisa" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostra il numero di versione del programma ed esci" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra questo messaggio di aiuto ed esci" @@ -2643,29 +2496,25 @@ msgstr "libreria statica" msgid "supplied reference binary has allowed signer {signer}" msgstr "il binario di riferimento fornito ha il firmatario autorizzato {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "i seguenti argomenti sono obbligatori: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "vero" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "stringa di opzioni inaspettata: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser sconosciuto %(parser_name)r (scelte: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2676,9 +2525,7 @@ msgstr "argomenti sconosciuti: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permessi su \"{config_file}\" insicuri (dovrebbero essere 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilizzo: " @@ -2691,6 +2538,10 @@ msgstr "utilizzando Apache libcloud per sincronizzare con {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com sta limitando il tasso, in attesa di riprovare..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sì" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2703,21 +2554,19 @@ msgstr[1] "{0} applicazioni, {1} alias chiave" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) non ha metadati!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} ha più file {name}, sembra un exploit di Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "L'AndroidManifest.xml di {apkfilename} ha una data non corretta: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} non ha un nome! Usa invece l'ID dell'applicazione." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2738,7 +2587,6 @@ msgstr "{appid} ha sia APK che file: {files}" msgid "{appid} is missing {name}" msgstr "{appid} manca {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2779,10 +2627,10 @@ msgstr "{file} è vuoto o corrotto!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" non esiste! Controlla \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} è deprecato, usa {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2804,15 +2652,20 @@ msgstr "{path} ha una cattiva firma di file \"{pattern}\", possibile exploit di msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" msgstr "" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "{path} is not a standard config file!" -msgstr "\"sdk_path\" non impostato in config.yml!" +msgstr "" #: ../fdroidserver/index.py #, python-brace-format diff --git a/locale/ja/LC_MESSAGES/fdroidserver.po b/locale/ja/LC_MESSAGES/fdroidserver.po index 6fd4bf25..50dd832d 100644 --- a/locale/ja/LC_MESSAGES/fdroidserver.po +++ b/locale/ja/LC_MESSAGES/fdroidserver.po @@ -2,26 +2,30 @@ # This file is put in the public domain. # Hinaloe , 2020. # Suguru Hirahara , 2024. +# "Shuuji TAKAHASHI (shuuji3)" , 2024. +# Liner Seven , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-224-g4b0ade7\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-02-25 05:52+0000\n" -"Last-Translator: Suguru Hirahara \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-04-30 04:07+0000\n" +"Last-Translator: Liner Seven \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.5-dev\n" +"X-Generator: Weblate 5.12-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" +"\n" +"設定用の鍵として使用されるSSHの公開鍵:" #: ../fdroidserver/nightly.py #, python-brace-format @@ -29,137 +33,111 @@ msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" +"\n" +"DEBUG_KEYSTOREの秘密の変数にエンコードされる{path}:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" -msgstr "" +msgstr "「\"%s/」に合致するメタデータのファイルはありません!" #: ../fdroidserver/index.py -#, fuzzy, python-brace-format +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\" キーはミラーに追加すべきではありません!" + +#: ../fdroidserver/index.py +#, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "local_copy_dir は絶対パスの必要があります!" +msgstr "\"local_copy_dir\" {path} は存在しません!" #: ../fdroidserver/install.py -#, fuzzy, python-brace-format -msgid "\"{apkfilename}\" is already installed on {dev}." -msgstr "'{apkfilename}'はすでに{dev}にインストールされています。" - -#: ../fdroidserver/update.py #, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "「{apkfilename}」はすでに{dev}にインストールされています。" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" -msgstr "" +msgstr "「{path}」には最近の{name}({version})が含まれています" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" -msgstr "" +msgstr "「{path}」は存在しますがs3cmdがインストールされていません!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" -msgstr "" +msgstr "「{path}」はサポートされているファイルフォーマットではありません(metadata/*.ymlを使用してください)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "" +msgstr "「{path}」は許可されていない鍵で署名されています:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "「{url}」は正しいURLではありません!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" -msgstr "" +msgstr "%(prog)s: エラー: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "" +msgstr "%d個のAPKが署名されておらず検証できませんでした!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d個の問題が見つかりました" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" -msgstr "" +msgstr "%rは呼び出せません" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" -msgstr "" +msgstr "%sは辞書を生成しませんでした!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" -msgstr "" +msgstr "%sのSHA-256は誤っています:%s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" +msgstr "%sは承認されたビルドフィールドではありません" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" -msgstr "" +msgstr "「keypass」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" -msgstr "" +msgstr "「keystore」がありません。また「smartcardoptions」が空です!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" -msgstr "" +msgstr "「keystore」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" -msgstr "" +msgstr "「keystorepass」がconfig.ymlにありません!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" -msgstr "" +msgstr "「repo_keyalias」がconfig.ymlにありません!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "" +msgstr "「required」は位置についての引数としては正しくありません" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" @@ -168,115 +146,112 @@ msgstr "「sdk_path」がconfig.ymlで設定されていません!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" -msgstr "'{aapt}' は古すぎます、froid は build-tools-{version} またはそれ以降が必要です!" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" +msgstr "「{aapt}」は古すぎます。fdroidはbuild-tools-{version}またはそれ以降が必要です!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" -msgstr "" +msgstr "「{path}」を実行できませんでした!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" -msgstr "" +msgstr "「{path}」は正しいフォーマットではありません。辞書を指定してください!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" -msgstr "" +msgstr "「{value}」は {appid}の正しい{field}ではありません。正規表現のパターンは {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" -msgstr "" +msgstr "「{value}」は正しい{field}ではありません。{pattern}としてください" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-requestは単一のappidでのみ実行されます!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" -msgstr "" +msgstr "…{appid}についてcheckupdateを実行できませんでした:{error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" -msgstr "" +msgstr ".__call__() は定義されていません" #: ../fdroidserver/lint.py msgid "/issues is missing" -msgstr "" +msgstr "/issuesがありません" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" -msgstr "" +msgstr "URLを引数として指定してください!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "" +msgstr "APKの署名には{path}で異なる証明書があります:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" -msgstr "" +msgstr "リポジトリのパッケージにGnuPGを使用してPGP署名を追加" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" -msgstr "" +msgstr "署名されていないリポジトリに、リポジトリの署名鍵を追加" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" -msgstr "" +msgstr "メタデータが存在しないAPKにテンプレートのメタデータを追加" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" -msgstr "" +msgstr "{name}にのみ新しいリポジトリを追加" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" -msgstr "" +msgstr "キーストアのリポジトリの署名鍵のエイリアス" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" -msgstr "" +msgstr "AllowedAPKSigningKeysが指定されていませんが、参照用バイナリーは指定されています" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" -msgstr "" +msgstr "最初のインポートの際に異なるリビジョン(またはgitのブランチ)を指定することを許可" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" -msgstr "" +msgstr "完全なアーカイブのセクションもミラーリング" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" -msgstr "" +msgstr "フォーマット上の問題についてもrewritemeta -lのように警告" #: ../fdroidserver/scanner.py msgid "Android AAR library" -msgstr "" +msgstr "AndroidのAARライブラリー" #: ../fdroidserver/scanner.py msgid "Android APK file" -msgstr "" +msgstr "AndroidのAPKファイル" #: ../fdroidserver/scanner.py msgid "Android DEX code" -msgstr "" +msgstr "AndroidのDEXコード" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" -msgstr "" +msgstr "AndroidのSDKが{path}で見つかりません!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" -msgstr "" +msgstr "AndroidのSDKのパス「{path}」がありません!" #: ../fdroidserver/common.py #, python-brace-format @@ -286,390 +261,419 @@ msgstr "Android SDK パス '{path}' はディレクトリではありません #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" -msgstr "" +msgstr "AndroidのSDKツール {cmd} が見つかりません!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "" - -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "アプリにはバイナリーがありますが、それに対応する、証明書の固定用のAllowedAPKSigningKeysがありません。" #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "アプリにNoSourceSinceまたは、\"0 versions\"か0のArchivePolicyが設定されていますが、AutoUpdateModeまたはUpdateCheckModeはNoneに設定されていません" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" -msgstr "" +msgstr "アプリは「{repo}」にありますが{url}へのリンクが指定されています" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "" +msgstr "アプリのバージョンにはバイナリーがありますが、それに対応する、証明書の固定用のAllowedAPKSigningKeysがありません。" #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" -msgstr "" +msgstr ".gitを最初に置く必要はありません" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" -msgstr "" +msgstr "{apkfilename}のアーカイブの署名が正しくありません!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." -msgstr "" +msgstr "UpdateCheckModeが有効になっているAutoUpdateMode:HTTPにパターンを設定してください。" + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "すべてのプロンプトに対して自動的にnoを選択します。" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "すべてのプロンプトに対して自動的にyesを選択します。" #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" -msgstr "" +msgstr "正しくないエントリーの種類「{mirrortype}」がミラーの設定ファイルの中にあります:{mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" -msgstr "" +msgstr "ミラーのベースURLにはクエリーの文字列 ?fingerprint= を使ってインデックスの署名鍵を含めることができます。" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" -msgstr "" +msgstr "ブランチ「{branch}」が「{versionName}」のビルドのcommitとして使用されました" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" -msgstr "" +msgstr "ブランチ「{branch}」がsrclib「{srclib}」のcommitとして使用されました" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" -msgstr "" +msgstr "symlinkが壊れています:{path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" -msgstr "" +msgstr "パッケージをソースコードからビルド" #: ../fdroidserver/build.py msgid "Build all applications available" -msgstr "" +msgstr "利用できる全てのアプリケーションをビルド" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" -msgstr "" +msgstr "ビルドが`fdroid import`により生成されました - 準備ができたら無効にする行を削除してください" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" -msgstr "" +msgstr "ビルドのメタデータのgitリポジトリにcommitされていない変更があります!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" -msgstr "" +msgstr "各パッケージの最新バージョンのみをビルド" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" -msgstr "" +msgstr "「%s」に基づきこの設定でリポジトリをビルドしました:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" -msgstr "" +msgstr "CurrentVersionCodeが指定されていないアプリを自動更新することはできません" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" -msgstr[0] "" +msgstr[0] "スキャン時に{}個のエラーが発生したためビルドできません" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}を読み込めませんでした:{error}" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" -msgstr "" +msgstr "「{path}」を書き換えられません" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" -msgstr "" +msgstr "「%s」のカテゴリーは正しくありません" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" -msgstr "" +msgstr "カテゴリーが設定されていません" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" -msgstr "" +msgstr "カテゴリーの「{category}」が規定されていますが、どのアプリによっても使用されていません!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" -msgstr "" +msgstr "アプリケーションの更新を確認" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" -msgstr "" +msgstr "{appid}のアーカイブをチェックしています - apks:{integer}, keepversions:{keep}, archapks:{arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" -msgstr "" +msgstr "クリーンアップデート - キャッシュを使用せず、全てのAPKの再処理を行います" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "ログ出力に色を付ける" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." -msgstr "" +msgstr "コンマで区切られたカテゴリーの一覧。" #: ../fdroidserver/__main__.py #, python-format msgid "Command '%s' not recognised.\n" -msgstr "" +msgstr "コマンド '%s' は認識されません。\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "" +msgstr "変更をcommit" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "変更をコミット、プッシュしてから、マージリクエストを作成してください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" -msgstr "" +msgstr "「{field}」の定義が.ymlと翻訳済の間で矛盾しています:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" +msgstr "引数が矛盾しています:「--verbose」と「--quiet」を同時に設定することはできません。" #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" -msgstr "" +msgstr "システム上で「{command}」が見つかりませんでした" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" -msgstr "" +msgstr "最新のバージョンコードが見つかりませんでした" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" -msgstr "" +msgstr "最新のバージョン名が見つかりませんでした" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" -msgstr "" +msgstr "削除するパス {path} が見つかりませんでした" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " -msgstr "" +msgstr "分析用にAPK {path} を開くことができませんでした: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" -msgstr "" +msgstr "サイズ「{size}」をパースできませんでした。種類「{type}」が正しくありません" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" -msgstr "" +msgstr "アプリケーションIDが見つかりませんでした" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" -msgstr "" +msgstr "バージョン情報が見つかりませんでした" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" -msgstr "" +msgstr "パッケージIDが見つかりませんでした" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" -msgstr "" +msgstr "既存の署名鍵の設定の上書きは行いません!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" -msgstr "" +msgstr "新しいコンテナー「{name}」を作成しました" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." -msgstr "" +msgstr "s3cmdの設定用に「{path}」を作成します。" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "素の {config_file} を作成" #: ../fdroidserver/publish.py msgid "Creating log directory" -msgstr "" +msgstr "ログ用のディレクトリーを作成します" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" -msgstr "" +msgstr "新しいS3のバケットを作成しています:{url}" #: ../fdroidserver/publish.py msgid "Creating output directory" -msgstr "" +msgstr "出力用のディレクトリを作成します" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" -msgstr "" +msgstr "この鍵(SHA256)で署名済のインデックスを作成します:" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" -msgstr "" +msgstr "一時ファイル用ディレクトリーを作成します" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" -msgstr "" +msgstr "署名されていないインデックスを署名用に準備します" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" -msgstr "" +msgstr "CurrentVersionCode {cv} が最も古いビルドのエントリーの{versionCode}よりも小さいです" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" -msgstr "" +msgstr "DEBUG_KEYSTOREが設定されていないか値が不完全です" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" -msgstr "" +msgstr "メタデータの無いAPKとOBBをリポジトリから削除" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" -msgstr "" +msgstr "アーカイブを削除しています。リポジトリが大きすぎます({size} 最大{limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" -msgstr "" +msgstr "git-mirrorの履歴を削除しています。リポジトリが大きすぎます({size} 最大{limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" -msgstr "" +msgstr "不明なファイルを削除します:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" -msgstr "" +msgstr "説明文「%s」がアプリの要約と同一です" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" -msgstr "" - -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" +msgstr "説明文に重複する行があります" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" -msgstr "" +msgstr "説明文の長さは{length}ですが、最大の文字数は{limit}です" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" -msgstr "" +msgstr "config/{name}.ymlではないでしょうか?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" -msgstr "" +msgstr "{code}ではないでしょうか?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" -msgstr "" +msgstr "生成したビルドのエントリーに「disable:」を追加しない" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" -msgstr "" +msgstr "新しいファイルをリポジトリに設定しない" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" -msgstr "" +msgstr "「{path}」をURLに含めないでください!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" -msgstr "" +msgstr "AndroidのSDKのパスを確認せず、単に終了" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" -msgstr "" +msgstr "キーストアから生成した秘密鍵を削除しない" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" -msgstr "" +msgstr "ソースのtarballを作成しない。ビルドのテスト時に便利です" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" -msgstr "" +msgstr "リポジトリを更新しない。インターネットに接続していないときにビルドをテストする際に便利です" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" -msgstr "" +msgstr "rsyncのチェックサムを使用しない" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "ネットワークへの情報漏洩が少ないミラーを使用してF-Droid.apkをダウンロードする" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" -msgstr "" - -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "" +msgstr "小さいリポジトリのミラーを完全にダウンロード" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." -msgstr "" +msgstr "リポジトリのダウンロードは既に一度失敗しているので、再試行は行いません。" #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" -msgstr "" +msgstr "{url}をダウンロードできませんでした。{error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" -msgstr "" +msgstr "{path}での好ましくない機能に関する重複した宣言は無視されました!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" -msgstr "" +msgstr "ミラーの設定に重複するエントリー「%s」があります!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" -msgstr "" +msgstr "「{field}」のリンクが重複しています:{url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "エラー:%(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" -msgstr "" - -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" +msgstr "エラー:「server」のサブコマンドは削除されました。「deploy」を使用してください!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" -msgstr "" +msgstr "エラー:サポートされていない種類のCIです。パッチを歓迎します!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" -msgstr "" +msgstr "エラー:サポートされていないgitのホスト「%s」です。パッチを歓迎します!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "エラー:{path}の{key}は「archive」でも「repo」でもありません!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "エラー:{key} が無効な値です!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "エラー:{key} の値は {t} 型でなければいけません!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "エラー: {path}の{key}:{subkey}は許可されている鍵 {allowed_keys} の中にありません!" #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." -msgstr "" +msgstr "エンコーディングは「{enc}」に設定されています。fdroidでエンコードに関する問題が生じる可能性があります。最良の結果のために「UTF-8」に設定してください。" #: ../fdroidserver/init.py #, python-format @@ -677,1023 +681,1078 @@ msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" +"ここにAndroidのSDK(%s)のパスを入力してください:\n" +"> " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" -msgstr "" +msgstr "{configname}の環境変数 {var} が設定されていません!" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "環境変数{{env: {var}}}が未設定です!" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "「github_releases」を設定する際にエラーが発生しました。{}がありません(まず`fdroid update`を実行する必要があるかもしれません)。" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" -msgstr "" +msgstr "リポジトリのアドレスを取得する際にエラーが発生しました" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" -msgstr "" +msgstr "問題が発生した場合に0以外のコードを出力して終了" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" -msgstr "" +msgstr "ソースリポジトリからアプリケーションのメタデータを抽出" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" -msgstr "" +msgstr "APKから署名を抽出" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "既知のソースからF-Droid.apkをダウンロードできませんでした!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" -msgstr "" +msgstr "{path}をコピーできませんでした:{error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" -msgstr "" +msgstr "「{apkfilename}」の署名を取得できませんでした:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" -msgstr "" +msgstr "{path}を読み込めませんでした:{error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" -msgstr "" +msgstr "{path}のサイズを変更できませんでした:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" -msgstr "" +msgstr "S3のバケットを作成できませんでした:{url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" -msgstr "" +msgstr "APKの情報を取得できませんでした。{path}を削除します" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" -msgstr "" +msgstr "APKの情報を取得できませんでした。{path}をスキップします" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" -msgstr "" +msgstr "APKの署名鍵のフィンガープリントを取得できませんでした" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" -msgstr "" +msgstr "「{apkfilename}」を{dev}にインストールできませんでした:{error}" #: ../fdroidserver/common.py msgid "Failed to sign application" -msgstr "" +msgstr "アプリケーションに署名できませんでした" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" -msgstr "" +msgstr "buildserveridをVMから取得しました:{buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" -msgstr "" +msgstr "「{apkfilename}」→「{sigdir}」の署名鍵を取得しました" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" -msgstr "" +msgstr "ファイルが処理中に消去されました:{path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" -msgstr "" - -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" +msgstr "終了" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" -msgstr "" +msgstr "禁止されているHTMLのタグ" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." -msgstr "" +msgstr "無効に設定されているアプリのビルドを強制し、スキャンの問題にかかわらず実行。テストモードでのみ許可。" #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" -msgstr "" +msgstr "{0}秒のタイムアウトの後でビルドを強制的に停止します!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." -msgstr "" +msgstr "無効に設定されているアプリとビルドを強制的にスキャン。" #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" -msgstr "" +msgstr "アプリ「{name}」のメタデータなしに「{path}\"」のグラフィックを発見しました!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" -msgstr "" +msgstr "「{name}」の不正な調達用ファイル「{path}」が見つかりました:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" -msgstr "" +msgstr "引数に不正なappidがあります" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" -msgstr "" +msgstr "いくつかのアプリのバージョンコードが正しくありません" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" -msgstr "" +msgstr "複数のJAR署名ブロックファイルが{path}で見つかりました" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" -msgstr "" +msgstr "署名者の複数の証明書が見つかりました!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" -msgstr "" +msgstr "{appid}に複数のメタデータのファイルが見つかりました" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." -msgstr "" +msgstr "リポジトリの署名用の証明書が複数見つかりました。" #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." -msgstr "" +msgstr "リポジトリの署名用の証明書が見つかりませんでした。" #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" -msgstr "" +msgstr "%sで不正なファイルが見つかりました" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" -msgstr "" +msgstr "{apkfilename}が{url}で見つかりました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" -msgstr "" +msgstr "{filename}で{count}個の問題が見つかりました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" -msgstr "" +msgstr "{filename}で{count}個の警告が見つかりました" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" -msgstr "" +msgstr "{appid}用に空のメタデータを生成しました" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" -msgstr "" +msgstr "Gitで「%s」のcheckoutを実行できませんでした" #: ../fdroidserver/common.py msgid "Git clean failed" -msgstr "" +msgstr "Git cleanを実行できませんでした" #: ../fdroidserver/common.py msgid "Git fetch failed" -msgstr "" - -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" +msgstr "Git fetchを実行できませんでした" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" -msgstr "" +msgstr "Git remoteでset-headを実行できませんでした:\"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" -msgstr "" +msgstr "Git resetを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" -msgstr "" +msgstr "Git submodule deinitを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule sync failed" -msgstr "" +msgstr "Git submodule syncを実行できませんでした" #: ../fdroidserver/common.py msgid "Git submodule update failed" -msgstr "" +msgstr "Git submodule updateを実行できませんでした" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" -msgstr "" +msgstr "SubversionのURLにはHTTPSを使用してください!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" -msgstr "" +msgstr "gitのミラーが大きくなった場合に、アーカイブの削除を許可" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" -msgstr "" +msgstr "このアップロードを行えなかった場合は、手動で{url}にアップロードしてみてください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." -msgstr "" +msgstr "「{metapath}」の「{field}」のメタデータは非推奨となったため、無視します。" #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" -msgstr "" +msgstr "2024より長いFUNDING.ymlは無視します:%s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" -msgstr "" +msgstr "manifestの正しくない要素を無視します:%s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile}は非推奨です。{newfile}を使用してください!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " -msgstr "" +msgstr "メタデータのないパッケージは無視します: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" -msgstr "" +msgstr "{apkfilename}の古いキャッシュデータを無視" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" -msgstr "" +msgstr "MD5などの無効に設定されているアルゴリズムで署名されているAPKを含める" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" -msgstr "" +msgstr "ミラーのPGP署名の .ascファイルを含める" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" -msgstr "" +msgstr "ミラーのビルド時のログを含める" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" -msgstr "" +msgstr "ミラーのソースコードのtarballを含める" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" -msgstr "" +msgstr "%s@%sのメタデータを含める" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" -msgstr "" +msgstr "{path}のメタデータを含める" #: ../fdroidserver/common.py msgid "Initialising submodules" -msgstr "" +msgstr "submoduleを初期化しています" #: ../fdroidserver/install.py msgid "Install all signed applications available" -msgstr "" +msgstr "署名済で利用できる全てのアプリケーションをインストール" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" -msgstr "" +msgstr "ビルドしたパッケージを端末にインストール" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." -msgstr "" +msgstr "%sをインストールしています…" #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." -msgstr "" +msgstr "{dev}に「{apkfilename}」をインストールしています…" #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" -msgstr "" +msgstr "リポジトリのHTTPサーバーと通信" #: ../fdroidserver/update.py msgid "Invalid APK" -msgstr "" +msgstr "不正なAPKです" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" -msgstr "" +msgstr "不正なAutoUpdateModeです:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" -msgstr "" +msgstr "不正なUpdateCheckModeです:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" -msgstr "" +msgstr "不正なVercodeOperationです:{field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" -msgstr "" +msgstr "不正なVercodeOperationです:{invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" -msgstr "" - -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" +msgstr "不正なアプリケーションIDです {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" -msgstr "" +msgstr "不正な箇条書きリストです" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" -msgstr "" +msgstr "公開済のファイルの不正な名前です:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" -msgstr "" +msgstr "不正なndkです:ビルドのエントリー:「{ndk}」" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " -msgstr "" +msgstr "非HTTPSへの不正なリダイレクトです:{before} → {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" -msgstr "" +msgstr "不正なscrlibのメタデータです:「{file}」はありません" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" -msgstr "" +msgstr "不正なscrlibのメタデータです:「{file}」をパースできませんでした" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" -msgstr "" +msgstr "不正なscrlibのメタデータです:「{file}」の「{key}」は不明な鍵です" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" -msgstr "" +msgstr "JAR署名を検証できませんでした:{path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" -msgstr "" +msgstr "JAR署名を検証しました:{path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" -msgstr "" +msgstr "JavaのJARファイル" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" -msgstr "" +msgstr "JavaのJDKが見つかりませんでした!標準的な場所にインストールするかjava_pathsを指定してください!" #: ../fdroidserver/scanner.py msgid "Java compiled class" -msgstr "" +msgstr "Javaのコンパイル済のクラス" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" -msgstr "" +msgstr "Javaのjarsignerが見つかりませんでした!標準的な場所にインストールするかjava_pathsを指定してください!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" -msgstr "" +msgstr "HTMLのsrc属性におけるJavaScript" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" -msgstr "" +msgstr "「{apkfilename}」の失敗したビルドを保存" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" -msgstr "" +msgstr "署名鍵用のキーストア:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " -msgstr "" +msgstr "既知のデバッグ鍵がAllowedAPKSigningKeysで使われています: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" -msgstr "" +msgstr "最後に使用されたcommit「{commit}」はタグのようですが、UpdateCheckModeは「{ucm}」です" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" -msgstr "" +msgstr "Liberapayによる寄付の方法は、Liberapay: フィールドに属します" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" -msgstr "" +msgstr "再フォーマットされるファイルのリスト(テスト)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" -msgstr "" +msgstr "ロケールはf-droid.orgのURLに含まれます" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" -msgstr "" +msgstr "例外発生時にビルドを停止" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." -msgstr "" +msgstr "リポジトリのミラーの形式が不正です。" #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" -msgstr "" +msgstr "serverwebrootの行の形式が不正です:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" -msgstr "" +msgstr "ZIPファイルの最大の再帰階層に到達しました:%s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "{url} のミラー設定に \"isPrimary\" キーが含まれています!" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." -msgstr "" +msgstr "完全なリポジトリとアーカイブ、全てのファイルの種類のミラーリング。" #: ../fdroidserver/gpgsign.py msgid "Missing output directory" -msgstr "" +msgstr "出力用ディレクトリーがありません" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" -msgstr "" +msgstr "好ましくない機能の宣言を翻訳済のファイルに移動します:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" -msgstr "" +msgstr "「repo_pubkey」と「keystorepass」のいずれもconfig.ymlで設定されていません" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" -msgstr "" +msgstr "パッケージのAPKがありません:%s" #: ../fdroidserver/common.py msgid "No Android SDK found!" -msgstr "" +msgstr "AndroidのSDKが見つかりません!" #: ../fdroidserver/install.py msgid "No attached devices found" -msgstr "" +msgstr "接続している端末が見つかりません" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "`adb install`を実行するデバイスが見つかりません!デバイスを接続してください。" #: ../fdroidserver/index.py msgid "No fingerprint in URL." -msgstr "" +msgstr "URLにフィンガープリントがありません。" #: ../fdroidserver/common.py msgid "No git submodules available" -msgstr "" +msgstr "利用できるgitのサブモジュールがありません" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" -msgstr "" +msgstr "gradleプロジェクトが見つかりませんでした。--subdirを指定しますか?" #: ../fdroidserver/import_subcommand.py msgid "No information found." -msgstr "" +msgstr "情報が見つかりません。" #: ../fdroidserver/checkupdates.py msgid "No matching tags found" -msgstr "" +msgstr "一致するタグが見つかりません" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." -msgstr "" +msgstr "SDKの最小バージョンが{0}で見つかりません。既定 (3) を使用します。" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" -msgstr "" +msgstr "アプリが自由ソフトウェアであることを指定する必要はありません" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" -msgstr "" +msgstr "アプリがAndroid向けであることを指定する必要はありません" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" -msgstr "" +msgstr "オプションが設定されていません!config.ymlを編集して、以下の少なくとも1つを設定してください。" #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "" +msgstr "パッケージが指定されていません" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" -msgstr "" +msgstr "利用できる%sの署名済のAPKがありません" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" -msgstr "" +msgstr "署名済の出力用ディレクトリーがありません - 何も実行しません" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" -msgstr "" +msgstr "{path}で署名用の証明書が見つかりません" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" -msgstr "" +msgstr "そのようなパッケージはありません:%s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" -msgstr "" +msgstr "アプリ {appid} にそのようなバージョンコード {versionCode} はありません" #: ../fdroidserver/checkupdates.py msgid "No tags found" -msgstr "" +msgstr "タグが見つかりません" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" -msgstr "" +msgstr "署名されていないディレクトリーがありません - 何も実行しません" #: ../fdroidserver/__main__.py msgid "No version information could be found." -msgstr "" +msgstr "バージョンの情報が見つかりませんでした。" #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" -msgstr "" +msgstr "正しいサイズの定義ではありません:「{}」" #: ../fdroidserver/signindex.py msgid "Nothing to do" -msgstr "" +msgstr "何も実行しません" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." -msgstr "" +msgstr "{appid}について実行することは何もありません。" #: ../fdroidserver/init.py msgid "Now set these in config.yml:" -msgstr "" +msgstr "これらをconfig.ymlに設定してください:" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "OBBのファイルはどのAPKよりも新しいバージョンコード({integer})を備えています:" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "OBBのファイル名は「main.」または「patch.」から始まる必要があります:" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "OBBのパッケージ名はサポートしているAPKと一致しません:" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "オフラインのマシンです。`fdroid deploy` を実行するまでgitのミラーの生成はスキップします" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "「github_releases」の設定項目の1つに「packageNames」の値が設定されていません。スキップします…" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "「github_releases」の設定項目の1つに「projectUrl」の値が設定されていません。スキップします…" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "「github_releases」の設定項目の1つに「token」の値が設定されていません。スキップします…" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode -#: ../fdroidserver/update.py -#, python-brace-format -msgid "OBB file has newer versionCode({integer}) than any APK:" -msgstr "" - -#: ../fdroidserver/update.py -msgid "OBB filename must start with \"main.\" or \"patch.\":" -msgstr "" - -#: ../fdroidserver/update.py -msgid "OBB's packagename does not match a supported APK:" -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" -msgstr "" +msgstr "画像にはPNGとJPEGのみをサポートします。これが見つかりました:{path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "単一キー \"env\" のみを受け付けます" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" -msgstr "" +msgstr "自動アップデートのアプリのみを処理" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" -msgstr "" - -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" +msgstr "OpenCollectiveの寄付の方法はOpenCollective: フィールドに属します" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." -msgstr "" +msgstr "APKに従った名前のファイルでJSONのレポートを出力。" #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." -msgstr "" +msgstr "標準出力にJSONを出力。" #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" -msgstr "" +msgstr "JSONを出力" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." -msgstr "" +msgstr "プロジェクト全体のライセンス。" #: ../fdroidserver/index.py #, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" -msgstr "" +msgstr "{apkfilename}の空のバージョン名をメタデータで指定:{version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" -msgstr "" +msgstr "パッケージ「{appid}」は既に存在します" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" -msgstr "" +msgstr "「{path}」のmanifestをパースしています" #: ../fdroidserver/common.py msgid "Password required with username" -msgstr "" +msgstr "パスワードはユーザー名が必要です" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." -msgstr "" +msgstr "主なAndroidのプロジェクトのサブディレクトリーへのパス(ルートにない場合)。" #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" -msgstr "" +msgstr "AndroidのSDKへのパス(ANDROID_HOMEで設定されている場合があります)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" -msgstr "" +msgstr "ログとして使用するgitのリポジトリへのパス" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" -msgstr "" +msgstr "リポジトリの署名鍵のキーストアへのパス" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" -msgstr "" +msgstr "簡単にコピー、ペーストできるように秘密の変数をターミナルに出力" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "ロケール({country_code})に基づいてプライバシー モードが有効になりました。" #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" -msgstr "" +msgstr "ZIPファイルに問題が見つかりました:%s、エラー %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" -msgstr "" +msgstr "「{path}」のxmlに問題が見つかりました" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" -msgstr "" +msgstr "自動更新を実行" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" -msgstr "" +msgstr "{apkfilename}を処理" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" -msgstr "" +msgstr "{appid}を処理" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" -msgstr "" +msgstr "インデックスファイルに可読性があるXMLまたはJSONを出力" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." -msgstr "" +msgstr "プロジェクトのインポート元のURL。" #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" -msgstr "" +msgstr "句読点は使うべきではありません" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" -msgstr "" +msgstr "ログをこのgit remoteリポジトリに送信" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" -msgstr "" +msgstr "バイナリーの透明性のログを{url}に送信" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" -msgstr "" +msgstr "遠隔サーバーに送信できませんでした!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" -msgstr "" +msgstr "{url}に送信" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" -msgstr "" +msgstr "新しいリポジトリをすぐに開始" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" -msgstr "" +msgstr "メタデータの全てのファイルを読み込んで終了" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" -msgstr "" +msgstr "「{config_file}」を読み込みます" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" -msgstr "" +msgstr "packageName/versionCode/versionNameを読み込めませんでした。不正なAPKです:「{apkfilename}」" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" -msgstr "" +msgstr "packageName/versionCode/versionNameを読み込めませんでした。不正なAPKです:「{apkfilename}」" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" -msgstr "" +msgstr "{apkfilename}をキャッシュから読み込みます" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" -msgstr "" +msgstr "スキャナーのルールと署名をネットワークから取得して更新し、キャッシュ" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "{dir1} と {dir2} のどちらにもファイルが存在するため、'{path}'への署名は拒否されました。" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "検証成功時にソースのTAR・APKを削除する。" #: ../fdroidserver/common.py msgid "Removing specified files" -msgstr "" +msgstr "指定されたファイルを削除" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" -msgstr "" +msgstr "{path} を削除" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" -msgstr "" +msgstr "package.name_123.apkに合致しないAPKファイルの名前を変更" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" -msgstr "" +msgstr "指定したdebug.keystoreで{apkfilename}を再度署名" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" -msgstr "" +msgstr "最大のピクセルの大きさを超えている全てのアイコンのサイズを変更して終了" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" -msgstr "" +msgstr "警告とエラーのみを出力" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "失敗したダウンロードを再試行しています: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" -msgstr "" +msgstr "メタデータの全てのファイルを書き換える" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "" +msgstr "「{appid}」を書き換えています" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" -msgstr "" +msgstr "commitされていない変更があるgitのリポジトリで実行" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "{cibase}で-debug.apkを検索し、repo_basedir {repo_basedir} をスキップ" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" -msgstr "" +msgstr "rewritemetaを実行してフォーマットを修正" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" -msgstr "" +msgstr "MD5のチェックを無効にして最初のチェックを実行しています" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" -msgstr "" +msgstr "{path}でwgetを実行しています" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" -msgstr "" +msgstr "{url}のSHA-256がエントリーと合致しません!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." -msgstr "" +msgstr "既知の不自由なクラスが無いかどうか、残っているAPKをスキャンして確認。" #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" -msgstr "" +msgstr "パッケージのソースコードを読み込む" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" -msgstr "" +msgstr "スキャナーは{apk}に{count}個の問題を発見しました" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" -msgstr "" +msgstr "スキャナーは{appid}に{count}個の問題を発見しました:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" -msgstr "" +msgstr "スキャナーは{appid}:{versionCode}に{count}個の問題を発見しました:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" -msgstr[0] "" +msgstr[0] "スキャナーは{}個の問題を発見しました" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "追加の署名ブロックがないかAPKをスキャンしています。" #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." -msgstr "" +msgstr "既知の不自由なクラスが無いかどうか、APKをdexdumpでスキャンして確認。" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" -msgstr "" +msgstr "NDK {release}({version})を設定" #: ../fdroidserver/common.py msgid "Set clock to that time using:" -msgstr "" +msgstr "以下を実行して時計の時間を合わせてください。" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" -msgstr "" +msgstr "アーカイブを開始するまでのリポジトリ内でのリリースの最大数を設定" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" -msgstr "" +msgstr "開くファイルの制限を{integer}に設定" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" -msgstr "" +msgstr "ナイトリービルドのリポジトリ向けにアプリのビルドを設定" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " -msgstr "" +msgstr "開くファイルの制限を設定できませんでした: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" -msgstr "" +msgstr "このビルドがタイムアウトになるまでの時間を{0}秒に設定しています" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" -msgstr "" +msgstr "パッケージに署名してリポジトリに設置" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" -msgstr "" +msgstr "「update --nosign」で作成したインデックスに署名" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" -msgstr "" +msgstr "バイナリーやその他の問題が無いかどうかに関するソースコードのスキャンをスキップ" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" -msgstr "" +msgstr "正しくない署名がある「{apkfilename}」をスキップします!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" -msgstr "" +msgstr "リポジトリが大きすぎるため(>%.2fGB)GitLab Pagesのミラーリングをスキップします!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" -msgstr "" +msgstr "{appid}のインデックスの作成をスキップします" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" -msgstr "" +msgstr "正しくない署名がある{apkfilename}をスキップします!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" -msgstr "" +msgstr "{appid}をスキップ:無効に設定されています" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" -msgstr "" +msgstr "リポジトリを同期するローカルのフォルダーを指定" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" -msgstr "" +msgstr "rsyncを行う際にSSHに指定するIDファイルを指定" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." -msgstr "" +msgstr "使用するデバッグ用キーストアファイルを指定。" #: ../fdroidserver/common.py msgid "Spew out even more information than normal" -msgstr "" +msgstr "通常より多くの情報を出力" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" -msgstr "" +msgstr "{apkfilename}から不明な署名を削除します" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" -msgstr "" +msgstr "要約文「%s」 がアプリの名前と同一です" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" -msgstr "" +msgstr "要約の長さは{length}ですが、最大の文字数は{limit}です" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" -msgstr "" +msgstr "システムの時刻が{path}の日付よりも古いです!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" -msgstr "" +msgstr "現在、タグのアップデートはgit、hg、bzr、git-svnのリポジトリでのみ機能します" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" -msgstr "" +msgstr "タグのアップデートモードがgit-svnで使用されましたが、リポジトリはタグを使用するように設定されていませんでした" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." -msgstr "" +msgstr "テストモード - 既に出力が存在する場合でも、一時ディレクトリーに出力し、常にビルドを行います。" + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "\"qrcode\"のPythonパッケージが未導入です( 例えば apt-get install python3-qrcode します)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" -msgstr "" +msgstr "OBBのバージョンコードは「{name}」の後に設定してください:" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" -msgstr "" +msgstr "ログを記録するリポジトリのベースとなるURL(既定:https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" -msgstr "" +msgstr "ミラーを書き込むディレクトリー" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" -msgstr "" +msgstr "リポジトリに含めるファイル(パスまたはglob)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." -msgstr "" +msgstr "リポジトリのフィンガープリントが合致しません。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" -msgstr "" +msgstr "Local_copy_dir \"{path}\" のルートディレクトリーは存在しません!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" -msgstr "" +msgstr "キーエイリアスが衝突しています - 公開作業は中止しました" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." -msgstr "" +msgstr "これらは、メインリポジトリからアーカイブされたアプリです。" #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." -msgstr "" +msgstr "このコマンドで f-droid.org のミラーリングを行わないでください!完全なコピーには600GB以上が必要となります。" #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." -msgstr "" +msgstr "これは、F-Droidで使用できるアプリのリポジトリです。 このリポジトリのアプリケーションは、元のアプリケーション開発者によってビルドされた公式のバイナリーか、またはf-droid.orgの管理者によってソースコードからhttps://gitlab.com/fdroidのツールを使ってビルドされたバイナリーのどちらかです。" #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" -msgstr "" +msgstr "このリポジトリにはローカルのメタデータがあります:%s" #: ../fdroidserver/init.py #, python-format @@ -1706,587 +1765,553 @@ msgid "" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" +"設定を完了するには、APKを「%s」に追加してから\n" +"「fdroid update -c; fdroid update」を実行してください。その際には、\n" +"「config.yml」を編集して、URL、リポジトリの名前などを設定してください。\n" +"また、署名用の鍵も併せて設定することを推奨します(一時的な署名鍵が自動的に生成されている可能性があります)。\n" +"\n" +"詳細については、https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"または https://f-droid.org/docs/Signing_Process をご覧ください。" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" -msgstr "" +msgstr "awsbucketwを使うには、awssecretkeyとawsaccesskeyidをconfig.ymlに設定する必要があります!" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "rcloneを使用するには、rclone_configとawsbucketをconfig.ymlに設定する必要があります!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" -msgstr "" +msgstr "URLは https:// または http:// から始まる必要があります" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" -msgstr "" +msgstr "URL短縮ソフトウェアは使用しないでください" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" -msgstr "" +msgstr "説明文にあるURL {url}:{error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" -msgstr "" +msgstr "予期されていないライセンスタグ「{}」です!https://spdx.org/license-list から、FSFまたはOSIにより認証されたタグのみを使用してください" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" +msgstr "予期しないライセンスタグ「{}」です!設定ファイルで設定されたライセンスタグのみを使用してください" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" -msgstr "" +msgstr "{configname}の不明なエントリー {key} です" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" -msgstr "" +msgstr "不明な例外が発生しました!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" -msgstr "" +msgstr "ビルド「{versionName}」の不明なファイル「{filename}」" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" -msgstr "" +msgstr "メタデータのフォーマットが不明です:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" -msgstr "" +msgstr "メタデータのフォーマットが不明です:{path}(*.ymlを使ってください)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " -msgstr "" +msgstr "aaptのバージョンが不明です。問題が生じる可能性があります: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" -msgstr "" +msgstr "不要なスペースが先頭にあります" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" -msgstr "" +msgstr "不要なスペースが末尾にあります" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" -msgstr "" +msgstr "「{path}」に未認識のアプリのフィールド「{fieldname}」があります" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" -msgstr "" +msgstr "認識されないビルド用のオプション「{build_flag}」が「{path}」にあります" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" -msgstr "" +msgstr "リポジトリの画像にサポートされていないファイルの種類「{extension}」が使用されています" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" -msgstr "" +msgstr "サポートされていない画像ファイルが見つかりました:{path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" -msgstr "" +msgstr "使われていないextlibが%sにあります" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" -msgstr "" +msgstr "使われていないファイルが%sにあります" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" -msgstr "" +msgstr "使われていないscandeleteのパス:%s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" -msgstr "" - -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" +msgstr "使われていないscanignoreのパス:%s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" -msgstr "" +msgstr "新しいパッケージに関するリポジトリの情報を更新" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" -msgstr "" +msgstr "URLに関するバイナリーの透明性のログを更新" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" -msgstr "" +msgstr "UpdateCheckDataのURLが正しくありません:{url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" -msgstr "" +msgstr "UpdateCheckDataは整数(\\d または [0-9])のバージョンコードに合致する必要があります:{codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" -msgstr "" +msgstr "UpdateCheckDataにはHTTPSのURLを指定してください:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" -msgstr "" +msgstr "UpdateCheckDataは正しいURLではありません:{url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" +msgstr "UpdateCheckModeが設定されていますがcheckupdatesがまだ実行されていないようです。" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" -msgstr "" +msgstr "UpdateCheckNameが既知のアプリケーションIDに設定されています。これは削除できます" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" -msgstr "" +msgstr "{apkfilename}をandroidobservatory.orgにアップロードしています" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" +msgstr "{apkfilename}をvirustotalにアップロードしています" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" +msgstr "既定のブランチでファイルを指定する際に /master または /main の代わりに /HEADを使用" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." -msgstr "" +msgstr "`fdroid update -c`で作成。" #: ../fdroidserver/build.py msgid "Use build server" -msgstr "" +msgstr "ビルド用サーバーを使用" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" -msgstr "" +msgstr "現在の時間の代わりにAPKの時間を、新しく追加されたAPKに使用" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." -msgstr "" +msgstr "「{path}」をs3cmdの設定に使用。" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "「{path}」を遠隔ストレージとの同期に使用。" #: ../fdroidserver/common.py msgid "Using APK Signature v2" -msgstr "" +msgstr "APK署名バージョン2を使用" #: ../fdroidserver/common.py msgid "Using APK Signature v3" -msgstr "" +msgstr "APK署名バージョン3を使用" #: ../fdroidserver/common.py msgid "Using JAR Signature" -msgstr "" +msgstr "JAR署名を使用" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" +msgstr "JavaのjarsignerでAPKを検証することは推奨されません!apksignerを使ってください" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" -msgstr "" +msgstr "{path}の内容の代わりに空の辞書を使用します!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" -msgstr "" +msgstr "\"{path}\"にある既存のキーストアを使用" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "Rcloneを使って {url} と同期" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" -msgstr "" +msgstr "s3cmdを使って {url} と同期" #: ../fdroidserver/__main__.py msgid "Valid commands are:" -msgstr "" +msgstr "正しいコマンドは以下の通りです。" #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." -msgstr "" +msgstr "再ダウンロードする代わりにローカルにキャッシュ済のコピーで検証。" #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" -msgstr "" +msgstr "ダウンロードしたパッケージの一貫性を検証" #: ../fdroidserver/index.py msgid "Verifying index signature:" -msgstr "" +msgstr "インデックスの署名を検証:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "apksignerを使用してパッケージ{path}を検証しています。" #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "VirusTotalのAPI鍵は32メガバイトより大きいファイルをアップロードできません。{url}から{path}をアップロードしてください。" + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" -msgstr "" +msgstr "潜在的なメタデータのエラーに関して警告" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssemblyバイナリ ファイル" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" -msgstr "" +msgstr "署名済のインデックスに関して設定されている場合、この段階では署名されていないインデックスのみを作成します" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." -msgstr "" +msgstr "リポジトリ全体をチェックする際、yamllintは既定で無効に設定されます。このオプションを使うと、yamllintを強制的に実行します。" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." -msgstr "" +msgstr "署名または検証ができなかった場合、エラーコードを出力して終了します。" + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "adb経由でF-Droid.apkをダウンロードしてインストールしますか?(YES/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "f-droid.orgからアプリをダウンロードしますか?(YES/no)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" -msgstr "" +msgstr "鍵の生成時に使用する X.509 'Distinguished Name'" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" -msgstr "" +msgstr "以下のようにANDROID_HOMEでSDKへのパスを設定できます。" #: ../fdroidserver/scanner.py msgid "ZIP file archive" -msgstr "" +msgstr "ZIPファイルアーカイブ" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adbは、{serial}が「{status}」であると報告しています!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" -msgstr "" +msgstr "IdentityFileを{path}に追加" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" -msgstr "" +msgstr "{name}: {path} に追加" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" -msgstr "" +msgstr "オプションが曖昧です。%(option)sは%(matches)sに一致しませんでした" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "ビルドツール群のapkサイナー;{version}は、無効なv3署名がなされたAPKを無視します。" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" -msgstr "" +msgstr "apksignerが見つかりません!最近のAPKに署名を行ったり検証したりすることはできません" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" -msgstr "" +msgstr "apksignerが見つかりません。署名を行うには必要です!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" -msgstr "" +msgstr "実行用のファイルのアプリケーションID" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" -msgstr "" +msgstr "APPID[:VERCODE] 形式でversionCodeを指定した(オプション)アプリケーションID" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" -msgstr "" +msgstr "archive_url は /archive で終了する必要があります" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" -msgstr "" +msgstr "モード %r の引数 \"-\"" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" -msgstr "" +msgstr "引数 %(argument_name)s:%(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" -msgstr "" +msgstr "SSH接続でデプロイ用の鍵をテストします。" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" -msgstr "" +msgstr "srclibの規定をパースできません(文字列ではありません):'{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" -msgstr "" +msgstr "「%(filename)s」を開けません:%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" -msgstr "" +msgstr "HTTPSでないURLは開けません:'{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" -msgstr "" +msgstr "必要なsrclibsが見つかりません:「{path}」" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" -msgstr "" +msgstr "サブパーサーの複数の引数を指定することはできません" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" -msgstr "" +msgstr "アクションをマージできません - 2つのグループが%rと名付けられています" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" -msgstr "" +msgstr "更新を公開できません。デプロイ用の鍵を設定しましたか?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" -msgstr "" +msgstr "{url}のcloneを行います" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" -msgstr "" +msgstr "プラグインモジュールのコマンド:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" -msgstr[0] "" +msgstr[0] "オプションの文字列が矛盾しています:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" -msgstr "" +msgstr "矛盾するサブパーサーのエイリアス:%s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" -msgstr "" +msgstr "サブパーサーが矛盾しています:%s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" -msgstr "" +msgstr "「{path}」をパースできませんでした" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" -msgstr "" +msgstr "srclibの規定をパースできませんでした(名前が指定されていません):'{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" -msgstr "" - -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" +msgstr "srclibの規定をパースできませんでした(refが指定されていません):'{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" -msgstr "" +msgstr "{path}を作成しました" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "現在のバージョンの方が新しいです:以前のvercode={old}、新しいvercode={new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" -msgstr "" +msgstr "削除しています:repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "ロックの存在しない依存ファイル" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" -msgstr "" +msgstr "{path}の処理ログを{dest}に設定しました" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" -msgstr "" +msgstr "%rなどのオプションにはdest= が必要です" #: ../fdroidserver/scanner.py msgid "downloading '{}'" -msgstr "" +msgstr "'{}'をダウンロードしています" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" -msgstr "" +msgstr "スキャナーの署名を'{}'からダウンロードできませんでした" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" -msgstr "" +msgstr "実行可能なバイナリー、おそらくコードです" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" -msgstr[0] "" +msgstr[0] "%s個の引数が必要" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" -msgstr "" +msgstr "1つ以上の引数が必要です" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" -msgstr "" +msgstr "多くても1つの引数が必要です" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" -msgstr "" +msgstr "1つの引数が必要です" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" -msgstr "" +msgstr "fdroid [] [-h|--help|--version|]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" -msgstr "" - -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" +msgstr "ウェブから署名の最新のバージョンを取得" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." -msgstr "" +msgstr "メタデータのエラー(既定)を警告として扱うよう強制するか、無視するよう強制。" #: ../fdroidserver/common.py msgid "git svn clone failed" -msgstr "" +msgstr "git svn clone を実行できませんでした" #: ../fdroidserver/scanner.py msgid "gzip file archive" -msgstr "" +msgstr "gzipファイルアーカイブ" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" -msgstr "" +msgstr "明示的な引数 %r を無視しました" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" -msgstr "" +msgstr "index-v1には署名が必要です。`fdroid signindex`で署名を作成してください!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" -msgstr "" +msgstr "index-v2には署名が必要です。`fdroid signindex`で署名を作成してください!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" -msgstr "" +msgstr "%(type)sの値が不正です:%(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" -msgstr "" +msgstr "不正な選択です:%(value)r(%(choices)sから選択してください)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" -msgstr "" +msgstr "conflict_resolutionの値が不正です:%r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" -msgstr "" +msgstr "%(option)rは不正なオプションの文字列です:%(prefix_chars)rで始まる必要があります" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" -msgstr "" +msgstr "ipfs_cid が見つかりません。CIDv1の生成をスキップします" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "直近のビルドの仕様書の方が新しいです:以前のvercode={old}、新しいvercode={new}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2295,469 +2320,372 @@ msgstr "local_copy_dir は「froid」で終わっていません、もしかし #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" -msgstr "local_copy_dir は絶対パスの必要があります!" +msgstr "local_copy_dir には絶対パスを指定してください!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" -msgstr "local_copy_dir はファイルではなくディレクトリにする必要があります!" +msgstr "local_copy_dir にはファイルではなくディレクトリーを指定してください!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" -msgstr "" +msgstr "ミラー「%s」は「fdroid」で終わっていません!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "" +msgstr "config.ymlと{path}で2回ミラーが設定されています!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" -msgstr "" +msgstr "相互に排他的な引数はオプションとしてください" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" -msgstr "" +msgstr "次の{name}キャッシュの更新まで{time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" -msgstr "" +msgstr "{appid}に「アイコン」がありません" #: ../fdroidserver/signatures.py msgid "no APK supplied" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" +msgstr "APKが指定されていません" #: ../fdroidserver/checkupdates.py msgid "no version information found" -msgstr "" +msgstr "バージョンの情報が見つかりません" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" -msgstr "" +msgstr "引数 %s は許可されていません" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" -msgstr "" +msgstr "引数 %s の1つが必要です" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" -msgstr "" - -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" +msgstr "文字列、リスト、タプルのみが許可" #: /usr/lib/python3.11/argparse.py msgid "options" -msgstr "" +msgstr "オプション" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" -msgstr "" +msgstr "既存の{path}を上書きします" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" -msgstr "" +msgstr "位置に関する引数" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" -msgstr "" +msgstr "{path}の処理ログを{dest}に設定できませんでした!" #: ../fdroidserver/build.py msgid "reference binary missing signature" -msgstr "" +msgstr "参照バイナリーに署名がありません" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" -msgstr "" +msgstr "安全でないHTTP接続によるダウンロードを拒否(HTTPSを使うか--no-https-checkを指定してください):{apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." -msgstr "" +msgstr "repo_icon \"repo/icons/%s\"が存在しません。プレースホルダーを生成します。" #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" -msgstr "" +msgstr "repo_urlは/repoで終わる必要があります" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" +msgstr "rsyncが無いか壊れています:{error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" -msgstr "" +msgstr "s3cmdは{path}のインデックスを{url}に同期して削除" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "s3cmdは{path}から{url}へインデックスを同期し、消去されたインデックスを削除します" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" -msgstr "" +msgstr "スキャナーのキャッシュの形式が正しくありません!「{clear}」で消去してください" #: ../fdroidserver/deploy.py -#, fuzzy -#| msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" -msgstr "local_copy_dir は「froid」で終わっていません、もしかして: 「{path}」" +msgstr "serverwebroot: パスが「fdroid」で終わっていません。もしかして:" #: ../fdroidserver/scanner.py msgid "shared library" -msgstr "" +msgstr "共有ライブラリー" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" -msgstr "" +msgstr "このヘルプメッセージを表示して終了" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." -msgstr "" +msgstr "サイン済みのAPK。ファイルのパスかHTTPSのURL。" #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" -msgstr "" +msgstr "完全なビルドログの設置をスキップ:ログの中身はありません" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" -msgstr "" +msgstr "完全なビルドログの設置をスキップ:設定で有効にされていません" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" -msgstr "" +msgstr "ソースコードのtarballをスキップします:{path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" -msgstr "" +msgstr "srclibsに名前と「@」がありません" #: ../fdroidserver/scanner.py msgid "static library" -msgstr "" +msgstr "静的ライブラリー" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" -msgstr "" +msgstr "指定された参照バイナリーには許可された署名者 {signer} がいます" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" -msgstr "" +msgstr "次の引数が必要です:%s" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "true" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" -msgstr "" +msgstr "予期しないオプションの文字列です:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" -msgstr "" +msgstr "不明なパーサー %(parser_name)r(選択肢:%(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" -msgstr "" +msgstr "認識されない引数です:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" -msgstr "" +msgstr "「{config_file}」のパーミッションが安全ではありません(0600に設定すべきです)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " -msgstr "" +msgstr "使い方: " #: ../fdroidserver/deploy.py #, python-brace-format msgid "using Apache libcloud to sync with {url}" -msgstr "" +msgstr "Apache libcloudを使って{url}と同期" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." -msgstr "" +msgstr "virustotal.comはレート制限を行っています。再試行を待機しています…" + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "yes" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" -msgstr[0] "" +msgstr[0] "{0}個のアプリ、{1}個の鍵のエイリアス" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" +msgstr "{apkfilename}({appid})にメタデータがありません!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " -msgstr "" +msgstr "{apkfilename}のAndroidManifest.xmlの日付が正しくありません: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." -msgstr "" +msgstr "{appid}には名前が設定されていません!アプリケーションIDを代わりに使用します。" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" -msgstr "" +msgstr "{path}の{appid}は正しいAndroidのアプリケーションIDではありません!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" -msgstr "" +msgstr "{path}の{appid}は正しいJavaパッケージの名前ではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" -msgstr "" +msgstr "{appid}にはAPKとファイルの両方があります:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" -msgstr "" +msgstr "{appid}には{name}がありません" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" -msgstr "" +msgstr "{appid}:ビルド「{versionName}」のextlib {path}は不明です" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" -msgstr "" +msgstr "{appid}:ビルドが指定されていません。現在のソースコードに基づき実行します" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" -msgstr "" +msgstr "{appid}:{field}には「{fieldtype}」ではなく「{type}」を指定してください!" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" -msgstr "" +msgstr "{appid}:{field}には「{fieldtype}」ではなく「{type}」を指定してください!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" -msgstr "" +msgstr "{build_flag}には整数を指定してください。{value}が見つかりました" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" -msgstr "" +msgstr "{build_flag}にはリストまたは文字列を指定してください。指定された値:{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" -msgstr "" +msgstr "{file}は空か壊れています!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." -msgstr "" +msgstr "{name}「{section}/icons/{path}」がありません!「config.yml」を確認してください。" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} は {path2} と重複しています、片方を除外してください!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" -msgstr "" +msgstr "{path}は既に存在します。インポートの結果は無視します!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" -msgstr "" +msgstr "{path}がありません!以下を実行して作成してください。" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" -msgstr "" +msgstr "{path}のファイル署名「{pattern}」は正しくありません。Janusの脆弱性による可能性があります!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "{path}はvirustotalにより{count}回マークされました。" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path}のフィンガープリント({fingerprint})が間違っています!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path}は{datatype}です。「キー:値」の辞書ではありません!" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format -#| msgid "'sdk_path' not set in config.yml!" +#, python-brace-format msgid "{path} is not a standard config file!" -msgstr "「sdk_path」がconfig.ymlで設定されていません!" +msgstr "{path}は標準の設定ファイルではありません!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path}は{datatype}です。リストではありません!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path}は{datatype}です。{expected_type}ではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" -msgstr "" +msgstr "{path}の大きさは0です!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" -msgstr "" +msgstr "{path}は200MB以上です。手動で{url}にアップロードしてください" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}:「{code}」は有効なISO_3166-1 alpha-2の国コードではありません!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" -msgstr "" +msgstr "{path}:{error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" -msgstr "" +msgstr "{url}が「fdroid」で終わっていません。URLパスを確認してください!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" -msgstr "" +msgstr "{url}は「http」で始まっていません!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" -msgstr[0] "" +msgstr[0] "{}個のビルドを行えませんでした" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" -msgstr[0] "" +msgstr[0] "{}個のビルドを行いました" diff --git a/locale/kab/LC_MESSAGES/fdroidserver.po b/locale/kab/LC_MESSAGES/fdroidserver.po index b814270a..121b58f0 100644 --- a/locale/kab/LC_MESSAGES/fdroidserver.po +++ b/locale/kab/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2021-01-15 13:25+0000\n" "Last-Translator: R_SACI \n" "Language-Team: Kabyle \n" @@ -36,6 +36,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -46,11 +50,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" yebded yakan ɣef {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -76,17 +75,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" mačči d aseɣwen URL ameɣtu!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -102,14 +90,6 @@ msgstr "" msgid "%d problems found" msgstr "%d n wuguren ttwafen" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [d afrayan]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -130,13 +110,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' ulac-it di config.yml!" @@ -157,8 +130,6 @@ msgstr "'keystorepass' ulac-it di config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' ulac-it deg config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' d taɣiret ur iṣeḥḥan ara i usideg" @@ -172,11 +143,6 @@ msgstr "'sdk_path' ur yettwasbadu ara 'config.yml'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' d aqbuṛ, fdroid yesra build-tools-{version} neɣ amaynut!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' ad yili s usmizzwer agacuran ! Seqdec () neɣ tuccar [] ma yella ilaq usmizzwer!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -187,7 +153,7 @@ msgstr "'{path}' ur izmir ara ad yettwaselkem!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -197,13 +163,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...anadi n ileqman ur yeddi ara i {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() ur yettwasbadu ara" @@ -294,10 +262,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -324,6 +288,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -333,7 +305,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -384,16 +355,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -416,6 +394,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Tabdart n taggayin i yebḍan s ticcert." @@ -429,6 +411,10 @@ msgstr "Taladna '%s' ur tettwassen ara.\n" msgid "Commit changes" msgstr "Azen ibeddilen" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -438,20 +424,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "D awezɣi tifin n '{command}' deg unagraw-ik.im" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Ur izmir ara ad d-yaf isem n lqem aneggaru" @@ -471,6 +454,7 @@ msgstr "Ur yezmir ara ad d-yeldi afaylu APK {path} i tesleḍt: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -498,6 +482,11 @@ msgstr "Anagbar amaynut yettwarnan \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -560,11 +549,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -613,13 +597,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -655,12 +638,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -670,6 +647,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -687,6 +684,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -703,6 +709,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "Izmal-nniḍen sɣur APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -772,10 +782,6 @@ msgstr "" msgid "Finished" msgstr "Immed" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Ticraḍ HTML yettwagedlen" @@ -807,7 +813,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -872,16 +877,13 @@ msgstr "Asfaḍ Git yecceḍ" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -#, fuzzy -msgid "Git prune failed" -msgstr "Asfaḍ Git yecceḍ" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -927,6 +929,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1012,16 +1019,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Asulay n usnas d arameɣtu {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Tabdart s tneqqiḍin tarameɣtut" @@ -1134,6 +1137,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1163,6 +1171,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1223,7 +1235,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1258,7 +1269,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1276,13 +1286,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1293,10 +1317,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Tixtiṛiyin" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1354,6 +1374,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1440,6 +1465,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1453,12 +1487,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1474,6 +1505,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1487,6 +1523,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1534,6 +1575,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1654,6 +1699,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1718,6 +1767,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1739,11 +1792,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1753,7 +1801,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Tettwaf tsureft d tarussint!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1791,6 +1838,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1821,11 +1869,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1839,6 +1882,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1858,11 +1902,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1877,27 +1917,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Aseqdec" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Aseqdec: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1915,6 +1938,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1931,11 +1959,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1946,6 +1969,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "Aseqdec n tqeffalt n uḥraz \"{path}\"" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1967,15 +1995,28 @@ msgstr "Senqed timmad n yikemmusen yettwasadren" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1988,6 +2029,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2000,6 +2049,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2010,18 +2064,14 @@ msgstr "timerniwt n ufaylu n tmagit ɣer {path}" msgid "adding to {name}: {path}" msgstr "timerniwt ɣer {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2032,11 +2082,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2047,8 +2099,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2067,7 +2117,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2081,14 +2131,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2107,14 +2153,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2145,10 +2183,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2164,13 +2198,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2188,8 +2224,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2197,20 +2231,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2223,10 +2251,6 @@ msgstr "fdroid [] [-h|--tallelt|--lqem|]" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2239,8 +2263,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2254,35 +2276,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "amḍan ummid" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2320,8 +2328,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2340,30 +2346,15 @@ msgstr "ulac \"tignit\" deg {appid}" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2373,72 +2364,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "Taxtiṛt -%s ur tettwassen ara" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "Taxtiṛt -%s yesra afakul" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "aɣewwar --%s yessefk ad yesεu tiɣiret" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2449,8 +2374,6 @@ msgstr "Tixtiṛiyin" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2483,13 +2406,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2505,17 +2429,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2549,29 +2463,25 @@ msgstr "tamkerḍit n tdaddanin" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2582,9 +2492,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "aqseqdac: " @@ -2597,6 +2505,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2609,21 +2521,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2644,7 +2554,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2685,9 +2594,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2710,6 +2619,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ko/LC_MESSAGES/fdroidserver.po b/locale/ko/LC_MESSAGES/fdroidserver.po index 16b8a1e2..cb546be1 100644 --- a/locale/ko/LC_MESSAGES/fdroidserver.po +++ b/locale/ko/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-135-g16dd6d28\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-09-06 14:57+0000\n" "Last-Translator: Cxnfl1ct \n" "Language-Team: Korean \n" @@ -40,6 +40,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\"에 일치하는 메타데이터 파일이 없습니다!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +54,6 @@ msgstr "Android SDK 경로 '{path}'는 존재하지 않습니다!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\"는 이미 {dev}에 설치되어 있습니다." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\"는 오래된 {name} ({version})를 포함합니다" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,16 +79,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\"은 올바른 URL이 아닙니다!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s 옵션은 %(number)d 인자가 필요합니다" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -105,14 +94,6 @@ msgstr "" msgid "%d problems found" msgstr "문제 %d개를 찾음" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [옵션]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -133,13 +114,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "%s는 빌드 필드 값으로 허용되지 않습니다" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s 옵션은 값을 받지 않습니다" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass'를 config.yml에서 찾을 수 없습니다!" @@ -160,8 +134,6 @@ msgstr "'keystorepass'를 config.yml에서 찾을 수 없습니다!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias'를 config.yml에서 찾을 수 없습니다!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required'는 고정적을 위한 잘못된 인수입니다" @@ -175,11 +147,6 @@ msgstr "'sdk_path'가 config.yml에서 설정되어 있지 않습니다!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}'는 너무 오래되었습니다, fdroid는 build-tools-{version} 이후가 필요합니다!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}'는 순서가 무작위로 변합니다! 순서가 중요하면 괄호 ()나 대괄호 []를 사용하세요!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +157,7 @@ msgstr "'{path}'를 실행하는 데 실패했습니다!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}" @@ -200,13 +167,15 @@ msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식 msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}'에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...{appid}를 위한 checkupdate가 실패됨 : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__()이 정의되지 않음" @@ -297,10 +266,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -327,6 +292,14 @@ msgstr "올바르지 않은 서명으로 {apkfilename}를 보존 중입니다!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -336,7 +309,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -386,16 +358,23 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "카테고리 '%s'는 올바르지 않습니다" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "카테고리가 설정되어 있지 않습니다" @@ -418,6 +397,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -431,6 +414,10 @@ msgstr "명령 '%s'은 인식되지 않습니다.\n" msgid "Commit changes" msgstr "번경사항 커밋" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -440,20 +427,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -473,6 +457,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -499,6 +484,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "기록 디렉터리 만들기" @@ -561,11 +551,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -614,13 +599,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -656,12 +640,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -676,6 +654,16 @@ msgstr "" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -698,6 +686,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -718,6 +711,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -787,10 +784,6 @@ msgstr "" msgid "Finished" msgstr "마침" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -822,7 +815,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -887,16 +879,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -#, fuzzy -msgid "Git prune failed" -msgstr "git svn 복제에 실패됨" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -942,6 +931,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1027,16 +1021,12 @@ msgstr "잘못된 Vercode연산: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "잘못된 VercodeOperation연산: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "올바르지 않은 부울 '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "잘못된 글머리 기호 목록" @@ -1149,6 +1139,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1178,6 +1173,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1238,7 +1237,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1274,7 +1272,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1292,25 +1289,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG와 JPEG만 그래픽을 위해 지원됩니다, 찾았습니다: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1321,10 +1320,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "옵션" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1382,6 +1377,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1468,6 +1468,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1481,12 +1490,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "package.name_123.apk와 일치하지 않는 APK 파일의 이름을 바꿉니다" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1502,6 +1508,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "모든 메타데이터 파일을 다시 씁니다" @@ -1566,6 +1577,10 @@ msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1686,6 +1701,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1775,11 +1794,6 @@ msgstr "잘못된 라이선스 태그 \"{}\"! https://spdx.org/license-list 에 msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1789,7 +1803,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "알 수 없는 예외가 찾아졌습니다!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1827,6 +1840,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1857,11 +1871,6 @@ msgstr "사용되지 않은 스캔삭제 경로: %s" msgid "Unused scanignore path: %s" msgstr "사용되지 않은 스캔삭제 경로: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "새 패키지를 위한 저장소 정보를 업데이트합니다" @@ -1875,6 +1884,7 @@ msgstr "URL을 위한 바이너리 투명성 기록을 업데이트합니다" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData에 올바르지 않은 URL이 있습니다: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1894,11 +1904,7 @@ msgstr "UpdateCheckData는 올바른 URL이 아닙니다: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1913,27 +1919,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "사용법" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "사용법: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "그것을 만드려면 `fdroid update -c`를 사용하세요." @@ -1972,11 +1961,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Java의 jarsigner를 사용하여, APK를 검증하는 것은 권장되지 않습니다! apksigner를 사용하세요" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "\"{path}\"에서 androguard를 사용 중" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2013,15 +1997,28 @@ msgstr "다운로드된 패키지의 무결성 확인" msgid "Verifying index signature:" msgstr "색인 서명을 검증 중:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "가능한 메타데이터 오류에 대해 경고합니다" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -2034,6 +2031,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2046,6 +2051,11 @@ msgstr "당신은 당신의 SDK에 경로를 설정하기 위해 ANDROID_HOME을 msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2056,19 +2066,15 @@ msgstr "{path}에 IdentityFile을 추가 중" msgid "adding to {name}: {path}" msgstr "{name}에 추가 중: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "모호한 옵션: %(option)s은 %(matches)s와 일치했을 수 있습니다" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "모호한 옵션: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2078,11 +2084,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "작업할 파일의 애플리케이션 ID" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2093,8 +2101,6 @@ msgstr "양식 APPID[:VERCODE]에서 선택적인 versionCode로 된 애플리 msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2113,7 +2119,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s'를 열 수 없습니다: %(error)s" @@ -2127,14 +2133,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2153,14 +2155,6 @@ msgstr "{url}를 복제 중" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "복잡한" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2190,10 +2184,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2218,8 +2208,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2237,28 +2225,20 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2271,10 +2251,6 @@ msgstr "fdroid [<명령>] [-h|--help|--version|<인수>]" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "부동소수점" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "경고하거나 무시되는 강제 메타데이터 오류 (기본값)." @@ -2287,8 +2263,6 @@ msgstr "git svn 복제에 실패됨" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2303,35 +2277,21 @@ msgstr "index-v1은 서명이 있어야 합니다, 그것을 만드려면 `fdroi msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1은 서명이 있어야 합니다, 그것을 만드려면 `fdroid signindex`를 사용하세요!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "정수" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "올바르지 않은 %(type)s 값: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "올바르지 않은 선택: %(value)r (%(choices)s에서 선택하세요)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "올바르지 않은 conflict_resolution 값: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2369,8 +2329,6 @@ msgstr "미러 '%s'는 'fdroid'로 끝나지 않습니다!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2389,30 +2347,15 @@ msgstr "{appid}에 \"icon\"이 없습니다" msgid "no APK supplied" msgstr "제공된 APK가 없습니다" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "이러한 옵션이 없습니다: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "버전 정보를 찾지 못했습니다!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "버전 정보를 찾지 못했습니다" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2422,72 +2365,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "옵션 %s: 당신이 정말 모든 서명된 앱을 설치하기를 원한다면, --all을 사용하세요" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "옵션 %s: 올바르지 않은 %s 값: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "옵션 %s: 올바르지 않은 선택: %r (%s에서 선택하세요)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "옵션 -%s은 인식되지 않습니다" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "옵션 -%s은 인수가 필요합니다" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "옵션 --%s은 인수를 가지지 않아야 합니다" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "옵션 --%s는 고유한 접두어가 아닙니다" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "옵션 --%s은 인식되지 않습니다" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "옵션 --%s은 인수가 필요합니다" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "선택적 인수" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2498,8 +2375,6 @@ msgstr "옵션" msgid "overwriting existing {path}" msgstr "기존 {path}를 덮어쓰는 중" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "고정적 인수" @@ -2532,10 +2407,6 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2559,17 +2430,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "프로그램의 버전 번호를 보여주고 종료합니다" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "이 도움말 메시지를 보여주고 종료합니다" @@ -2603,29 +2464,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "다음 인수들이 필요합니다: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "예기치 않은 옵션 문자열: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "알 수 없는 파서 %(parser_name)r (선택: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2636,9 +2493,7 @@ msgstr "인식할 수 없는 인수: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}'에 안전하지 않은 권한 (0600이어야 합니다)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "사용법: " @@ -2651,6 +2506,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2662,21 +2521,19 @@ msgstr[0] "앱 {0}개, 키 별칭 {1}개" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid})에 메타데이터가 없습니다!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}의 AndroidManifest.xml에 잘못된 날짜가 있습니다: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid}는 이름을 가지지 않습니다! 대신 애플리케이션 ID를 사용." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2697,7 +2554,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "{appid}는 없는 {name}입니다" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2738,9 +2594,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\"는 존재하지 않습니다! \"config.yml\"을 확인하세요." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2763,6 +2619,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/lv/LC_MESSAGES/fdroidserver.po b/locale/lv/LC_MESSAGES/fdroidserver.po index 383f1c9f..28da8f9b 100644 --- a/locale/lv/LC_MESSAGES/fdroidserver.po +++ b/locale/lv/LC_MESSAGES/fdroidserver.po @@ -1,20 +1,21 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. # "Coool (github.com/Coool)" , 2024. +# Edgars Andersons , 2024, 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-08-14 18:07+0000\n" -"Last-Translator: \"Coool (github.com/Coool)\" \n" +"POT-Creation-Date: 2025-03-25 11:36+0100\n" +"PO-Revision-Date: 2025-03-21 08:46+0000\n" +"Last-Translator: Edgars Andersons \n" "Language-Team: Latvian \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 == 0 || n % 100 >= 11 && n % 100 <= 19) ? 0 : ((n % 10 == 1 && n % 100 != 11) ? 1 : 2);\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -34,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Atslēgu \"isPrimary\" nevajadzētu pievienot spoguļglabātavām." + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opcijas]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request darbojas tikai ar vienu appid." + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -292,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Visām uzvednēm automātiski atbildēt ar \"Nē\"." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Visām uzvednēm automātiski atbildēt ar \"Jā\"." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -387,11 +359,13 @@ msgstr[1] "" msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -414,9 +388,13 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Iekrāsot žurnāla izvadi" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." -msgstr "" +msgstr "Ar komatu atdalītu kategoriju saraksts." #: ../fdroidserver/__main__.py #, python-format @@ -425,7 +403,11 @@ msgstr "" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "" +msgstr "Iesūtīt izmaiņas" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Jāiesūta izmaiņas, jāaizgādā tās, tad jāizveido izmaiņu pieprasījums" #: ../fdroidserver/metadata.py #, python-brace-format @@ -436,20 +418,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -469,6 +448,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -495,39 +475,44 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Izveido tukšu {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" -msgstr "" +msgstr "Izveido žurnālu mapi" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" -msgstr "" +msgstr "Izveido jaunu S3 kŗājumu: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" -msgstr "" +msgstr "Izveido izvades mapi" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" -msgstr "" +msgstr "Izveido parakstītu indeksu ar šo atslēgu (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" -msgstr "" +msgstr "Izveido pagaidu mapi" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" -msgstr "" +msgstr "Izveido neparakstītu indeksu, lai sagatavotos parakstīšanai" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" -msgstr "" +msgstr "CurrentVersionCode {cv} ir mazāks par vecāko būvējuma ierakstu {versionCode}" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" -msgstr "" +msgstr "DEBUG_KEYSTORE nav iestatīts vai vērtība ir nepilnīga" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" @@ -536,17 +521,17 @@ msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" -msgstr "" +msgstr "Izdzēš arhīvu, glabātava ir pārāk liela ({size}; pieļaujamais izmērs ir {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" -msgstr "" +msgstr "Izdzēš git-mirror vēsturi, glabātava ir pārāk liela ({size}; pieļaujamais izmērs ir {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" -msgstr "" +msgstr "Izdzēš nezināmu datni: {path}" #: ../fdroidserver/lint.py #, python-format @@ -557,11 +542,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,23 +590,22 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Lejupielādēt F-Droid.apk no spoguļserveriem, kas tīklā nopludina mazāk" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" -msgstr "" - -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "" +msgstr "Lejupielādēt pilnīgu mazu glabātavu spoguļojumu" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." -msgstr "" +msgstr "Glabātavas lejupielāde jau vienreiz neizdevās, tas atkārtoti netiks mēģināts." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" -msgstr "" +msgstr "{url} lejupielāde neizdevās. {error}" #: ../fdroidserver/metadata.py #, python-brace-format @@ -652,12 +631,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -667,6 +640,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "KĻŪDA: {key} nav derīga atslēga." + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "KĻŪDA: {key} vērtībai vajadzētu būt ar veidu \"{t}\"." + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -684,6 +677,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Vides mainīgais {{env: {var}}} nav iestatīts." + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -700,6 +702,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk nevarēja lejupielādēt ne no viena zināmā avota." + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -769,10 +775,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -804,7 +806,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -869,15 +870,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -922,6 +921,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Neņem vērā novecojušo {oldfile}, jāizmanto {newfile}." + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1007,16 +1011,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1129,6 +1129,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Spoguļglabātavas konfigurācija {url} satur \"isPrimary\" key." + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1158,51 +1163,55 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Netika atrasta neviena ierīce, kurā izpildīt `adb install`. Lūgums piespraust kādu." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." -msgstr "" +msgstr "URL nesatur pirkstu nospiedumu." #: ../fdroidserver/common.py msgid "No git submodules available" -msgstr "" +msgstr "Nav pieejams neviens git apakšmodulis" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" -msgstr "" +msgstr "Nevarēja atrast nevienu gradle projektu. Norādīt --subdir?" #: ../fdroidserver/import_subcommand.py msgid "No information found." -msgstr "" +msgstr "Informācija netika atrasta." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" -msgstr "" +msgstr "Netika atrastas atbilstošas birkas" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." -msgstr "" +msgstr "{0} netika atrasta zemākā pieļaujamā SDK versija, izmanto noklusējumu (3)." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" -msgstr "" +msgstr "Nav nepieciešams norādīt, ka lietotne ir brīva programmatūra" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" -msgstr "" +msgstr "Nav nepieciešams norādīt, ka lietotne ir paredzēta Android" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" -msgstr "" +msgstr "Nav iestatīta neviena iespēja. Jālabo config.yml, lai iestatītu vismaz vienu no šiem:" #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "" +msgstr "Nav norādīta neviena pakotne" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" -msgstr "" +msgstr "%s nav pieejams neviens parakstīts APK" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" @@ -1218,7 +1227,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1253,7 +1261,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1271,27 +1278,37 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Pieņem tikai vienas atslēgas \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" -msgstr "" +msgstr "Apstrādāt tikai lietotnes ar automātiskajiem atjauninājumiem" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1349,6 +1366,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1435,6 +1457,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Noņemt avota arhīvu un jebkādus APK, ja sekmīgi apliecināta." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1448,14 +1479,6 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1469,6 +1492,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Atkārtoti mēģina neizdevušos lejupielādi: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1476,12 +1504,17 @@ msgstr "" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "" +msgstr "Pārraksta \"{appid}\"" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1529,6 +1562,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Caurskata APK, vai ir papildu paraksta bloki." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1649,6 +1686,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Python pakotne \"qrcode\" nav uzstādīta (piemēram, `apt-get install python3-qrcode`)." + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1713,6 +1754,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1734,11 +1779,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1748,7 +1788,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1786,6 +1825,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1816,11 +1856,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1834,6 +1869,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1853,11 +1889,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1872,27 +1904,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1910,6 +1925,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,11 +1946,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1941,6 +1956,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1962,15 +1982,24 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Pārbauda pakotni {path} ar apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." -msgstr "" +msgstr "VirusTotal API atslēga nevar augšupielādēt datnes, kas ir lielākas par 32 MB. Jāizmanto {url}, lai augšupielādētu {path}." #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssebly binārā datne" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1983,6 +2012,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Vai lejupielādēt un uzstādīt F-Droid.apk ar adb? (YES/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Vai lejupielādēt lietotni(es) no f-drodi.org? (YES/no)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1995,6 +2032,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb ziņo, ka {serial} ir \"{status}\"." + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2005,33 +2047,31 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner būvēšanas rīkos {version} izlaiž APK ar nederīgiem v3 parakstiem, neņem vērā." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" -msgstr "" +msgstr "apksigner nav atrasts. Nevar parakstīt vai apliecināt mūsdienīgus APK" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" -msgstr "" +msgstr "apksigner nav atrasts, tas ir nepieciešams parakstīšanai." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2042,8 +2082,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2062,7 +2100,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2076,14 +2114,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,14 +2136,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2140,10 +2166,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2159,13 +2181,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2183,8 +2207,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2192,20 +2214,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2218,10 +2234,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2234,8 +2246,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2249,35 +2259,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2315,8 +2311,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2335,30 +2329,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2368,72 +2347,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2443,8 +2356,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2477,13 +2388,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2499,17 +2411,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2543,29 +2445,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "patiess" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" -msgstr "" +msgstr "nezināms parsētājs %(parser_name)r (izvēles: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2576,9 +2474,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2589,7 +2485,11 @@ msgstr "" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." -msgstr "" +msgstr "virustotal.com ierobežo pieprasījumus, gaida, lai mēģinātu atkārtoti..." + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "jā" #: ../fdroidserver/publish.py #, python-brace-format @@ -2603,21 +2503,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2638,7 +2536,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2679,10 +2576,10 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} ir tāds pats kā {path2}, viens no tiem ir jānoņem." #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2704,10 +2601,15 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} ir nepareizs pirkstu nospiedums ({fingerprint})." + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} nav \"atslēga: vērtība\" vārdnīca, bet gan {datatype}." #: ../fdroidserver/common.py #, python-brace-format diff --git a/locale/ml/LC_MESSAGES/fdroidserver.po b/locale/ml/LC_MESSAGES/fdroidserver.po index bb66da35..1a4cc764 100644 --- a/locale/ml/LC_MESSAGES/fdroidserver.po +++ b/locale/ml/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-70-g54bc858\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2023-06-23 14:52+0000\n" "Last-Translator: abe1242 \n" "Language-Team: Malayalam \n" @@ -39,6 +39,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" ന് ചേരുന്ന മെറ്റാഡേറ്റ ഫയൽ ലഭ്യമല്ല!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -49,11 +53,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -79,17 +78,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -105,14 +93,6 @@ msgstr "" msgid "%d problems found" msgstr "%d പ്രശ്നങ്ങൾ കണ്ടുപിടിച്ചു" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -133,13 +113,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -160,8 +133,6 @@ msgstr "config.yml ൽ 'keystorepass' കാണപ്പെടുന്നില msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -175,11 +146,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +156,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -200,13 +166,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -297,10 +265,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -327,6 +291,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -336,7 +308,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -387,16 +358,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -419,6 +397,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -432,6 +414,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -441,20 +427,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -474,6 +457,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -500,6 +484,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -562,11 +551,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -615,13 +599,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -657,12 +640,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -672,6 +649,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -689,6 +686,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -705,6 +711,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -774,10 +784,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -809,7 +815,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -874,15 +879,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -927,6 +930,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1012,16 +1020,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1134,6 +1138,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1163,6 +1172,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1223,7 +1236,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1258,7 +1270,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1276,13 +1287,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1293,10 +1318,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1354,6 +1375,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1440,6 +1466,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1453,12 +1488,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1474,6 +1506,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1487,6 +1524,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1534,6 +1576,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1654,6 +1700,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1721,6 +1771,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1742,11 +1796,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1756,7 +1805,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1794,6 +1842,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1824,11 +1873,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1842,6 +1886,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1861,11 +1906,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1880,27 +1921,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1918,6 +1942,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1934,11 +1963,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1949,6 +1973,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1970,15 +1999,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1991,6 +2033,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2003,6 +2053,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2013,18 +2068,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2035,11 +2086,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2050,8 +2103,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2070,7 +2121,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2084,14 +2135,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2110,14 +2157,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "സങ്കീർണ്ണമായ" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2148,10 +2187,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2167,13 +2202,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2191,8 +2228,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2200,20 +2235,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2226,10 +2255,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2242,8 +2267,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2257,35 +2280,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2323,8 +2332,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2343,30 +2350,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2376,72 +2368,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2451,8 +2377,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2485,13 +2409,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2507,17 +2432,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2551,29 +2466,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2584,9 +2495,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2599,6 +2508,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2611,21 +2524,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2646,7 +2557,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2687,9 +2597,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2712,6 +2622,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/nb_NO/LC_MESSAGES/fdroidserver.po b/locale/nb_NO/LC_MESSAGES/fdroidserver.po index 5c302b21..8ba73029 100644 --- a/locale/nb_NO/LC_MESSAGES/fdroidserver.po +++ b/locale/nb_NO/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.8-74-ga380b9f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2022-09-06 14:30+0000\n" "Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Norwegian Bokmål \n" @@ -41,6 +41,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" har ingen samsvarende metadatafil!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, fuzzy, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -51,11 +55,6 @@ msgstr "Rotmappen for local_copy_dir \"{path}\" finnes ikke." msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' er allerede installert på {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" inneholder utdatert {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -81,17 +80,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" er ikke en gyldig nettadresse." -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s-valget krever %(number)d argument" -msgstr[1] "%(option)s-valget krever %(number)d argumenter" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +95,6 @@ msgstr "" msgid "%d problems found" msgstr "%d problemer funnet" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [valg]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +115,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "%s er ikke et godtatt bygge-felt" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s-valget tar ikke en verdi" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' ble ikke funnet i config.yml!" @@ -162,8 +135,6 @@ msgstr "'keystorepass' ble ikke funnet i config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' ble ikke funnet i config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "'required' is an invalid argument for positionals" @@ -179,11 +150,6 @@ msgstr "'sdk_path' ble ikke funnet i config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' er for gammel, fdroid krever build-tools-{version} eller nyere." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' vil bli utført i tilfeldig rekkefølge. Bruk () eller [] -parenteser hvis rekkefølgen er viktig." - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -194,7 +160,7 @@ msgstr "\"{path}\" klarte ikke å kjøre." msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "\"{value}\" er ikke et gyldig {field} i {appid}. Mønster for regulært uttrykk: {pattern}" @@ -204,13 +170,15 @@ msgstr "\"{value}\" er ikke et gyldig {field} i {appid}. Mønster for regulært msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "\"{value}\" er ikke et gyldig {field} i {appid}. Mønster for regulært uttrykk: {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, fuzzy, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…oppdateringssjekk mislyktes for {appid}: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() udefinert" @@ -303,10 +271,6 @@ msgstr "Fant ikke Android-SDK-verktøyet {cmd}!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -333,6 +297,14 @@ msgstr "Pakker {apkfilename} med ugyldig signatur." msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -342,7 +314,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Grunnettadresse å speile, kan inkludere indekssigneringsnøkkelen ved bruk av spørreingsstrengen: ?fingerpring=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -395,16 +366,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Kan ikke bygge som følge av {} feil under skanning" msgstr[1] "Kan ikke bygge som følge av {} feiler under skanning" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Klarte ikke å lese {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, fuzzy, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Kan ikke lese \"{path}\"." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorien '%s' er ikke gyldig" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategoreier ikke satt" @@ -427,6 +405,10 @@ msgstr "Sjekker arkivering for {appid} - APK-er:{integer}, keepversions:{keep}, msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Ren oppdatering, ikke bruk hurtiglager, behandle alle APK-er på ny" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kommainndelt liste over kategorier." @@ -440,6 +422,10 @@ msgstr "Kommandoen \"%s\" gjenkjennes ikke.\n" msgid "Commit changes" msgstr "Send inn endringer" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -449,21 +435,18 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumenter i konflikt: '--verbose' og '--quiet' kan ikke angis samtidig." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Filer i konflikt med hverandre. Bruker {newfile}, ser bort fra {oldfile}." - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Fant ikke \"{command}\" på ditt system" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version code" msgstr "Fant ikke seneste versjonskode" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Could not find latest version name" @@ -484,6 +467,7 @@ msgstr "Kunne ikke åpne APK {path} for analyse: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Kunne ikke fortolke størrelse \"{size}\", feil type \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py #, fuzzy msgid "Couldn't find Application ID" @@ -512,6 +496,11 @@ msgstr "Opprettet ny beholder \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Oppretter \"{path}\" for oppsett av s3cmd." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Leser '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Oppretter loggingsmappe" @@ -577,11 +566,6 @@ msgstr "Beskrivelsen \"%s\" er bare programsammendraget" msgid "Description has a duplicate line" msgstr "Beskrivelsen har repetert linje" -#: ../fdroidserver/lint.py -#, fuzzy, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Beskrivelsen har en liste (%s), men er ikke punktvis (*) eller nummerert (#)" - #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -632,15 +616,14 @@ msgstr "Ikke gjenoppfrisk pakkebrønnen, nyttig under testing av et bygg uten å msgid "Don't use rsync checksums" msgstr "Ikke bruk rsync-sjekksummer" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Last ned fullstendige speilinger av små pakkebrønner" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Laster ned %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Nedlasting av pakkebrønn mislyktes én gang, prøver ikke igjen." @@ -675,15 +658,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "Feil: «server»-underkommandoen har blitt fjernet. Bruk «depoloy»." -#: ../fdroidserver/mirror.py -#, fuzzy -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"Feil: Denne kommandoen bør aldri brukes til å speile f-droid.org.\n" -"Et helt speil av f-droid.org krever mer enn 200GB." - #: ../fdroidserver/nightly.py #, fuzzy msgid "ERROR: unsupported CI type, patches welcome!" @@ -699,6 +673,16 @@ msgstr "" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -723,6 +707,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Miljøvariabelen {var} fra {configname} er ikke satt!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Miljøvariabelen {var} fra {configname} er ikke satt!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -744,6 +733,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "Hent ut signaturer fra APK-er" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "Failed copying {path}: {error}" @@ -814,11 +807,6 @@ msgstr "En fil ble borte mens den ble behandlet: {path}" msgid "Finished" msgstr "Fullført" -#: ../fdroidserver/lint.py -#, fuzzy -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flatter-donasjonsmetoder hører hjemme i FlattrID-flagget" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Forbudte HTML-tagger" @@ -851,7 +839,6 @@ msgstr "Fant feilaktig kronerullingsfil «{path}» for «{name}»:" msgid "Found invalid appids in arguments" msgstr "Fant ugyldige App-ID-er i argumenter" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, fuzzy msgid "Found invalid versionCodes for some apps" @@ -919,16 +906,13 @@ msgstr "Git-tømming mislyktes" msgid "Git fetch failed" msgstr "Git-innhenting mislyktes" -#: ../fdroidserver/common.py -#, fuzzy -msgid "Git prune failed" -msgstr "Git-tilbakestilling mislyktes" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, fuzzy, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git set-head annensteds hen mislyktes: «%s»" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git-tilbakestilling mislyktes" @@ -975,6 +959,11 @@ msgstr "Ser bort fra FUNDING.yml-oppføring som er lengre enn 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} er avleggs, bruk {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorerte pakke uten metadata: " @@ -1063,16 +1052,12 @@ msgstr "Ugyldig VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Ugyldig VercodeOperation: {field}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Ugyldig program-ID {appid}" -#: ../fdroidserver/metadata.py -#, fuzzy, python-format -msgid "Invalid boolean '%s'" -msgstr "Ugyldig boolsk uttrykk \"%s\"" - #: ../fdroidserver/lint.py #, fuzzy msgid "Invalid bulleted list" @@ -1193,6 +1178,11 @@ msgstr "Feilaktig innskrevet serverwebroot-linje:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Avspeil hele pakkebrønnen og arkivet, alle filtyper." @@ -1222,6 +1212,10 @@ msgstr "Fant ingen Android-SDK." msgid "No attached devices found" msgstr "Fant ingen tilknyttede enheter" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Inget fingeravtrykk i nettadresse." @@ -1285,7 +1279,6 @@ msgstr "Ingen signeringssertifikater funnet i {path}" msgid "No such package: %s" msgstr "Ingen slik pakke: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1323,7 +1316,6 @@ msgstr "Ingenting å gjøre for {appid}." msgid "Now set these in config.yml:" msgstr "Nå må du sette disse i config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1342,26 +1334,28 @@ msgstr "OBB-pakkenavn samsvarer ikke med noen støttet APK:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Frakoblet maskin. Hopper over Git-avspeilingsgenerering til «fdroid deploy»" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Kun PNG og JPEG støttes for grafikk, fant: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Kun skriv ut forskjeller vis-a-vis Play-butikken" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py #, fuzzy @@ -1373,10 +1367,6 @@ msgstr "Behandle kun programmer som har auto-oppdateringer" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Flatter-donasjonsmetoder hører hjemme i FlattrID-flagget" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Valg" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Skriv ut JSON-rapport til fil navngitt etter APK-en." @@ -1438,6 +1428,11 @@ msgstr "Sti til nøkkellager for pakkebrønnssigneringsnøkkel" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Skriv den hemmelige variabelen til terminalen for enkel kopiering/innliming." +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1525,6 +1520,15 @@ msgstr "Behandler {apkfilename}" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Fjerner angitte filer" @@ -1538,15 +1542,10 @@ msgstr "Fjerner {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Gi nytt navn til APK-filer som ikke samsvarer med package.name_123.apk" -#: ../fdroidserver/checkupdates.py -#, fuzzy -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "RepoTrunk-oppdateringsmodus gir kun mening i Git-SVN-kodelager" - -#: ../fdroidserver/build.py -#, fuzzy -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Tilbakestill og opprett en helt ny byggtjener, selv når den eksisterende later til å være i orden." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1562,6 +1561,11 @@ msgstr "Endre størrelse på alle ikoner som overstiger maksimal pikselantall og msgid "Restrict output to warnings and errors" msgstr "Begrens utdata til advarsler og feil" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Skriv om alle metadatafilene" @@ -1628,6 +1632,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Skanner fant {} problem" msgstr[1] "Skanner fant {} problemer" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." @@ -1752,6 +1760,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Testmodus - putt utdata kun i tmp-mappe, og alltid bygg, selv når utdataen finnes allerede." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1848,11 +1860,6 @@ msgstr "Ugyldig lisenstagg \"%s\". Kun bruk de som er å finne på https://spdx. msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1862,7 +1869,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Ukjent unntak møtt!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1901,6 +1907,7 @@ msgstr "Ugjenkjent felt «{fieldname}» i «{path}»" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Ugjenkjent felt «{build_flag}» i «{path}»" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1931,11 +1938,6 @@ msgstr "Ubrukt fil i %s" msgid "Unused scanignore path: %s" msgstr "Ubrukt fil i %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Pakker ut til %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Oppdater repo informasjon for nye pakker" @@ -1949,6 +1951,7 @@ msgstr "Oppdater binær gjennomsiktighetslogg for en URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData har ugyldig nettadresse: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1968,11 +1971,7 @@ msgstr "UpdateCheckData er ikke en gyldig nettadresse: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" @@ -1988,28 +1987,11 @@ msgstr "Laster opp {apkfilename} to androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Behandler {apkfilename}" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Bruk" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Bruk: %s\n" - #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Bruk /HEAD istedenfor /master for å peke til en fil i forvalgt forgrening" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Bruk /HEAD istedenfor /master for å peke til en fil i forvalgt forgrening" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Bruk `fdroid update -c` for å opprette den." @@ -2052,11 +2034,6 @@ msgstr "Bruker APK Signature v2" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Bruker Java sin jarsigner, ikke anbefalt for bekreftelse av APK-er. Bruk apksigner." -#: ../fdroidserver/common.py -#, fuzzy, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Bruker Androguard fra \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2093,15 +2070,28 @@ msgstr "Bekreft integriteten til nedlastede pakker" msgid "Verifying index signature:" msgstr "Bekrefter indekssignatur:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API-nøkkel kan ikke laste opp filer større enn 32 MB, bruk {url} for å laste opp {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Advar om mulige metadata-feil" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py #, fuzzy msgid "When configured for signed indexes, create only unsigned indexes at this stage" @@ -2115,6 +2105,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 \"Entydig navn\" (DN) brukt ved generering av nøkler." @@ -2128,6 +2126,11 @@ msgstr "Du kan bruke ANDROID_HOME til å sette stien til din SDK, f.eks:" msgid "ZIP file archive" msgstr "ZIP-filarkiv" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, fuzzy, python-brace-format msgid "adding IdentityFile to {path}" @@ -2138,19 +2141,15 @@ msgstr "legger til IdentityFile i {path}" msgid "adding to {name}: {path}" msgstr "legger til i {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "tvetydig valg: %(option)s kan passe overens med %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "tvetydig valg: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py #, fuzzy @@ -2161,12 +2160,14 @@ msgstr "fant ikke apksigner (som kreves for signering)." msgid "apksigner not found, it's required for signing!" msgstr "fant ikke apksigner (som kreves for signering)." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "App-ID å sjekke for oppdateringer" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2178,8 +2179,6 @@ msgstr "App-ID med valgfri versionCode, i formen APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2199,7 +2198,7 @@ msgstr "forsøker naken SSH-tilkobling for å teste utrullingsnøkkel:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "kan ikke åpne '%(filename)s': %(error)s" @@ -2213,14 +2212,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "Finner ikke AppID for {path}." -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "kan ikke ha flere underfortolkningsargumenter" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2240,15 +2235,6 @@ msgstr "kloner {url}" msgid "commands from plugin modules:" msgstr "kommandoer fra programtilleggsmodulene:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, fuzzy -msgid "complex" -msgstr "kompleks" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2279,10 +2265,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2307,8 +2289,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2328,8 +2308,6 @@ msgstr "Stripper mystisk signatur fra {apkfilename}" msgid "executable binary, possibly code" msgstr "kjørbar binærfil, muligens kode" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2337,20 +2315,14 @@ msgid_plural "expected %s arguments" msgstr[0] "forventet %s argument" msgstr[1] "forventet %s argumenter" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "forventet minst ett argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "forventet på det meste ett argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "forventet ett argument" @@ -2364,11 +2336,6 @@ msgstr "bruk: fdroid [-h|--help|--version] []" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -#, fuzzy -msgid "floating-point" -msgstr "flyttall" - #: ../fdroidserver/metadata.py #, fuzzy msgid "force metadata errors (default) to be warnings, or to be ignored." @@ -2384,8 +2351,6 @@ msgstr "\"git svn clone\" mislyktes" msgid "gzip file archive" msgstr ".gzip-filarkiv" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "ignored explicit argument %r" @@ -2400,35 +2365,21 @@ msgstr "index-v1 må ha en signatur, bruk `fdroid signindex` for å opprette den msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 må ha en signatur, bruk `fdroid signindex` for å opprette den." -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "heltall" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "invalid %(type)s value: %(value)r" msgstr "ugydlig %(type)s verdi: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "ugyldig valg: %(value)r (velg fra %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "ugyldig conflict_resolution-verdi: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2466,8 +2417,6 @@ msgstr "speilet \"%s\" slutter ikke med \"fdroid\"." msgid "mirrors set twice, in config.yml and {path}!" msgstr "Nå må du sette disse i config.yml:" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "gjensidig utelukkende argumenter må være valgfrie" @@ -2486,31 +2435,16 @@ msgstr "Behandler {appid}" msgid "no APK supplied" msgstr "ingen APK angitt" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "Inget slikt valg: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "ingen versjonsinfo funnet!" - #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "ingen versjonsinfo funnet!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "not allowed with argument %s" msgstr "ikke tillatt med argument %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, fuzzy, python-format msgid "one of the arguments %s is required" @@ -2521,72 +2455,6 @@ msgstr "ett av argumentene %s kreves" msgid "only accepts strings, lists, and tuples" msgstr "kun godta strenger, lister, og forekomster" -#: ../fdroidserver/install.py -#, fuzzy, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "valg %s: Hvis du virkelig ønsker å installere alle signerte programmer, bruk -all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "valg %s: ugyldig %s verdi: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, fuzzy, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "valg %s: ugyldig valg: %r (velg mellom %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "Kommandoen \"-%s\" gjenkjennes ikke" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "valg -%s krever et argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, fuzzy, python-format -msgid "option --%s must not have an argument" -msgstr "valget --%s kan ikke ha et argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, fuzzy, python-format -msgid "option --%s not a unique prefix" -msgstr "valget --%s er ikke et unikt prefiks" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "Kommandoen \"--%s\" gjenkjennes ikke" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "valget --%s krever et argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "valgfrie argumenter" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2597,8 +2465,6 @@ msgstr "Valg" msgid "overwriting existing {path}" msgstr "overskriver eksisterende {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "Posisjonelle argumenter" @@ -2631,11 +2497,6 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -#, fuzzy -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml er ikke installert. Kan ikke skrive metadata." - #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2660,17 +2521,7 @@ msgstr "local_copy_dir slutter ikke med \"fdroid\", kanskje du mente: \"{path}\" msgid "shared library" msgstr "delt bibliotek" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "vis programmets versjonsnummer og avslutt" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "vis denne hjelpemeldingen og avslutt" @@ -2707,29 +2558,25 @@ msgstr "statisk bibliotek" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "følgende argumenter kreves: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "uventet valgstreng: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "ukjent fortolker %(parser_name)r (valg: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2740,9 +2587,7 @@ msgstr "ugjengkjente argumenter: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "utrygge tilganger for '{config_file}' (skal være 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "bruk: " @@ -2755,6 +2600,10 @@ msgstr "bruker Apache-libcloud for å synkronisere med {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2767,21 +2616,19 @@ msgstr[1] "{0} programmer, {1} nøkkelalias" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) mangler metadata." -#: ../fdroidserver/update.py -#, fuzzy, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} har flere {name}-filer, ser ut til å være en hovednøkkelutnyttelse." - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} sin AndroidManifest.xml har en feilaktig dato: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} mangler navn. Bruker pakkenavn istedenfor." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2802,7 +2649,6 @@ msgstr "{appid} har både APK-er og filer: {files}" msgid "{appid} is missing {name}" msgstr "{appid} mangler {name}." -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, fuzzy, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2843,10 +2689,10 @@ msgstr "{file} er tom eller skadet!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} «{section}/icons/{path}» finnes ikke. Rett det i config.yml." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} er avleggs, bruk {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2868,6 +2714,11 @@ msgstr "{path} har feilaktig filsignatur \"{pattern}\", mulig Janus-utnyttelse." msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/nl/LC_MESSAGES/fdroidserver.po b/locale/nl/LC_MESSAGES/fdroidserver.po index d78f7292..f5dbfba0 100644 --- a/locale/nl/LC_MESSAGES/fdroidserver.po +++ b/locale/nl/LC_MESSAGES/fdroidserver.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-01-03 09:07+0000\n" "Last-Translator: Issa1553 \n" "Language-Team: Dutch \n" @@ -41,6 +41,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" heeft geen overeenkomend metadatabestand!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -51,11 +55,6 @@ msgstr "\"local_copy_dir\" {path} bestaat niet!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" is al geïnstalleerd op {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" bevat verouderde {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -81,17 +80,6 @@ msgstr "\"{path}\" is ondertekend door een sleutel die niet is toegestaan:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" is geen geldige URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s optie vereist %(number)d argument" -msgstr[1] "%(option)s optie vereist %(number)d argumenten" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +95,6 @@ msgstr "" msgid "%d problems found" msgstr "%d problemen gevonden" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opties]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +115,6 @@ msgstr "%s heeft slechte SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s is geen geaccepteerd build-veld" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s optie heeft geen waarde" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' niet gevonden in config.yml!" @@ -162,8 +135,6 @@ msgstr "'keystorepass' niet gevonden in config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' niet gevonden in config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' is een ongeldig argument voor positionelen" @@ -177,11 +148,6 @@ msgstr "'sdk_path' niet ingesteld in config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt}' is te oud, fdroid vereist build-tools-{version} of nieuwer!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' zal in willekeurige volgorde staan! Gebruik () of [] haakjes als de volgorde belangrijk is!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -192,7 +158,7 @@ msgstr "{path}' is niet uitgevoerd!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' heeft ongeldig formaat, het zou een woordenboek moeten zijn!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "{value}' is geen geldig {field} in {appid}. Regex patroon: {pattern}" @@ -202,13 +168,15 @@ msgstr "{value}' is geen geldig {field} in {appid}. Regex patroon: {pattern}" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "{value}' is geen geldig {field}, moet {pattern} zijn" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate mislukt voor {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() niet gedefinieerd" @@ -299,13 +267,8 @@ msgstr "Android SDK-tool {cmd} niet gevonden!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "App heeft binaries maar heeft geen overeenkomstige ToegestaneAPKOndertekenSleutels om certificaat te pinnen." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "App heeft GeenBronSinds of Archiefbeleid \"0 versies\" maar AutoUpdateModus of UpdateCheckModus zijn niet Geen" - #: ../fdroidserver/lint.py #, fuzzy -#| msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "App heeft GeenBronSinds of Archiefbeleid \"0 versies\" maar AutoUpdateModus of UpdateCheckModus zijn niet Geen" @@ -331,6 +294,14 @@ msgstr "Archivering {apkfilename} met ongeldige handtekening!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateModus met UpdateCheckModus: HTTP moet een patroon hebben." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -340,7 +311,6 @@ msgstr "Slecht entry type \"{mirrortype}\" in spiegels configuratie: {mirror}" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -391,16 +361,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -423,6 +400,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -436,6 +417,10 @@ msgstr "Opdracht '%s' wordt niet herkend.\n" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -445,20 +430,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -478,6 +460,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -504,6 +487,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -566,11 +554,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -619,13 +602,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -661,12 +643,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -676,6 +652,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -693,6 +689,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -709,6 +714,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -778,10 +787,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -813,7 +818,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -878,15 +882,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -931,6 +933,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1016,16 +1023,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1138,6 +1141,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1167,6 +1175,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1227,7 +1239,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1262,7 +1273,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1280,13 +1290,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1297,10 +1321,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opties" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1358,6 +1378,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1444,6 +1469,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1457,12 +1491,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Hernoem APK-bestanden die niet overeenkomen met pakket.naam_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1478,6 +1509,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Herschrijf alle metadatabestanden" @@ -1491,6 +1527,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1538,6 +1579,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1658,6 +1703,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1722,6 +1771,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1743,11 +1796,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1757,7 +1805,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Onbekende uitzondering gevonden!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1795,6 +1842,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1825,11 +1873,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Repo informatie bijwerken voor nieuwe pakketten" @@ -1843,6 +1886,7 @@ msgstr "Het binaire transparantielogboek bijwerken voor een URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1862,11 +1906,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1881,27 +1921,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Gebruik" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Gebruik: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1919,6 +1942,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1935,11 +1963,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1950,6 +1973,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1971,15 +1999,28 @@ msgstr "De integriteit van gedownloade pakketten controleren" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Waarschuwen voor mogelijke metadata fouten" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1992,6 +2033,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -2004,6 +2053,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2014,19 +2068,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "dubbelzinnige optie: %(option)s kan overeenkomen met %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "dubbelzinnige optie: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2036,11 +2086,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2051,8 +2103,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2071,7 +2121,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2085,14 +2135,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2111,14 +2157,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complex" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2149,10 +2187,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2168,13 +2202,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2192,8 +2228,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2201,20 +2235,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2227,10 +2255,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2243,8 +2267,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2258,35 +2280,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2324,8 +2332,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2344,30 +2350,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "geen dergelijke optie: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2377,72 +2368,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "optie -%s wordt niet herkend" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "optie -%s vereist een argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "optie --%s mag geen argument hebben" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "optie --%s geen uniek voorvoegsel" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "optie --%s wordt niet herkend" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "optie --%s vereist argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "optionele argumenten" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2453,8 +2378,6 @@ msgstr "Opties" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "positionele argumenten" @@ -2487,13 +2410,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2509,17 +2433,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "toon versienummer van programma en sluit af" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "toon dit hulpbericht en sluit af" @@ -2553,29 +2467,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "de volgende argumenten zijn vereist: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "onverwachte optiestring: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2586,9 +2496,7 @@ msgstr "onherkende argumenten: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "Onveilige rechten op '{config_file}' (zou 0600 moeten zijn)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "gebruik: " @@ -2601,6 +2509,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2613,21 +2525,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2648,7 +2558,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2689,9 +2598,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2714,6 +2623,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" @@ -2721,7 +2635,6 @@ msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format -#| msgid "'sdk_path' not set in config.yml!" msgid "{path} is not a standard config file!" msgstr "'sdk_path' niet ingesteld in config.yml!" diff --git a/locale/nn/LC_MESSAGES/fdroidserver.po b/locale/nn/LC_MESSAGES/fdroidserver.po new file mode 100644 index 00000000..5db8fd94 --- /dev/null +++ b/locale/nn/LC_MESSAGES/fdroidserver.po @@ -0,0 +1,2682 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# Bård Sigurd Møller , 2024. +msgid "" +msgstr "" +"Project-Id-Version: fdroidserver 2.3.0-3-g4ba7b5c9\n" +"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2024-11-26 10:54+0000\n" +"Last-Translator: Bård Sigurd Møller \n" +"Language-Team: Norwegian Nynorsk \n" +"Language: nn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.9-dev\n" + +#: ../fdroidserver/nightly.py +msgid "" +"\n" +"SSH public key to be used as deploy key:" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "" +"\n" +"{path} encoded for the DEBUG_KEYSTORE secret variable:" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "\"%s/\" has no matching metadata file!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "\"local_copy_dir\" {path} does not exist!" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" contains recent {name} ({version})" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "\"{path}\" exists but s3cmd is not installed!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" is signed by a key that is not allowed:" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "\"{url}\" is not a valid URL!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%(prog)s: error: %(message)s\n" +msgstr "%(prog)s: feil: %(message)s\n" + +#: ../fdroidserver/publish.py +#, python-format +msgid "%d APKs failed to be signed or verified!" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "%d problems found" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%r is not callable" +msgstr "" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s did not produce a dict!" +msgstr "" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s has bad SHA-256: %s" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "%s is not an accepted build field" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keypass' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystore' is NONE and 'smartcardoptions' is blank!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystore' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystorepass' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'repo_keyalias' not found in config.yml!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "'required' is an invalid argument for positionals" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'sdk_path' not set in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{path}' failed to execute!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{path}' has invalid format, it should be a dictionary!" +msgstr "" + +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field}, should be {pattern}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "...checkupdate failed for {appid} : {error}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid ".__call__() not defined" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "/issues is missing" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "A URL is required as an argument!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "APK signatures have different certificates in {path}:" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Add PGP signatures using GnuPG for packages in repo" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Add a repo signing key to an unsigned repo" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Add skeleton metadata files for APKs that are missing them" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Adding new repo for only {name}" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Alias of the repo signing key in the keystore" +msgstr "" + +#: ../fdroidserver/build.py +msgid "AllowedAPKSigningKeys missing but reference binary supplied" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Allows a different revision (or git branch) to be specified for the initial import" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Also mirror the full archive section" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Also warn about formatting issues, like rewritemeta -l" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android AAR library" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android APK file" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android DEX code" +msgstr "" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Android SDK not found at {path}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' does not exist!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' is not a directory!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK tool {cmd} not found!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "App is in '{repo}' but has a link to {url}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Appending .git is not necessary" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Archiving {apkfilename} with invalid signature!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in srclib '{srclib}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Broken symlink: {path}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Build a package from source" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Build all applications available" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Build generated by `fdroid import` - remove disable line once ready" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Build metadata git repo has uncommited changes!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Build only the latest version of each package" +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "Built repo based in \"%s\" with this config:" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Can't auto-update app with no CurrentVersionCode" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Can't build due to {} error while scanning" +msgid_plural "Can't build due to {} errors while scanning" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Cannot rewrite \"{path}\"" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +#, python-format +msgid "Categories '%s' is not valid" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +msgid "Categories are not set" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Category \"{category}\" defined but not used for any apps!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Check for updates to applications" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Clean update - don't uses caches, reprocess all APKs" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Comma separated list of categories." +msgstr "" + +#: ../fdroidserver/__main__.py +#, python-format +msgid "Command '%s' not recognised.\n" +msgstr "Kommandoen '%s' er ikkje gjenkjent\n" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Conflicting \"{field}\" definitions between .yml and localized files:" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not find '{command}' on your system" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version code" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version name" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not find {path} to remove it" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not open APK {path} for analysis: " +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not parse size \"{size}\", wrong type \"{type}\"" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/import_subcommand.py +msgid "Couldn't find Application ID" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find any version information" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find package ID" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Cowardily refusing to overwrite existing signing key setup!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Created new container \"{name}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating \"{path}\" for configuring s3cmd." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "Creating log directory" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating new S3 bucket: {url}" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "Creating output directory" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Creating signed index with this key (SHA256):" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "Creating temporary directory" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Creating unsigned index in preparation for signing" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "DEBUG_KEYSTORE is not set or the value is incomplete" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Delete APKs and/or OBBs without metadata from the repo" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting archive, repo is too big ({size} max {limit})" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Deleting unknown file: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Description '%s' is just the app's summary" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Description has a duplicate line" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Description of length {length} is over the {limit} char limit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Did you mean config/{name}.yml?" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Did you mean {code}?" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Do not add 'disable:' to the generated build entries" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Do not deploy the new files to the repo" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Do not include \"{path}\" in URL!" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Do not prompt for Android SDK path, just fail" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Do not remove the private keys generated from the keystore" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Don't create a source tarball, useful when testing a build" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Don't refresh the repository, useful when testing a build with no internet connection" +msgstr "" + +#: ../fdroidserver/deploy.py ../fdroidserver/nightly.py +msgid "Don't use rsync checksums" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Downloading the repository already failed once, not trying again." +msgstr "" + +#: ../fdroidserver/verify.py +#, python-brace-format +msgid "Downloading {url} failed. {error}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Duplicate Anti-Feature declaration at {path} was ignored!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "Duplicate entry \"%s\" in mirrors config!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Duplicate link in '{field}': {url}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "ERROR: %(message)s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "ERROR: unsupported CI type, patches welcome!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-format +msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + +#: ../fdroidserver/__main__.py +#, python-brace-format +msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"Enter the path to the Android SDK (%s) here:\n" +"> " +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {var} from {configname} is not set!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Error while getting repo address" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Exit with a non-zero code if problems were found" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Extract application metadata from a source repository" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Extract signatures from APKs" +msgstr "" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed copying {path}: {error}" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Failed fetching signatures for '{apkfilename}': {error}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed reading {path}: {error}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed resizing {path}: {error}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Failed to create S3 bucket: {url}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, deleting {path}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, skipping {path}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Failed to get APK signing key fingerprint" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Failed to install '{apkfilename}' on {dev}: {error}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Failed to sign application" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Fetched buildserverid from VM: {buildserverid}" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "File disappeared while processing it: {path}" +msgstr "" + +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py +#: ../fdroidserver/update.py +msgid "Finished" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Forbidden HTML tags" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Force halting build after {0} sec timeout!" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Force scan of disabled apps and builds." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found bad funding file \"{path}\" for \"{name}\":" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found invalid appids in arguments" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found invalid versionCodes for some apps" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Found multiple JAR Signature Block Files in {path}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found multiple Signer Certificates!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Found multiple metadata files for {appid}" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Found multiple signing certificates for repository." +msgstr "" + +#: ../fdroidserver/index.py +msgid "Found no signing certificates for repository." +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Found non-file at %s" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Found {apkfilename} at {url}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} problems in {filename}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} warnings in {filename}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Generated skeleton metadata for {appid}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "Git checkout of '%s' failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git clean failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git fetch failed" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +#, python-format +msgid "Git remote set-head failed: \"%s\"" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Git reset failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule deinit failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule sync failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule update failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "HTTPS must be used with Subversion URLs!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "If a git mirror gets to big, allow the archive to be deleted" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "If this upload fails, try manually uploading to {url}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." +msgstr "" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring FUNDING.yml entry longer than 2048: %s" +msgstr "" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring bad element in manifest: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Ignoring package without metadata: " +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Ignoring stale cache data for {apkfilename}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Include APKs that are signed with disabled algorithms like MD5" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the PGP signature .asc files in the mirror" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the build logs in the mirror" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the source tarballs in the mirror" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Including metadata from %s@%s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Including metadata from {path}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Initialising submodules" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Install all signed applications available" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Install built packages on devices" +msgstr "" + +#: ../fdroidserver/install.py +#, python-format +msgid "Installing %s..." +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Installing '{apkfilename}' on {dev}..." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Interact with the repo HTTP server" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Invalid APK" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid AutoUpdateMode: {mode}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid UpdateCheckMode: {mode}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid VercodeOperation: {field}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Invalid VercodeOperation: {invalid_ops}" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid application ID {appid}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Invalid bulleted list" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "Invalid name for published file: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid ndk: entry in build: \"{ndk}\"" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid redirect to non-HTTPS: {before} -> {after} " +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid scrlib metadata: '{file}' does not exist" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: could not parse '{file}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature failed to verify: {path}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature verified: {path}" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Java JAR file" +msgstr "" + +#: ../fdroidserver/mirror.py ../fdroidserver/publish.py +#: ../fdroidserver/update.py +msgid "Java JDK not found! Install in standard location or set java_paths!" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Java compiled class" +msgstr "" + +#: ../fdroidserver/signindex.py +msgid "Java jarsigner not found! Install in standard location or set java_paths!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Javascript in HTML src attributes" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Keeping failed build \"{apkfilename}\"" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Keystore for signing key:\t" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Known debug key is used in AllowedAPKSigningKeys: " +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Liberapay donation methods belong in the Liberapay: field" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +msgid "List files that would be reformatted (dry run)" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Locale included in f-droid.org URL" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Make the build stop on exceptions" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Malformed repository mirrors." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Malformed serverwebroot line:" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Max recursion depth in ZIP file reached: %s" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Mirror the full repo and archive, all file types." +msgstr "" + +#: ../fdroidserver/gpgsign.py +msgid "Missing output directory" +msgstr "" + +#: ../fdroidserver/metadata.py +msgid "Moving Anti-Features declarations to localized files:" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" +msgstr "" + +#: ../fdroidserver/verify.py +#, python-format +msgid "No APK for package: %s" +msgstr "" + +#: ../fdroidserver/common.py +msgid "No Android SDK found!" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No attached devices found" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + +#: ../fdroidserver/index.py +msgid "No fingerprint in URL." +msgstr "" + +#: ../fdroidserver/common.py +msgid "No git submodules available" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "No gradle project could be found. Specify --subdir?" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "No information found." +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "No matching tags found" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "No minimum SDK version found in {0}, using default (3)." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is Free Software" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is for Android" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "No option set! Edit your config.yml to set at least one of these:" +msgstr "" + +#: ../fdroidserver/common.py +msgid "No packages specified" +msgstr "" + +#: ../fdroidserver/install.py +#, python-format +msgid "No signed APK available for %s" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No signed output directory - nothing to do" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No signing certificates found in {path}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "No such package: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No such versionCode {versionCode} for app {appid}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "No tags found" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "No unsigned directory - nothing to do" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "No version information could be found." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Not a valid size definition: \"{}\"" +msgstr "" + +#: ../fdroidserver/signindex.py +msgid "Nothing to do" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Nothing to do for {appid}." +msgstr "" + +#: ../fdroidserver/init.py +msgid "Now set these in config.yml:" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Only PNG and JPEG are supported for graphics, found: {path}" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Only process apps with auto-updates" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "OpenCollective donation methods belong in the OpenCollective: field" +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Output JSON report to file named after APK." +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Output JSON to stdout." +msgstr "" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py +#: ../fdroidserver/publish.py ../fdroidserver/signindex.py +#: ../fdroidserver/update.py +msgid "Outputting JSON" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Overall license of the project." +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "Package \"{appid}\" already exists" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Parsing manifest at '{path}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Password required with username" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Path to main Android project subdirectory, if not in root." +msgstr "" + +#: ../fdroidserver/init.py +msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "Path to the git repo to use as the log" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Path to the keystore for the repo signing key" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Print the secret variable to the terminal for easy copy/paste" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Problem with ZIP file: %s, error %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Problem with xml at '{path}'" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Process auto-updates" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/update.py +#, python-brace-format +msgid "Processing {apkfilename}" +msgstr "" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py +#, python-brace-format +msgid "Processing {appid}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Produce human-readable XML/JSON for index files" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Project URL to import from." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Punctuation should be avoided" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "Push the log to this git remote repository" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing binary transparency log to {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Pushing to remote server failed!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing to {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Quickly start a new repository" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Read all the metadata files and exit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading '{config_file}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Reading {apkfilename} from cache" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Removing specified files" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Removing {path}\"" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Rename APK files that do not match package.name_123.apk" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Resigning {apkfilename} with provided debug.keystore" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Resize all the icons exceeding the max pixel size and exit" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Restrict output to warnings and errors" +msgstr "" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Rewrite all the metadata files" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Rewriting '{appid}'" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Run on git repo that has uncommitted changes" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Run rewritemeta to fix formatting" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Running first pass with MD5 checking disabled" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Running wget in {path}" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "SHA-256 of {url} does not match entry!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Scan the resulting APK(s) for known non-free classes." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Scan the source code of a package" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {apk}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:{versionCode}:" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Scanner found {} problem" +msgid_plural "Scanner found {} problems" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK with dexdump for known non-free classes." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Set NDK {release} ({version}) up" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Set clock to that time using:" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Set maximum releases in repo before older ones are archived" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Set open file limit to {integer}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Set up an app build for a nightly build repo" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Setting open file limit failed: " +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Setting {0} sec timeout for this build" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Sign and place packages in the repo" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Sign indexes created using update --nosign" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Skip scanning the source code for binaries and other problems" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping '{apkfilename}' with invalid signature!" +msgstr "" + +#: ../fdroidserver/deploy.py ../fdroidserver/index.py +#, python-format +msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping index generation for {appid}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping {apkfilename} with invalid signature!" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Skipping {appid}: disabled" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Specify a local folder to sync the repo to" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Specify an identity file to provide to SSH for rsyncing" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Specify which debug keystore file to use." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Spew out even more information than normal" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Stripping mystery signature from {apkfilename}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Summary '%s' is just the app's name" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Summary of length {length} is over the {limit} char limit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "System clock is older than date in {path}!" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode used in git-svn, but the repo was not set up with tags" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "" + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "The OBB version code must come after \"{name}.\":" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "The base URL for the repo to log (default: https://f-droid.org)" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "The directory to write the mirror to" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "The file to be included in the repo (path or glob)" +msgstr "" + +#: ../fdroidserver/index.py +msgid "The repository's fingerprint does not match." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "The root dir for local_copy_dir \"{path}\" does not exist!" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "There is a keyalias collision - publishing halted" +msgstr "" + +#: ../fdroidserver/common.py +msgid "These are the apps that have been archived from the main repo." +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." +msgstr "" + +#: ../fdroidserver/common.py +msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-format +msgid "This repo already has local metadata: %s" +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"To complete the setup, add your APKs to \"%s\"\n" +"then run \"fdroid update -c; fdroid update\". You might also want to edit\n" +"\"config.yml\" to set the URL, repo name, and more. You should also set up\n" +"a signing key (a temporary one might have been automatically generated).\n" +"\n" +"For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"and https://f-droid.org/docs/Signing_Process" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "URL must start with https:// or http://" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "URL shorteners should not be used" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "URL {url} in Description: {error}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Unknown entry {key} in {configname}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Unknown exception found!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Unknown file '{filename}' in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Unknown metadata format: %s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unknown metadata format: {path} (use: *.yml)" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Unknown version of aapt, might cause problems: " +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unnecessary leading space" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unnecessary trailing space" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised app field '{fieldname}' in '{path}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised build flag '{build_flag}' in '{path}'" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported file type \"{extension}\" for repo graphic" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported graphics file found: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused extlib at %s" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused file at %s" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scandelete path: %s" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scanignore path: %s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Update repo information for new packages" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Update the binary transparency log for a URL" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "UpdateCheckData has invalid URL: {url}" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must use HTTPS URL: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData not a valid URL: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/lint.py +msgid "UpdateCheckName is set to the known application ID, it can be removed" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to androidobservatory.org" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to virustotal" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Use `fdroid update -c` to create it." +msgstr "" + +#: ../fdroidserver/build.py +msgid "Use build server" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Use date from APK instead of current time for newly added APKs" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for configuring s3cmd." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v2" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v3" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using JAR Signature" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Using blank dictionary instead of contents of {path}!" +msgstr "" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Using existing keystore \"{path}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using s3cmd to sync with: {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Valid commands are:" +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Verify against locally cached copy rather than redownloading." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Verify the integrity of downloaded packages" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Verifying index signature:" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Warn about possible metadata errors" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + +#: ../fdroidserver/update.py +msgid "When configured for signed indexes, create only unsigned indexes at this stage" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." +msgstr "" + +#: ../fdroidserver/publish.py +msgid "When signing or verifying fails, exit with an error code." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + +#: ../fdroidserver/init.py +msgid "X.509 'Distinguished Name' used when generating keys" +msgstr "" + +#: ../fdroidserver/common.py +msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "ZIP file archive" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "adding IdentityFile to {path}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "adding to {name}: {path}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" + +#: ../fdroidserver/common.py +msgid "apksigner not found! Cannot sign or verify modern APKs" +msgstr "" + +#: ../fdroidserver/common.py +msgid "apksigner not found, it's required for signing!" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py +#: ../fdroidserver/rewritemeta.py +msgid "application ID of file to operate on" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/publish.py ../fdroidserver/scanner.py +#: ../fdroidserver/verify.py +msgid "application ID with optional versionCode in the form APPID[:VERCODE]" +msgstr "" + +#: ../fdroidserver/common.py +msgid "archive_url needs to end with /archive" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument \"-\" with mode %r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument %(argument_name)s: %(message)s" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "attempting bare SSH connection to test deploy key:" +msgstr "" + +#: ../fdroidserver/common.py +msgid "can not parse scrlib spec (not a string): '{}'" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "can't open '%(filename)s': %(error)s" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "can't open non-https url: '{};" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "cannot find required srclibs: \"{path}\"" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "cannot have multiple subparser arguments" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "cannot publish update, did you set the deploy key?" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "cloning {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "commands from plugin modules:" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting option string: %s" +msgid_plural "conflicting option strings: %s" +msgstr[0] "" +msgstr[1] "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser alias: %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser: %s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "could not parse '{path}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no name specified): '{}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no ref specified): '{}'" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "created {path}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "current version is newer: old vercode={old}, new vercode={new}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "deleting: repo/{apkfilename}" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "deployed process log {path} to {dest}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "dest= is required for options like %r" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "downloading '{}'" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "downloading scanner signatures from '{}' failed" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "executable binary, possibly code" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "expected %s argument" +msgid_plural "expected %s arguments" +msgstr[0] "" +msgstr[1] "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at least one argument" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at most one argument" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected one argument" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "fdroid [] [-h|--help|--version|]" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "fetch the latest version of signatures from the web" +msgstr "" + +#: ../fdroidserver/metadata.py +msgid "force metadata errors (default) to be warnings, or to be ignored." +msgstr "" + +#: ../fdroidserver/common.py +msgid "git svn clone failed" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "gzip file archive" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ignored explicit argument %r" +msgstr "" + +#: ../fdroidserver/index.py +msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid %(type)s value: %(value)r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid choice: %(value)r (choose from %(choices)s)" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" +msgstr "" + +#: ../fdroidserver/common.py +msgid "ipfs_cid not found, skipping CIDv1 generation" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be an absolute path!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be directory, not a file!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "mirror '%s' does not end with 'fdroid'!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "mirrors set twice, in config.yml and {path}!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "mutually exclusive arguments must be optional" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "next {name} cache update due in {time}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "no \"icon\" in {appid}" +msgstr "" + +#: ../fdroidserver/signatures.py +msgid "no APK supplied" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "no version information found" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "not allowed with argument %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "one of the arguments %s is required" +msgstr "" + +#: ../fdroidserver/common.py ../fdroidserver/index.py +msgid "only accepts strings, lists, and tuples" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "options" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "overwriting existing {path}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "positional arguments" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "process log deploy {path} to {dest} failed!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "reference binary missing signature" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." +msgstr "" + +#: ../fdroidserver/common.py +msgid "repo_url needs to end with /repo" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "rsync is missing or broken: {error}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "scanner cache is malformed! You can clear it with: '{clear}'" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "shared library" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "show this help message and exit" +msgstr "" + +#: ../fdroidserver/signatures.py +msgid "signed APK, either a file-path or HTTPS URL." +msgstr "" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: log content is empty" +msgstr "" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: not enabled in config" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "skipping source tarball: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "srclibs missing name and/or @" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "static library" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "supplied reference binary has allowed signer {signer}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "the following arguments are required: %s" +msgstr "" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unexpected option string: %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unknown parser %(parser_name)r (choices: %(choices)s)" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unrecognized arguments: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "unsafe permissions on '{config_file}' (should be 0600)!" +msgstr "" + +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py +msgid "usage: " +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "using Apache libcloud to sync with {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "virustotal.com is rate limiting, waiting to retry..." +msgstr "" + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "{0} app, {1} key aliases" +msgid_plural "{0} apps, {1} key aliases" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename} ({appid}) has no metadata!" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} does not have a name! Using application ID instead." +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Android application ID!" +msgstr "" + +#: ../fdroidserver/metadata.py ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Java Package Name!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} has both APKs and files: {files}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{appid} is missing {name}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: Unknown extlib {path} in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "{appid}: no builds specified, running on current source state" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be an integer, found: {value}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be list or string, found: {value}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{file} is blank or corrupt!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{path} already exists, ignoring import results!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "{path} does not exist! Create it by running:" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} has been flagged by virustotal {count} times:" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not \"key: value\" dict, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not a standard config file!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "{path} is not list, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not {expected_type}, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} is zero size!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} more than 200MB, manually upload: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path}: {error}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{url} does not end with \"fdroid\", check the URL path!" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{url} does not start with \"http\"!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "{} build failed" +msgid_plural "{} builds failed" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/build.py +msgid "{} build succeeded" +msgid_plural "{} builds succeeded" +msgstr[0] "" +msgstr[1] "" diff --git a/locale/pa/LC_MESSAGES/fdroidserver.po b/locale/pa/LC_MESSAGES/fdroidserver.po new file mode 100644 index 00000000..8c64a1c2 --- /dev/null +++ b/locale/pa/LC_MESSAGES/fdroidserver.po @@ -0,0 +1,2681 @@ +# SOME DESCRIPTIVE TITLE. +# This file is put in the public domain. +# Kuldeep Singh , 2025. +msgid "" +msgstr "" +"Project-Id-Version: fdroidserver 2.3.3\n" +"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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" +"Plural-Forms: nplurals=2; plural=n > 1;\n" + +#: ../fdroidserver/nightly.py +msgid "" +"\n" +"SSH public key to be used as deploy key:" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "" +"\n" +"{path} encoded for the DEBUG_KEYSTORE secret variable:" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "\"%s/\" has no matching metadata file!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "\"local_copy_dir\" {path} does not exist!" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "\"{apkfilename}\" is already installed on {dev}." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" contains recent {name} ({version})" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "\"{path}\" exists but s3cmd is not installed!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "\"{path}\" is signed by a key that is not allowed:" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "\"{url}\" is not a valid URL!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%(prog)s: error: %(message)s\n" +msgstr "" + +#: ../fdroidserver/publish.py +#, python-format +msgid "%d APKs failed to be signed or verified!" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "%d problems found" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "%r is not callable" +msgstr "" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s did not produce a dict!" +msgstr "" + +#: ../fdroidserver/signindex.py +#, python-format +msgid "%s has bad SHA-256: %s" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "%s is not an accepted build field" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keypass' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystore' is NONE and 'smartcardoptions' is blank!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystore' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'keystorepass' not found in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'repo_keyalias' not found in config.yml!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "'required' is an invalid argument for positionals" +msgstr "" + +#: ../fdroidserver/common.py +msgid "'sdk_path' not set in config.yml!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "'{path}' failed to execute!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{path}' has invalid format, it should be a dictionary!" +msgstr "" + +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "'{value}' is not a valid {field}, should be {pattern}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "...checkupdate failed for {appid} : {error}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid ".__call__() not defined" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "/issues is missing" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "A URL is required as an argument!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "APK signatures have different certificates in {path}:" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Add PGP signatures using GnuPG for packages in repo" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Add a repo signing key to an unsigned repo" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Add skeleton metadata files for APKs that are missing them" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Adding new repo for only {name}" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Alias of the repo signing key in the keystore" +msgstr "" + +#: ../fdroidserver/build.py +msgid "AllowedAPKSigningKeys missing but reference binary supplied" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Allows a different revision (or git branch) to be specified for the initial import" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Also mirror the full archive section" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Also warn about formatting issues, like rewritemeta -l" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android AAR library" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android APK file" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Android DEX code" +msgstr "" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Android SDK not found at {path}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' does not exist!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK path '{path}' is not a directory!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Android SDK tool {cmd} not found!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "App is in '{repo}' but has a link to {url}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Appending .git is not necessary" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Archiving {apkfilename} with invalid signature!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Branch '{branch}' used as commit in srclib '{srclib}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Broken symlink: {path}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Build a package from source" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Build all applications available" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Build generated by `fdroid import` - remove disable line once ready" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Build metadata git repo has uncommited changes!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Build only the latest version of each package" +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "Built repo based in \"%s\" with this config:" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Can't auto-update app with no CurrentVersionCode" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Can't build due to {} error while scanning" +msgid_plural "Can't build due to {} errors while scanning" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Cannot rewrite \"{path}\"" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +#, python-format +msgid "Categories '%s' is not valid" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/lint.py +msgid "Categories are not set" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Category \"{category}\" defined but not used for any apps!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Check for updates to applications" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Clean update - don't uses caches, reprocess all APKs" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Comma separated list of categories." +msgstr "" + +#: ../fdroidserver/__main__.py +#, python-format +msgid "Command '%s' not recognised.\n" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Conflicting \"{field}\" definitions between .yml and localized files:" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not find '{command}' on your system" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version code" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname +#: ../fdroidserver/import_subcommand.py +msgid "Could not find latest version name" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not find {path} to remove it" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Could not open APK {path} for analysis: " +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Could not parse size \"{size}\", wrong type \"{type}\"" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/import_subcommand.py +msgid "Couldn't find Application ID" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find any version information" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Couldn't find package ID" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Cowardily refusing to overwrite existing signing key setup!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Created new container \"{name}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating \"{path}\" for configuring s3cmd." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "Creating log directory" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Creating new S3 bucket: {url}" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "Creating output directory" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Creating signed index with this key (SHA256):" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "Creating temporary directory" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Creating unsigned index in preparation for signing" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "DEBUG_KEYSTORE is not set or the value is incomplete" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Delete APKs and/or OBBs without metadata from the repo" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting archive, repo is too big ({size} max {limit})" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Deleting unknown file: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Description '%s' is just the app's summary" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Description has a duplicate line" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Description of length {length} is over the {limit} char limit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Did you mean config/{name}.yml?" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Did you mean {code}?" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Do not add 'disable:' to the generated build entries" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Do not deploy the new files to the repo" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Do not include \"{path}\" in URL!" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Do not prompt for Android SDK path, just fail" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Do not remove the private keys generated from the keystore" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Don't create a source tarball, useful when testing a build" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Don't refresh the repository, useful when testing a build with no internet connection" +msgstr "" + +#: ../fdroidserver/deploy.py ../fdroidserver/nightly.py +msgid "Don't use rsync checksums" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Downloading the repository already failed once, not trying again." +msgstr "" + +#: ../fdroidserver/verify.py +#, python-brace-format +msgid "Downloading {url} failed. {error}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Duplicate Anti-Feature declaration at {path} was ignored!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "Duplicate entry \"%s\" in mirrors config!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Duplicate link in '{field}': {url}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "ERROR: %(message)s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "ERROR: unsupported CI type, patches welcome!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-format +msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + +#: ../fdroidserver/__main__.py +#, python-brace-format +msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"Enter the path to the Android SDK (%s) here:\n" +"> " +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {var} from {configname} is not set!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Error while getting repo address" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Exit with a non-zero code if problems were found" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Extract application metadata from a source repository" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Extract signatures from APKs" +msgstr "" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed copying {path}: {error}" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Failed fetching signatures for '{apkfilename}': {error}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed reading {path}: {error}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed resizing {path}: {error}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Failed to create S3 bucket: {url}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, deleting {path}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Failed to get APK information, skipping {path}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Failed to get APK signing key fingerprint" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Failed to install '{apkfilename}' on {dev}: {error}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Failed to sign application" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Fetched buildserverid from VM: {buildserverid}" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "File disappeared while processing it: {path}" +msgstr "" + +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py +#: ../fdroidserver/update.py +msgid "Finished" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Forbidden HTML tags" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Force halting build after {0} sec timeout!" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Force scan of disabled apps and builds." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Found bad funding file \"{path}\" for \"{name}\":" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found invalid appids in arguments" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found invalid versionCodes for some apps" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Found multiple JAR Signature Block Files in {path}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Found multiple Signer Certificates!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Found multiple metadata files for {appid}" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Found multiple signing certificates for repository." +msgstr "" + +#: ../fdroidserver/index.py +msgid "Found no signing certificates for repository." +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Found non-file at %s" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Found {apkfilename} at {url}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} problems in {filename}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Found {count} warnings in {filename}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Generated skeleton metadata for {appid}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "Git checkout of '%s' failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git clean failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git fetch failed" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +#, python-format +msgid "Git remote set-head failed: \"%s\"" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Git reset failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule deinit failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule sync failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Git submodule update failed" +msgstr "" + +#: ../fdroidserver/common.py +msgid "HTTPS must be used with Subversion URLs!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "If a git mirror gets to big, allow the archive to be deleted" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "If this upload fails, try manually uploading to {url}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." +msgstr "" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring FUNDING.yml entry longer than 2048: %s" +msgstr "" + +#: ../fdroidserver/update.py +#, python-format +msgid "Ignoring bad element in manifest: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Ignoring package without metadata: " +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Ignoring stale cache data for {apkfilename}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Include APKs that are signed with disabled algorithms like MD5" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the PGP signature .asc files in the mirror" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the build logs in the mirror" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Include the source tarballs in the mirror" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Including metadata from %s@%s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Including metadata from {path}" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Initialising submodules" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Install all signed applications available" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Install built packages on devices" +msgstr "" + +#: ../fdroidserver/install.py +#, python-format +msgid "Installing %s..." +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Installing '{apkfilename}' on {dev}..." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Interact with the repo HTTP server" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Invalid APK" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid AutoUpdateMode: {mode}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid UpdateCheckMode: {mode}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Invalid VercodeOperation: {field}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Invalid VercodeOperation: {invalid_ops}" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid application ID {appid}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Invalid bulleted list" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "Invalid name for published file: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid ndk: entry in build: \"{ndk}\"" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Invalid redirect to non-HTTPS: {before} -> {after} " +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid scrlib metadata: '{file}' does not exist" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: could not parse '{file}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature failed to verify: {path}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "JAR signature verified: {path}" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Java JAR file" +msgstr "" + +#: ../fdroidserver/mirror.py ../fdroidserver/publish.py +#: ../fdroidserver/update.py +msgid "Java JDK not found! Install in standard location or set java_paths!" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Java compiled class" +msgstr "" + +#: ../fdroidserver/signindex.py +msgid "Java jarsigner not found! Install in standard location or set java_paths!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Javascript in HTML src attributes" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Keeping failed build \"{apkfilename}\"" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Keystore for signing key:\t" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Known debug key is used in AllowedAPKSigningKeys: " +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Liberapay donation methods belong in the Liberapay: field" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +msgid "List files that would be reformatted (dry run)" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Locale included in f-droid.org URL" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Make the build stop on exceptions" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Malformed repository mirrors." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Malformed serverwebroot line:" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Max recursion depth in ZIP file reached: %s" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "Mirror the full repo and archive, all file types." +msgstr "" + +#: ../fdroidserver/gpgsign.py +msgid "Missing output directory" +msgstr "" + +#: ../fdroidserver/metadata.py +msgid "Moving Anti-Features declarations to localized files:" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" +msgstr "" + +#: ../fdroidserver/verify.py +#, python-format +msgid "No APK for package: %s" +msgstr "" + +#: ../fdroidserver/common.py +msgid "No Android SDK found!" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No attached devices found" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + +#: ../fdroidserver/index.py +msgid "No fingerprint in URL." +msgstr "" + +#: ../fdroidserver/common.py +msgid "No git submodules available" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "No gradle project could be found. Specify --subdir?" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "No information found." +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "No matching tags found" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "No minimum SDK version found in {0}, using default (3)." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is Free Software" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "No need to specify that the app is for Android" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "No option set! Edit your config.yml to set at least one of these:" +msgstr "" + +#: ../fdroidserver/common.py +msgid "No packages specified" +msgstr "" + +#: ../fdroidserver/install.py +#, python-format +msgid "No signed APK available for %s" +msgstr "" + +#: ../fdroidserver/install.py +msgid "No signed output directory - nothing to do" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No signing certificates found in {path}" +msgstr "" + +#: ../fdroidserver/common.py +#, python-format +msgid "No such package: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "No such versionCode {versionCode} for app {appid}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "No tags found" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/verify.py +msgid "No unsigned directory - nothing to do" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "No version information could be found." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Not a valid size definition: \"{}\"" +msgstr "" + +#: ../fdroidserver/signindex.py +msgid "Nothing to do" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "Nothing to do for {appid}." +msgstr "" + +#: ../fdroidserver/init.py +msgid "Now set these in config.yml:" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Only PNG and JPEG are supported for graphics, found: {path}" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Only process apps with auto-updates" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "OpenCollective donation methods belong in the OpenCollective: field" +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Output JSON report to file named after APK." +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Output JSON to stdout." +msgstr "" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py +#: ../fdroidserver/publish.py ../fdroidserver/signindex.py +#: ../fdroidserver/update.py +msgid "Outputting JSON" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Overall license of the project." +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "Package \"{appid}\" already exists" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Parsing manifest at '{path}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Password required with username" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Path to main Android project subdirectory, if not in root." +msgstr "" + +#: ../fdroidserver/init.py +msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "Path to the git repo to use as the log" +msgstr "" + +#: ../fdroidserver/init.py +msgid "Path to the keystore for the repo signing key" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Print the secret variable to the terminal for easy copy/paste" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Problem with ZIP file: %s, error %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Problem with xml at '{path}'" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Process auto-updates" +msgstr "" + +#: ../fdroidserver/publish.py ../fdroidserver/update.py +#, python-brace-format +msgid "Processing {apkfilename}" +msgstr "" + +#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py +#, python-brace-format +msgid "Processing {appid}" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Produce human-readable XML/JSON for index files" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +msgid "Project URL to import from." +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Punctuation should be avoided" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "Push the log to this git remote repository" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing binary transparency log to {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Pushing to remote server failed!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Pushing to {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Quickly start a new repository" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Read all the metadata files and exit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading '{config_file}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Reading {apkfilename} from cache" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Removing specified files" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Removing {path}\"" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Rename APK files that do not match package.name_123.apk" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Resigning {apkfilename} with provided debug.keystore" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Resize all the icons exceeding the max pixel size and exit" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Restrict output to warnings and errors" +msgstr "" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Rewrite all the metadata files" +msgstr "" + +#: ../fdroidserver/rewritemeta.py +#, python-brace-format +msgid "Rewriting '{appid}'" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Run on git repo that has uncommitted changes" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Run rewritemeta to fix formatting" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Running first pass with MD5 checking disabled" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "Running wget in {path}" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "SHA-256 of {url} does not match entry!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Scan the resulting APK(s) for known non-free classes." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Scan the source code of a package" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {apk}" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Scanner found {count} problems in {appid}:{versionCode}:" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Scanner found {} problem" +msgid_plural "Scanner found {} problems" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK with dexdump for known non-free classes." +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Set NDK {release} ({version}) up" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Set clock to that time using:" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Set maximum releases in repo before older ones are archived" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Set open file limit to {integer}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Set up an app build for a nightly build repo" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Setting open file limit failed: " +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "Setting {0} sec timeout for this build" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Sign and place packages in the repo" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Sign indexes created using update --nosign" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Skip scanning the source code for binaries and other problems" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping '{apkfilename}' with invalid signature!" +msgstr "" + +#: ../fdroidserver/deploy.py ../fdroidserver/index.py +#, python-format +msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping index generation for {appid}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Skipping {apkfilename} with invalid signature!" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "Skipping {appid}: disabled" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Specify a local folder to sync the repo to" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Specify an identity file to provide to SSH for rsyncing" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "Specify which debug keystore file to use." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Spew out even more information than normal" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Stripping mystery signature from {apkfilename}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Summary '%s' is just the app's name" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Summary of length {length} is over the {limit} char limit" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "System clock is older than date in {path}!" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "Tags update mode used in git-svn, but the repo was not set up with tags" +msgstr "" + +#: ../fdroidserver/build.py +msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "" + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "The OBB version code must come after \"{name}.\":" +msgstr "" + +#: ../fdroidserver/btlog.py +msgid "The base URL for the repo to log (default: https://f-droid.org)" +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "The directory to write the mirror to" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "The file to be included in the repo (path or glob)" +msgstr "" + +#: ../fdroidserver/index.py +msgid "The repository's fingerprint does not match." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "The root dir for local_copy_dir \"{path}\" does not exist!" +msgstr "" + +#: ../fdroidserver/publish.py +msgid "There is a keyalias collision - publishing halted" +msgstr "" + +#: ../fdroidserver/common.py +msgid "These are the apps that have been archived from the main repo." +msgstr "" + +#: ../fdroidserver/mirror.py +msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." +msgstr "" + +#: ../fdroidserver/common.py +msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-format +msgid "This repo already has local metadata: %s" +msgstr "" + +#: ../fdroidserver/init.py +#, python-format +msgid "" +"To complete the setup, add your APKs to \"%s\"\n" +"then run \"fdroid update -c; fdroid update\". You might also want to edit\n" +"\"config.yml\" to set the URL, repo name, and more. You should also set up\n" +"a signing key (a temporary one might have been automatically generated).\n" +"\n" +"For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"and https://f-droid.org/docs/Signing_Process" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "URL must start with https:// or http://" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "URL shorteners should not be used" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "URL {url} in Description: {error}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Unknown entry {key} in {configname}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Unknown exception found!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "Unknown file '{filename}' in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-format +msgid "Unknown metadata format: %s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unknown metadata format: {path} (use: *.yml)" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Unknown version of aapt, might cause problems: " +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unnecessary leading space" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Unnecessary trailing space" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised app field '{fieldname}' in '{path}'" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Unrecognised build flag '{build_flag}' in '{path}'" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported file type \"{extension}\" for repo graphic" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "Unsupported graphics file found: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused extlib at %s" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-format +msgid "Unused file at %s" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scandelete path: %s" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-format +msgid "Unused scanignore path: %s" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Update repo information for new packages" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Update the binary transparency log for a URL" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "UpdateCheckData has invalid URL: {url}" +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData must use HTTPS URL: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "UpdateCheckData not a valid URL: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/lint.py +msgid "UpdateCheckName is set to the known application ID, it can be removed" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to androidobservatory.org" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Uploading {apkfilename} to virustotal" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Use `fdroid update -c` to create it." +msgstr "" + +#: ../fdroidserver/build.py +msgid "Use build server" +msgstr "" + +#: ../fdroidserver/update.py +msgid "Use date from APK instead of current time for newly added APKs" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for configuring s3cmd." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v2" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using APK Signature v3" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using JAR Signature" +msgstr "" + +#: ../fdroidserver/common.py +msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "Using blank dictionary instead of contents of {path}!" +msgstr "" + +#: ../fdroidserver/init.py +#, python-brace-format +msgid "Using existing keystore \"{path}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using s3cmd to sync with: {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Valid commands are:" +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Verify against locally cached copy rather than redownloading." +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Verify the integrity of downloaded packages" +msgstr "" + +#: ../fdroidserver/index.py +msgid "Verifying index signature:" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "Warn about possible metadata errors" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + +#: ../fdroidserver/update.py +msgid "When configured for signed indexes, create only unsigned indexes at this stage" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." +msgstr "" + +#: ../fdroidserver/publish.py +msgid "When signing or verifying fails, exit with an error code." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + +#: ../fdroidserver/init.py +msgid "X.509 'Distinguished Name' used when generating keys" +msgstr "" + +#: ../fdroidserver/common.py +msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "ZIP file archive" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "adding IdentityFile to {path}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "adding to {name}: {path}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ambiguous option: %(option)s could match %(matches)s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" + +#: ../fdroidserver/common.py +msgid "apksigner not found! Cannot sign or verify modern APKs" +msgstr "" + +#: ../fdroidserver/common.py +msgid "apksigner not found, it's required for signing!" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py +#: ../fdroidserver/rewritemeta.py +msgid "application ID of file to operate on" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/build.py ../fdroidserver/install.py +#: ../fdroidserver/publish.py ../fdroidserver/scanner.py +#: ../fdroidserver/verify.py +msgid "application ID with optional versionCode in the form APPID[:VERCODE]" +msgstr "" + +#: ../fdroidserver/common.py +msgid "archive_url needs to end with /archive" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument \"-\" with mode %r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "argument %(argument_name)s: %(message)s" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "attempting bare SSH connection to test deploy key:" +msgstr "" + +#: ../fdroidserver/common.py +msgid "can not parse scrlib spec (not a string): '{}'" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "can't open '%(filename)s': %(error)s" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "can't open non-https url: '{};" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "cannot find required srclibs: \"{path}\"" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "cannot have multiple subparser arguments" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "cannot merge actions - two groups are named %r" +msgstr "" + +#: ../fdroidserver/nightly.py +msgid "cannot publish update, did you set the deploy key?" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "cloning {url}" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "commands from plugin modules:" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting option string: %s" +msgid_plural "conflicting option strings: %s" +msgstr[0] "" +msgstr[1] "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser alias: %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "conflicting subparser: %s" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "could not parse '{path}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no name specified): '{}'" +msgstr "" + +#: ../fdroidserver/common.py +msgid "could not parse srclib spec (no ref specified): '{}'" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "created {path}" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "current version is newer: old vercode={old}, new vercode={new}" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "deleting: repo/{apkfilename}" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "deployed process log {path} to {dest}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "dest= is required for options like %r" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "downloading '{}'" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "downloading scanner signatures from '{}' failed" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "executable binary, possibly code" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "expected %s argument" +msgid_plural "expected %s arguments" +msgstr[0] "" +msgstr[1] "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at least one argument" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected at most one argument" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "expected one argument" +msgstr "" + +#: ../fdroidserver/__main__.py +msgid "fdroid [] [-h|--help|--version|]" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "fetch the latest version of signatures from the web" +msgstr "" + +#: ../fdroidserver/metadata.py +msgid "force metadata errors (default) to be warnings, or to be ignored." +msgstr "" + +#: ../fdroidserver/common.py +msgid "git svn clone failed" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "gzip file archive" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "ignored explicit argument %r" +msgstr "" + +#: ../fdroidserver/index.py +msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" +msgstr "" + +#: ../fdroidserver/index.py +msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid %(type)s value: %(value)r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid choice: %(value)r (choose from %(choices)s)" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid conflict_resolution value: %r" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" +msgstr "" + +#: ../fdroidserver/common.py +msgid "ipfs_cid not found, skipping CIDv1 generation" +msgstr "" + +#: ../fdroidserver/checkupdates.py +#, python-brace-format +msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be an absolute path!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "local_copy_dir must be directory, not a file!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "mirror '%s' does not end with 'fdroid'!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "mirrors set twice, in config.yml and {path}!" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "mutually exclusive arguments must be optional" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "next {name} cache update due in {time}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "no \"icon\" in {appid}" +msgstr "" + +#: ../fdroidserver/signatures.py +msgid "no APK supplied" +msgstr "" + +#: ../fdroidserver/checkupdates.py +msgid "no version information found" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "not allowed with argument %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "one of the arguments %s is required" +msgstr "" + +#: ../fdroidserver/common.py ../fdroidserver/index.py +msgid "only accepts strings, lists, and tuples" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "options" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "overwriting existing {path}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "positional arguments" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "process log deploy {path} to {dest} failed!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "reference binary missing signature" +msgstr "" + +#: ../fdroidserver/signatures.py +#, python-brace-format +msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" +msgstr "" + +#: ../fdroidserver/index.py +#, python-format +msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." +msgstr "" + +#: ../fdroidserver/common.py +msgid "repo_url needs to end with /repo" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "rsync is missing or broken: {error}" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "scanner cache is malformed! You can clear it with: '{clear}'" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "shared library" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +msgid "show this help message and exit" +msgstr "" + +#: ../fdroidserver/signatures.py +msgid "signed APK, either a file-path or HTTPS URL." +msgstr "" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: log content is empty" +msgstr "" + +#: ../fdroidserver/common.py +msgid "skip deploying full build logs: not enabled in config" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "skipping source tarball: {path}" +msgstr "" + +#: ../fdroidserver/lint.py +msgid "srclibs missing name and/or @" +msgstr "" + +#: ../fdroidserver/scanner.py +msgid "static library" +msgstr "" + +#: ../fdroidserver/build.py +#, python-brace-format +msgid "supplied reference binary has allowed signer {signer}" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "the following arguments are required: %s" +msgstr "" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unexpected option string: %s" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unknown parser %(parser_name)r (choices: %(choices)s)" +msgstr "" + +#: /usr/lib/python3.11/argparse.py +#, python-format +msgid "unrecognized arguments: %s" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "unsafe permissions on '{config_file}' (should be 0600)!" +msgstr "" + +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py +msgid "usage: " +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "using Apache libcloud to sync with {url}" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "virustotal.com is rate limiting, waiting to retry..." +msgstr "" + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "{0} app, {1} key aliases" +msgid_plural "{0} apps, {1} key aliases" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename} ({appid}) has no metadata!" +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} does not have a name! Using application ID instead." +msgstr "" + +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Android application ID!" +msgstr "" + +#: ../fdroidserver/metadata.py ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} from {path} is not a valid Java Package Name!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{appid} has both APKs and files: {files}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{appid} is missing {name}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: Unknown extlib {path} in build '{versionName}'" +msgstr "" + +#: ../fdroidserver/scanner.py +#, python-brace-format +msgid "{appid}: no builds specified, running on current source state" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be an integer, found: {value}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{build_flag} must be list or string, found: {value}" +msgstr "" + +#: ../fdroidserver/metadata.py +#, python-brace-format +msgid "{file} is blank or corrupt!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{path} already exists, ignoring import results!" +msgstr "" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "{path} does not exist! Create it by running:" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} has been flagged by virustotal {count} times:" +msgstr "" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not \"key: value\" dict, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not a standard config file!" +msgstr "" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "{path} is not list, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "{path} is not {expected_type}, but a {datatype}!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path} is zero size!" +msgstr "" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "{path} more than 200MB, manually upload: {url}" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" +msgstr "" + +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path}: {error}" +msgstr "" + +#: ../fdroidserver/mirror.py +#, python-brace-format +msgid "{url} does not end with \"fdroid\", check the URL path!" +msgstr "" + +#: ../fdroidserver/import_subcommand.py +#, python-brace-format +msgid "{url} does not start with \"http\"!" +msgstr "" + +#: ../fdroidserver/build.py +msgid "{} build failed" +msgid_plural "{} builds failed" +msgstr[0] "" +msgstr[1] "" + +#: ../fdroidserver/build.py +msgid "{} build succeeded" +msgid_plural "{} builds succeeded" +msgstr[0] "" +msgstr[1] "" diff --git a/locale/pick-complete-translations.py b/locale/pick-complete-translations.py index a866a231..be11426c 100755 --- a/locale/pick-complete-translations.py +++ b/locale/pick-complete-translations.py @@ -5,9 +5,10 @@ import json import os import re -import requests import subprocess +import git +import requests projectbasedir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) localedir = os.path.join(projectbasedir, 'locale') @@ -18,37 +19,79 @@ if os.path.exists(cached_file): with open(cached_file) as fp: data = json.load(fp) else: - url = 'https://hosted.weblate.org/exports/stats/f-droid/fdroidserver/?format=json' + url = 'https://hosted.weblate.org/api/components/f-droid/fdroidserver/statistics/?format=json' r = requests.get(url) r.raise_for_status() - data = r.json() + data = r.json()['results'] active = set() print('name locale translated approved error-free') for locale in sorted(data, key=lambda locale: locale['code']): - print('%26s' % locale['name'], - '%8s' % locale['code'], - '%0.1f%%' % locale['translated_percent'], - '%0.1f%%' % locale['approved_percent'], - '%0.1f%%' % (100 - locale['failing_percent']), - sep='\t') + print( + '%26s' % locale['name'], + '%8s' % locale['code'], + '%0.1f%%' % locale['translated_percent'], + '%0.1f%%' % locale['approved_percent'], + '%0.1f%%' % (100 - locale['failing_percent']), + sep='\t', + ) if locale['translated_percent'] >= 90 and locale['failing'] < 5: active.add(locale['code']) manifest_file = os.path.join(projectbasedir, 'MANIFEST.in') with open(manifest_file) as fp: - for line in fp.readlines(): - m = re.match(r'include locale/([^/]+)/.*', line) - if m: - active.add(m.group(1)) + manifest_in = fp.read() +for m in re.findall(r'include locale/([^/]+)/LC_MESSAGES/fdroidserver.po', manifest_in): + active.add(m) +repo = git.Repo(projectbasedir) +weblate = repo.remotes.weblate +weblate.fetch() +upstream = repo.remotes.upstream +upstream.fetch() + +if 'merge_weblate' in repo.heads: + merge_weblate = repo.heads['merge_weblate'] + repo.create_tag( + 'previous_merge_weblate', + ref=merge_weblate, + message=('Automatically created by %s' % __file__), + ) +else: + merge_weblate = repo.create_head('merge_weblate') +merge_weblate.set_commit(upstream.refs.master) +merge_weblate.checkout() + +active = sorted(active) manifest_lines = set() for locale in active: - manifest_lines.add('include locale/%s/LC_MESSAGES/fdroidserver.po\n' % locale) + po_file = f'locale/{locale}/LC_MESSAGES/fdroidserver.po' + manifest_lines.add(f'include {po_file}\n') + for commit in repo.iter_commits( + str(weblate.refs.master) + '...' + str(upstream.refs.master), + paths=[po_file], + max_count=10, + reverse=True, + ): + print(f'{locale}: git cherry-pick', commit) + repo.git.cherry_pick(commit) with open(manifest_file, 'a') as fp: for line in manifest_lines: if line: fp.write(line) +# first filter duplicates subprocess.run(['sort', '-u', '-o', manifest_file, manifest_file]) +# then use a stable sort order +subprocess.run( + ['sort', '--ignore-case', '--stable', '-o', manifest_file, manifest_file], + env={'LC_ALL': 'C'}, +) + +print('\tIf all else fails, try:') +print('\tgit checkout -B merge_weblate weblate/master') +print('\tgit rebase -i upstream/master') +print('\t# select all in editor and cut all commit lines') +print('\twl-paste | grep -Eo ".* \((%s)\) .*" | wl-copy' % '|'.join(active)) +print('\t# paste into editor, and make rebase\n') diff --git a/locale/pl/LC_MESSAGES/fdroidserver.po b/locale/pl/LC_MESSAGES/fdroidserver.po index a87be9ef..03bbc39f 100644 --- a/locale/pl/LC_MESSAGES/fdroidserver.po +++ b/locale/pl/LC_MESSAGES/fdroidserver.po @@ -1,16 +1,17 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. -# WaldiS , 2020, 2021, 2024. +# WaldiS , 2020, 2021, 2024, 2025. # Michal L , 2020, 2021. # mondstern , 2021. -# Hans-Christoph Steiner , 2021. +# Hans-Christoph Steiner , 2021, 2024. # Agnieszka C , 2021, 2022, 2023, 2024. +# Eryk Michalak , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-08-23 10:34+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-06-24 12:05+0000\n" "Last-Translator: WaldiS \n" "Language-Team: Polish \n" "Language: pl\n" @@ -18,7 +19,7 @@ msgstr "" "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" -"X-Generator: Weblate 5.7.1-dev\n" +"X-Generator: Weblate 5.13-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -42,6 +43,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" nie ma pasującego pliku metadanych!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Klucz „isPrimary” nie powinien być dodawany do mirrorów!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -52,11 +57,6 @@ msgstr "„local_copy_dir” {path} nie istnieje!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" jest już zainstalowany na {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" zawiera nieaktualne {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -82,18 +82,6 @@ msgstr "„{path}” jest podpisany kluczem, który jest niedozwolony:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" nie jest prawidłowym adresem URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s opcja wymaga %(number)d argument" -msgstr[1] "%(option)s opcji wymaga %(number)d argumentów" -msgstr[2] "%(option)s opcje wymagają %(number)d argumentów" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -109,14 +97,6 @@ msgstr "Nie udało się podpisać lub zweryfikować %d plików APK!" msgid "%d problems found" msgstr "%d problemy odnalezione" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opcje]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -137,13 +117,6 @@ msgstr "%s ma zły SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s nie jest akceptowanym polem kompilacji" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s opcja nie przyjmuje wartości" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' nie znaleziono w config.yml!" @@ -164,8 +137,6 @@ msgstr "'keystorepass' nie znaleziono w config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' nie znaleziono w config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'wymagane' jest nieprawidłowym argumentem dla pozycji" @@ -179,11 +150,6 @@ msgstr "'sdk_path' nie jest ustawiony w config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' jest zbyt stary, fdroid wymaga narzędzi-kompilacji-{version} lub nowsze!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' będą w losowej kolejności! Użyj nawiasów () lub [], jeśli kolejność jest ważna!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -194,7 +160,7 @@ msgstr "'{path}' nie udało się wykonać!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ma nieprawidłowy format, powinien być słownikiem!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' nie jest prawidłowy {field} w {appid}. Wzór Regex: {pattern}" @@ -204,13 +170,15 @@ msgstr "'{value}' nie jest prawidłowy {field} w {appid}. Wzór Regex: {pattern} msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' nie jest prawidłowym {field}, powinno być {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request działa tylko na pojedynczym appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...sprawdzenie aktualizacji nie powiodło się {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nie określono" @@ -301,10 +269,6 @@ msgstr "Nie znaleziono narzędzia Android SDK {cmd}!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplikacja ma Binaries, ale nie ma odpowiednich kluczy AllowedAPKSingKeys do przypięcia certyfikatu." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Aplikacja ma NoSourceSince lub ArchivePolicy „0 versions”, ale AutoUpdateMode lub UpdateCheckMode nie są None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplikacja ma NoSourceSince lub ArchivePolicy „0 versions”, ale AutoUpdateMode lub UpdateCheckMode nie są None" @@ -331,6 +295,14 @@ msgstr "Archiwizacja {apkfilename} z nieprawidłowym podpisem!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode z UpdateCheckMode: HTTP musi mieć wzorzec." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Automatyczna odmowa na wszystkie monity." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Automatyczna odpowiedź twierdząca na wszystkie monity." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -340,7 +312,6 @@ msgstr "Błędny typ wpisu „{mirrortype}” w konfiguracji serwerów lustrzany msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Bazowy adres URL do serwera lustrzanego, może zawierać klucz do podpisywania indeksu za pomocą łańcucha zapytania: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -392,16 +363,23 @@ msgstr[0] "Nie można zbudować z powodu błędu {} podczas skanowania" msgstr[1] "Nie można zbudować z powodu błędów {} podczas skanowania" msgstr[2] "Nie można zbudować z powodu błędów {} podczas skanowania" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Błąd odczytu {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nie można odczytać \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategorie '%s' są nieprawidłowe" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategorie nie są ustawione" @@ -424,6 +402,10 @@ msgstr "Sprawdzanie archiwizacji dla {appid} - apks: {integer}, keepversions: {k msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Czysta aktualizacja - nie używa pamięci podręcznych, przetwarzaj ponownie wszystkie pakiety APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Koloruj wpisy w dzienniku zdarzeń" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Rozdzielana przecinkami lista kategorii." @@ -437,6 +419,10 @@ msgstr "Polecenie '%s' nie rozpoznane.\n" msgid "Commit changes" msgstr "Scommituj zmiany" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Zatwierdź zmiany, wypchnij, a następnie utwórz żądanie scalenia" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -446,20 +432,17 @@ msgstr "Sprzeczne definicje „{field}” między plikami .yml a przetłumaczony msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Sprzeczne argumenty: '--verbose' i '--quiet' nie mogą być podane w tym samym czasie." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Pliki konfiguracyjne powodujące konflikt! Używając {newfile}, ignoruje {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Nie można znaleźć '{command}' w twoim systemie" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nie można znaleźć najnowszej wersji kodu" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nie można odnaleźć nazwy najnowszej wersji" @@ -479,6 +462,7 @@ msgstr "Nie można otworzyć pliku APK {path} do analizy: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Nie można przeanalizować rozmiaru \"{size}\", nieprawidłowy typ \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Nie można odnaleźć identyfikatora aplikacji" @@ -505,6 +489,11 @@ msgstr "Utworzono nowy kontener \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Tworzenie \"{path}\" do konfiguracji s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Tworzenie pustego pliku {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Tworzenie katalogu dzienników" @@ -567,11 +556,6 @@ msgstr "Opis \"%s\" to tylko podsumowanie aplikacji" msgid "Description has a duplicate line" msgstr "Opis ma zduplikowaną linię" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Opis ma listę (%s), ale nie jest wypunktowana (*) ani ponumerowana (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -620,15 +604,14 @@ msgstr "Nie odświeżaj repozytorium, przydatne podczas testowania kompilacji be msgid "Don't use rsync checksums" msgstr "Nie używaj sum kontrolnych rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Pobierz F-Droid.apk za pomocą serwerów lustrzanych, które wyciekają mniej do sieci" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Pobierz pełne mirrors małych repozytoriów" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Pobieranie %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Pobieranie repozytorium już raz się nie powiodło, nie próbuje ponownie." @@ -662,14 +645,6 @@ msgstr "BŁĄD: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "BŁĄD: podkomenda „serwer” została usunięta, użyj polecenia „deploy”!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"BŁĄD: tego polecenia nigdy nie należy używać do zwierciadlania f-droid.org!\n" -"Pełne lustro f-droid.org wymaga ponad 200 GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "BŁĄD: nieobsługiwany typ CI, mile widziane poprawki!" @@ -682,12 +657,22 @@ msgstr "BŁĄD: nieobsługiwany host git „%s”, łatki mile widziane!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "BŁĄD: {key} w {path} nie jest \"archive\" lub \"repo\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "BŁĄD: {key} nie jest prawidłowym kluczem!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "BŁĄD: wartość klucza {key} powinna być typu {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "BŁĄD: {key}:{subkey} w {path} nie jest jednym z dozwolonych kluczy: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -708,9 +693,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Zmienna środowiskowa {var} z {configname} nie jest ustawiona!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Zmienna środowiskowa{{env: {var}}} nie została ustawiona!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Błąd wdrożenia 'github_releases', {} nie występuje. (Może być konieczne wcześniejsze uruchomienie `fdroid update`)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -728,6 +718,10 @@ msgstr "Wyodrębnij metadane aplikacji z repozytorium źródłowego" msgid "Extract signatures from APKs" msgstr "Wyciągnij podpisy z plików APK" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk nie może być pobrany z żadnego znanego źródła!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -797,10 +791,6 @@ msgstr "Plik zniknął podczas przetwarzania go: {path}" msgid "Finished" msgstr "Skończone" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Metody darowizn Flattr należą do FlattrID: field" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Zakazane tagi HTML" @@ -832,7 +822,6 @@ msgstr "Znaleziono zły plik finansowania \"{path}\" dla \"{name}\":" msgid "Found invalid appids in arguments" msgstr "Znaleziono nieprawidłowe pliki w argumentach" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Znaleziono nieprawidłowe kody wersji dla niektórych aplikacji" @@ -897,21 +886,18 @@ msgstr "Git clean nie powiódł się" msgid "Git fetch failed" msgstr "Pobranie Git nie powiodło się" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune nie powiodło się" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Błąd zdalnego ustawiania Git: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Resetowanie Git nie powiodło się" #: ../fdroidserver/common.py -#, fuzzy msgid "Git submodule deinit failed" msgstr "Deinit podmodułu Git nie powiódł się" @@ -951,6 +937,11 @@ msgstr "Ignorowanie wpisu FUNDING.yml dłuższego niż 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorowanie błędnego elementu w manifeście: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} jest przestarzałe, użyj {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorowanie pakietu bez metadanych: " @@ -1036,16 +1027,12 @@ msgstr "Nieprawidłowa VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Nieprawidłowa VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Nieprawidłowy ID aplikacji {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Niepoprawna wartość boolean '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Nieprawidłowa lista wypunktowana" @@ -1121,7 +1108,6 @@ msgid "Keystore for signing key:\t" msgstr "Magazyn kluczy do podpisywania klucza:\t" #: ../fdroidserver/lint.py -#, fuzzy msgid "Known debug key is used in AllowedAPKSigningKeys: " msgstr "Znany klucz debugowania jest używany w AllowedAPKSigningKeys: " @@ -1159,6 +1145,11 @@ msgstr "Nieprawidłowy wiersz serverwebroot:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Osiągnięto maksymalną głębokość rekurencji w pliku ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Konfiguracja Mirror dla {url} zawiera klucz \"isPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Mirror pełnego repo i archiwum, wszystkie typy plików." @@ -1188,6 +1179,10 @@ msgstr "Nie znaleziono pakietu SDK Androida!" msgid "No attached devices found" msgstr "Nie znaleziono podłączonych urządzeń" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Nie znaleziono urządzeń dla `adb install`! Podłącz jedno urządzenie." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Brak odcisku palca w adresie URL." @@ -1248,7 +1243,6 @@ msgstr "Nie znaleziono certyfikatów do podpisu w {path}" msgid "No such package: %s" msgstr "Brak takiego pakietu: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1283,7 +1277,6 @@ msgstr "Nic nie robić w {appid}." msgid "Now set these in config.yml:" msgstr "Teraz ustaw je w config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1301,26 +1294,28 @@ msgstr "Nazwa pakietu OBB nie jest zgodna z obsługiwanym pakietem APK:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Maszyna Offline, pomijając generowanie git mirror aż do ' fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'packageNames'. pomijanie..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'projectUrl'. pomijanie..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Jeden z elementów 'github_releases' nie posiada wartości 'token'. pomijanie..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Tylko PNG i JPEG są obsługiwane dla grafiki, znaleziono: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Wydrukuj tylko różnice ze Sklepem Play" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Akceptowany jest tylko jeden klucz \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1330,10 +1325,6 @@ msgstr "Przetwarzaj tylko aplikacje z automatycznymi aktualizacjami" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metody darowizn OpenCollective należą do OpenCollective: field" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opcje" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Wyjście raportu JSON do pliku o nazwie po APK." @@ -1391,6 +1382,11 @@ msgstr "Ścieżka do magazynu kluczy dla klucza podpisywania repo" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Wydrukuj tajną zmienną do terminala, aby ułatwić kopiowanie/wklejanie" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Tryb prywatności został włączony w oparciu o ustawienia regionalne ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1477,6 +1473,15 @@ msgstr "Czytanie {apkfilename} z pamięci podręcznej" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Odświeżanie i buforowanie reguł skanera i sygnatur z sieci" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Odmowa podpisania pliku {path}, ponieważ istnieje on zarówno w folderze {dir1}, jak i {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Usuń źródłowy plik tarball i wszystkie pliki APK, jeśli pomyślnie zweryfikowano." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Usuwanie określonych plików" @@ -1490,13 +1495,10 @@ msgstr "Usuwanie „{path}”" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Zmień nazwy plików APK, które nie pasują do pliku package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Tryb aktualizacji RepoTrunk ma sens tylko w repozytoriach git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Zresetuj i utwórz zupełnie nowy serwer kompilacji, nawet jeśli istniejący wydaje się być w porządku." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1511,6 +1513,11 @@ msgstr "Zmień rozmiar wszystkich ikon przekraczających maksymalny rozmiar piks msgid "Restrict output to warnings and errors" msgstr "Ogranicz wyjście do ostrzeżeń i błędów" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Ponowna próba pobrania nie powiodła się: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Przepisz wszystkie pliki metadanych" @@ -1527,7 +1534,7 @@ msgstr "Uruchom ponownie repozytorium git z niescommitowanymi zmianami" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Uruchom {cibase}, aby znaleźć -debug.apk. i pomiń repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1577,6 +1584,10 @@ msgstr[0] "Skaner znalazł {} problem" msgstr[1] "Skaner znalazł {} problemów" msgstr[2] "Skaner znalazł {} problemy" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Skanowanie APK w poszukiwaniu dodatkowych bloków podpisywania." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Skanowanie pakietu APK za pomocą dexdump w poszukiwaniu znanych niewolnych klas." @@ -1697,6 +1708,10 @@ msgstr "Tryb aktualizacji tagów użyty w git-svn, ale repozytorium nie zostało msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Tryb testowy - umieszczaj dane wyjściowe tylko w katalogu tmp i zawsze buduj, nawet jeśli dane wyjściowe już istnieją." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Pakiet Pythona „qrcode” nie jest zainstalowany (np. apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1769,9 +1784,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Aby użyć awsbucket, awssecretkey i awsaccesskeyid muszą być również ustawione w config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Aby użyć awsbucket, awssecretkey i awsaccesskeyid muszą być również ustawione w config.yml!" +msgstr "Aby używać rclone, rclone_config i awsbucket muszą być one również ustawione w config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1794,11 +1808,6 @@ msgstr "Nieprawidłowy tag licencji \"{}\"! Używaj tylko tagów zgodnych z FSF msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Nieprawidłowy tag licencji \"{}\"! Używaj tylko tagów licencji skonfigurowanych w twoim pliku konfiguracji" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Nieoczekiwany cel dowiązania symbolicznego: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1808,7 +1817,6 @@ msgstr "Nieznany wpis {key} w {configname}" msgid "Unknown exception found!" msgstr "Znaleziono nieznany wyjątek!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1846,6 +1854,7 @@ msgstr "Nierozpoznane pole aplikacji '{fieldname}' w '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Nierozpoznana flaga kompilacji '{build_flag}' w '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1876,11 +1885,6 @@ msgstr "Nieużywana ścieżka scandelete: %s" msgid "Unused scanignore path: %s" msgstr "Nieużywana ścieżka scanignore: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Rozpakowywanie do %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Zaktualizuj informacje o repozytorium dla nowych pakietów" @@ -1894,6 +1898,7 @@ msgstr "Zaktualizuj dziennik przejrzystości plików binarnych dla adresu URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ma nieprawidłowy adres URL: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1913,12 +1918,7 @@ msgstr "UpdateCheckData nie jest prawidłowym adresem URL: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode jest ustawiony, ale wygląda na to, że checkupdates nie został jeszcze uruchomiony" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -#, fuzzy -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode jest ustawiony, ale wygląda na to, że checkupdates nie został jeszcze uruchomiony" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName jest ustawiony na znany identyfikator aplikacji, można go usunąć" @@ -1933,27 +1933,9 @@ msgstr "Przesyłanie {apkfilename} do androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Przesyłanie {apkfilename} do virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Zastosowanie" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Użycie: %s\n" - #: ../fdroidserver/lint.py -#, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "Użyj /HEAD zamiast/ master, aby wskazać plik w domyślnej gałęzi" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Użyj /HEAD zamiast/ master, aby wskazać plik w domyślnej gałęzi" +msgstr "Użyj /HEAD zamiast /master czy /main, aby wskazać plik w domyślnej gałęzi" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." @@ -1973,9 +1955,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Użyj \"{path}\" do konfiguracji s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Użyj \"{path}\" do konfiguracji s3cmd." +msgstr "Używanie \"{path}\" do synchronizacji ze zdalnym dyskiem." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1986,19 +1968,13 @@ msgid "Using APK Signature v3" msgstr "Używając APK Signature v3" #: ../fdroidserver/common.py -#, fuzzy msgid "Using JAR Signature" -msgstr "Używając APK Signature v2" +msgstr "Używanie podpisu JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Korzystanie z jarsignera Java nie jest zalecane do weryfikacji plików APK! Użyj apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Korzystanie z androguard od \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2010,9 +1986,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Korzystanie z istniejącego magazynu kluczy \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Użyj s3cmd do synchronizacji z: {url}" +msgstr "Używanie rsync do synchronizacji z: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2035,15 +2011,28 @@ msgstr "Sprawdź integralność pobranych pakietów" msgid "Verifying index signature:" msgstr "Weryfikowanie podpisu indeksu:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Weryfikacja pakietu {path} za pomocą apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Klucz VirusTotal API nie może przesyłać plików większych niż 32 MB, użyj {url}, aby przesłać {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Ostrzegaj o możliwych błędach metadanych" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Plik binarny WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Po skonfigurowaniu dla indeksów podpisanych utwórz na tym etapie tylko niepodpisane indeksy" @@ -2056,6 +2045,14 @@ msgstr "Podczas linkowania całego repozytorium yamllint jest domyślnie wyłąc msgid "When signing or verifying fails, exit with an error code." msgstr "Jeśli podpisanie lub weryfikacja nie powiedzie się, zakończ z kodem błędu." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Czy chcesz pobrać i zainstalować F-Droid.apk przez adb? (TAK/NIE)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Czy chcesz pobrać aplikacje ze strony f-droid.org? (TAK/NIE)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' używana podczas generowania kluczy" @@ -2068,6 +2065,11 @@ msgstr "Możesz użyć ANDROID_HOME, aby ustawić ścieżkę do SDK, tj .:" msgid "ZIP file archive" msgstr "Plik archiwum ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb zgłasza, że {serial} to \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2078,19 +2080,15 @@ msgstr "dodawanie pliku IdentityFile do {path}" msgid "adding to {name}: {path}" msgstr "dodaj do {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "niejednoznaczna opcja: %(option)s może dopasować %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "niejednoznaczna opcja: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner w build-tools;{version} przekazuje pliki APK z nieprawidłowymi podpisami v3, ignorując je." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2100,11 +2098,13 @@ msgstr "Nie znaleziono apksignera! Nie można podpisać ani zweryfikować nowocz msgid "apksigner not found, it's required for signing!" msgstr "apksigner nie znaleziono, jest wymagane do podpisania!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "Identyfikator aplikacji, na której ma działać" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2115,8 +2115,6 @@ msgstr "identyfikator aplikacji z opcjonalnym kodem wersji w postaci APPID [: VE msgid "archive_url needs to end with /archive" msgstr "archive_url musi kończyć się na /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2135,7 +2133,7 @@ msgstr "próba połączenia odsłoniętego SSH w celu przetestowania klucza wdro msgid "can not parse scrlib spec (not a string): '{}'" msgstr "can not parse scrlib spec (not a string):' {}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "nie można otworzyć „%(filename)s”: %(error)s" @@ -2149,14 +2147,10 @@ msgstr "nie można otworzyć adresu URL innego niż https: „{}”" msgid "cannot find required srclibs: \"{path}\"" msgstr "Nie można znaleźć wymaganych srclibs: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nie może mieć wielu argumentów o różnych argumentach" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2175,14 +2169,6 @@ msgstr "klonowanie {url}" msgid "commands from plugin modules:" msgstr "polecenia z modułów plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "złożony" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2214,10 +2200,6 @@ msgstr "nie można przeanalizować specyfikacji srclib (nie podano nazwy): '{}'" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "could not parse srclib spec (no ref specified):' {}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "nie można przeanalizować specyfikacji srclib (za dużo znaków '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2235,15 +2217,13 @@ msgstr "usuwanie: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "plik zależności bez blokady" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "wdrożony dziennik procesów {path} do {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2261,8 +2241,6 @@ msgstr "nie udało się pobrać sygnatur skanera z „{}”" msgid "executable binary, possibly code" msgstr "wykonywalny binarny, ewentualnie kod" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2271,20 +2249,14 @@ msgstr[0] "oczekiwany argument %s" msgstr[1] "oczekiwanych argumentów %s" msgstr[2] "oczekiwane argumenty %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "spodziewano się co najmniej jednego argumentu" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "spodziewano się co najwyżej jednego argumentu" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "oczekiwano jednego argumentu" @@ -2297,10 +2269,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "pobierz najnowszą wersję sygnatur z sieci" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "zmiennoprzecinkowy" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "wymuszaj błędy metadanych (domyślnie), aby były ostrzeżeniami lub aby zostały zignorowane." @@ -2313,8 +2281,6 @@ msgstr "klon git svn nie powiódł się" msgid "gzip file archive" msgstr "plik archiwum gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2328,35 +2294,21 @@ msgstr "index-v1 musi mieć podpis, użyj `fdroid signindex` aby go utworzyć!" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 musi mieć podpis, użyj `fdroid signindex`, aby go utworzyć!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "liczba całkowita (ang. integer)" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "nieprawidłowe %(type)s wartość: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "nieprawidłowy wybór: %(value)r (wybierz z %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "niepoprawna wartość parametru conflict_resolution: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2390,12 +2342,10 @@ msgid "mirror '%s' does not end with 'fdroid'!" msgstr "mirror '%s'nie kończy się na 'fdroid'!" #: ../fdroidserver/index.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "lustra ustawione dwukrotnie, w config.yml i {path}!" +msgstr "serwery lustrzane zostały ustawione dwukrotnie w config.yml i {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "wykluczające się wzajemnie argumenty muszą być opcjonalne" @@ -2414,30 +2364,15 @@ msgstr "brak \"ikony\" w {appid}" msgid "no APK supplied" msgstr "nie dostarczono pakietu APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "brak takiej opcji: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "nie znaleziono informacji o wersji!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nie znaleziono informacji o wersji" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "niedozwolone z argumentem %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2447,72 +2382,6 @@ msgstr "jeden z argumentów %s jest wymagany" msgid "only accepts strings, lists, and tuples" msgstr "akceptuje tylko łańcuchy, listy i krotki" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opcja %s: Jeśli naprawdę chcesz zainstalować wszystkie podpisane aplikacje, użyj --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "opcja %s: nieprawidłowa %s wartość: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opcja %s: nieprawidłowy wybór: %r (wybierz z %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opcja -%s nie został rozpoznany" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opcja -%s wymaga argumentu" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opcja --%s nie może mieć argumentu" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opcja --%s nie jest to unikalny prefiks" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opcja --%s nie został rozpoznany" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opcja --%s wymaga argumentu" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "opcjonalne argumenty" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opcje" @@ -2522,8 +2391,6 @@ msgstr "opcje" msgid "overwriting existing {path}" msgstr "nadpisanie istniejącego {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumenty pozycyjne" @@ -2556,19 +2423,15 @@ msgstr "repo_url musi kończyć się na /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync nie działa lub działa nieprawidłowo: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "nie zainstalowano ruamel.yaml, nie można zapisać metadanych." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd zsynchronizuj indeksy {path} do {url} i usuń" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd zsynchronizuj indeksy {path} do {url} i usuń" +msgstr "s3cmd synchronizuje indeksy z {path} do {url} i usuwa usunięte" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2583,17 +2446,7 @@ msgstr "serverwebroot: ścieżka nie kończy się na \"fdroid\", być może mia msgid "shared library" msgstr "biblioteka współdzielona" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "pokaż numer wersji programu i zakończ" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "pokaż ten komunikat pomocy i zakończ" @@ -2627,29 +2480,25 @@ msgstr "biblioteka statyczna" msgid "supplied reference binary has allowed signer {signer}" msgstr "dostarczony referencyjny plik binarny umożliwił podpis {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "wymagane są następujące argumenty: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "prawda" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "nieoczekiwany ciąg opcji: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "nieznana składnia (parser) %(parser_name)r (wybierz: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2660,9 +2509,7 @@ msgstr "nierozpoznane argumenty: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "niebezpieczne uprawnienia na '{config_file}' (powinno być 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "stosowanie: " @@ -2675,6 +2522,10 @@ msgstr "używając Apache libcloud do zsynchronizowania z {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com jest ograniczenie stawki, czeka na ponowną próbę..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "tak" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2688,21 +2539,19 @@ msgstr[2] "{0} apps, {1} kluczowych aliasów" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nie ma metadanych!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} ma wiele {name} plików, wygląda jak exploit Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} AndroidManifest.xml ma złą datę: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nie ma nazwy! Zamiast tego używam identyfikatora aplikacji." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2723,7 +2572,6 @@ msgstr "{appid} zawiera zarówno pliki APK, jak i pliki: {files}" msgid "{appid} is missing {name}" msgstr "{appid} brakuje {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2764,10 +2612,10 @@ msgstr "{file} jest pusty lub uszkodzony!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" nie istnieje! Sprawdź \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} jest przestarzałe, użyj {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} to duplikat {path2}, usuń jeden z nich!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2785,14 +2633,19 @@ msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" msgstr "{path} ma zły podpis pliku \"{pattern}\", możliwe wykorzystanie Janusa!" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "{ścieżka} została oznaczona przez virustotal {liczba} razy:" +msgstr "{path} została oznaczona przez virustotal {count} razy:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} ma niewłaściwy odcisk palca {fingerprint}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} nie jest słownikiem \"klucz: wartość\", lecz {datatype}!" #: ../fdroidserver/common.py #, python-brace-format @@ -2807,7 +2660,7 @@ msgstr "{path} inie jest listą, lecz {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} nie jest {expected_type}, lecz {datatype}!" #: ../fdroidserver/update.py #, python-brace-format @@ -2822,7 +2675,7 @@ msgstr "{path} więcej niż 200MB, przesłane ręcznie: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}: \"{code}\" nie jest prawidłowym kodem ISO_3166-1 alpha-2 country!" #: ../fdroidserver/update.py #, python-brace-format diff --git a/locale/pt/LC_MESSAGES/fdroidserver.po b/locale/pt/LC_MESSAGES/fdroidserver.po index 4986e1f8..84ee4ed9 100644 --- a/locale/pt/LC_MESSAGES/fdroidserver.po +++ b/locale/pt/LC_MESSAGES/fdroidserver.po @@ -1,15 +1,16 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. -# ssantos , 2020, 2021, 2022, 2023, 2024. +# ssantos , 2020, 2021, 2022, 2023, 2024, 2025. # Peter J. Mello , 2021. # Eduardo Rodrigues , 2021. # SC , 2022. +# Hugo Carvalho , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-680-ge1d3de71\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-08-12 18:05+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-04-06 16:45+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese \n" "Language: pt\n" @@ -17,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -41,21 +42,20 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem ficheiro de metadados correspondente!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "A chave \"isPrimary\" não deve ser adicionada em espelhos!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "O diretório raiz para \"local_copy_dir\" {path} não existe!" +msgstr "\"local_copy_dir\" {path} não existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' já está instalado no {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contém {name} ({version}) desatualizado" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,24 +74,13 @@ msgstr "\"{path}\" não é um formato de ficheiro aceito (use: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "\"{path}\" é assinado por uma chave que não é permitida:" +msgstr "\"{path}\" está acessado por uma chave que não é permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "A opção %(option)s requer o argumento %(number)d" -msgstr[1] "A opção %(option)s requer os argumentos %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +96,6 @@ msgstr "%d APKs falharam a serem assinados ou verificados!" msgid "%d problems found" msgstr "%d problemas encontrados" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opções]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +116,6 @@ msgstr "%s tem um SHA-256 ruim: %s" msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "opção %s não leva um valor" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" @@ -162,8 +136,6 @@ msgstr "'keystorepass' não encontrada em config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" @@ -177,11 +149,6 @@ msgstr "'sdk_path' não definido em 'config.yml'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' será em ordem aleatória! Use () ou [] se a ordem for importante!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -192,7 +159,7 @@ msgstr "'{path}' falhou ao executar!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern}" @@ -202,20 +169,22 @@ msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern} msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deve ser {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request só é executado num único appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" #: ../fdroidserver/lint.py msgid "/issues is missing" -msgstr "está faltando o /issues" +msgstr "/issues está em falta" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" @@ -293,16 +262,12 @@ msgstr "O caminho do SDK Android '{path}' não é um diretório!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" -msgstr "A ferramenta SDK do Android {cmd} não foi encontrada!" +msgstr "Ferramenta {cmd} do Android SDK não foi encontrada!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versions\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" @@ -329,6 +294,14 @@ msgstr "Arquivamento {apkfilename} com assinatura inválida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com UpdateCheckMode: HTTP deve ter um modelo." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Não automático a todos os avisos." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Sim automático a todos os avisos." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -338,7 +311,6 @@ msgstr "Tipo de entrada \"{mirrortype}\" incorreto na configuração de espelhos msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a cadeia de consulta: ?fingerprint =" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -381,7 +353,7 @@ msgstr "Repo construído baseado em \"%s\" com esta configuração:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" -msgstr "Não é possível atualizar automaticamente a aplicação sem CurrentVersionCode" +msgstr "Aplicação não pode ser auto-atualizada sem CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" @@ -389,16 +361,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha de leitura {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "As categorias '%s' não são válidas" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não são definidas" @@ -421,6 +400,10 @@ msgstr "Verificando o arquivamento para {appid} - apks:{integer}, keepversions:{ msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não usa cache, reprocessa todos os APKs" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Colorir o registo de saída" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." @@ -432,7 +415,11 @@ msgstr "Comando '%s' não reconhecido.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "Enviar mudanças" +msgstr "Enviar alterações" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Confirme as alterações, envie e faça um pedido de fusão" #: ../fdroidserver/metadata.py #, python-brace-format @@ -443,20 +430,17 @@ msgstr "Definições contraditórias de \"{field}\" entre ficheiros .yml e fiche msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Ficheiros de configuração conflitantes! Usando {newfile}, ignorando {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Não foi possível encontrar '{command}' no seu sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código de versão mais recente" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" @@ -476,6 +460,7 @@ msgstr "Não foi possível abrir o APK {path} para análise: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo \"{type}\" incorreto" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID da aplicação" @@ -502,6 +487,11 @@ msgstr "Novo contentor criado: \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "A criar '{config_file}' vazio" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando o diretório de log" @@ -564,11 +554,6 @@ msgstr "Descrição '%s' é apenas o resumo da app" msgid "Description has a duplicate line" msgstr "A descrição tem uma linha duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é numerada (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -617,15 +602,14 @@ msgstr "Não atualizar o repositório; útil quando testando uma compilação se msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Descarregue o F-Droid.apk utilizando espelhos que vazam menos para a rede" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descarregar espelhos completos de repos pequenos" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "A descarregar %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O descarregamento do repositório já falhou uma vez, não tento novamente." @@ -659,14 +643,6 @@ msgstr "ERRO: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERRO: este comando nunca deve ser usado para espelhar f-Droid.org!\n" -"Um espelho completo de f-Droid.org requer mais de 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de CI sem suporte, patches são bem-vindos!" @@ -679,12 +655,22 @@ msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ERRO: {key} em {path} não é \"arquivo\" ou \"repositório\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ERRO: {key} não é uma chave válida!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ERRO: o valor de {key} deve ser do tipo {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -705,9 +691,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "A variável de ambiente {{env: {var} não está definida!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Erro ao implementar 'github_releases', {} não está presente. (Pode ser necessário executar `fdroid update` primeiro.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -725,6 +716,10 @@ msgstr "Extrair metadados de aplicações de um repositório de origem" msgid "Extract signatures from APKs" msgstr "Extrato de assinaturas de APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "Não foi possível descarregar o F-Droid.apk de nenhuma fonte conhecida!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -794,10 +789,6 @@ msgstr "O ficheiro desapareceu enquanto era processado: {path}" msgid "Finished" msgstr "Terminado" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Os métodos de doação do Flattr pertencem no campo FlattrID:" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidos" @@ -829,7 +820,6 @@ msgstr "Ficheiro de financiamento ruim \"{path}\" encontrado para \"{name}\":" msgid "Found invalid appids in arguments" msgstr "appids inválidos encontrados em argumentos" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "versionCodes inválidos encontrados para algumas apps" @@ -894,15 +884,13 @@ msgstr "Git clean falhou" msgid "Git fetch failed" msgstr "Git fetch falhou" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune falhou" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falhou" @@ -940,13 +928,18 @@ msgstr "A ignorar '{field}' em metadados '{metapath}' porque é depreciado." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" -msgstr "A ignorar a entrada FUNDING.yml por mais de 2048: %s" +msgstr "A ignorar a entrada FUNDING.yml por mais que 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" msgstr "A ignorar o elemento mau no manifesto: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "A ignorar {oldfile} obsoleto, use {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " @@ -1032,16 +1025,12 @@ msgstr "VercodeOperation inválido: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation inválido: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID da aplicação {appid} inválido" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Booleano inválido '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" @@ -1154,6 +1143,11 @@ msgstr "Linha de serverwebroot malformada:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no ficheiro ZIP atingida: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "A configuração de espelho de {url} contém a chave \"isPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de ficheiros." @@ -1183,6 +1177,10 @@ msgstr "Android SDK não encontrado!" msgid "No attached devices found" msgstr "Nenhum aparelho anexado encontrado" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Nenhum dispositivo encontrado para `adb install`! Ligue um." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital no URL." @@ -1243,7 +1241,6 @@ msgstr "Nenhum certificado de assinatura encontrado em {path}" msgid "No such package: %s" msgstr "Nenhum pacote desses: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1278,7 +1275,6 @@ msgstr "Nada a fazer para {appid}." msgid "Now set these in config.yml:" msgstr "Agora configure estes em config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1296,26 +1292,28 @@ msgstr "O packagename do OBB não corresponde a um APK suportado:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está offline, a saltar a geração de espelhos de git até o `fdroid deploy'" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' está a faltar o valor 'packageNames'. A ignorar ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'projectUrl'. A ignorar ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'token'. A ignorar ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Somente PNG e JPEG são suportados para gráficos, encontrado: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Apenas mostrar diferenças com a Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Aceita apenas uma única chave \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1325,10 +1323,6 @@ msgstr "Processar apenas apps com atualizações automáticas" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação OpenCollective pertencem no campo OpenCollective:" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opções" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Saída de relatório JSON para ficheiro nomeado após APK." @@ -1386,6 +1380,11 @@ msgstr "Caminho até a keystore para a chave de assinatura do repositório" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimir a variável secreta para o terminal para copiar/colar fácilmente" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "O modo de privacidade foi ativado com base na sua localização ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1472,6 +1471,15 @@ msgstr "Lendo {apkfilename} do cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar as regras e assinaturas do scanner da rede no cache" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Recuso assinar '{path}', o ficheiro existe nas pastas {dir1} e {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Remover tarball de código-fonte e todos APKs se for verificado com sucesso." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Apagando ficheiros especificados" @@ -1485,13 +1493,10 @@ msgstr "A remover {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "O modo de atualização repoTrunk só faz sentido em repositórios de git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Redefinir e criar um novo servidor de compilação, mesmo que o existente parecer normal." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1506,6 +1511,11 @@ msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Nova tentativa de descarga com falha: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Regravar todos os ficheiros de metadados" @@ -1522,7 +1532,7 @@ msgstr "Executar no repo git que tem alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Passar por cima de {cibase} para encontrar -debug.apk. e ignorar repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1571,6 +1581,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Scanner encontrou {} problema" msgstr[1] "Scanner encontrou {} problemas" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "A verificar a APK em busca de blocos de assinatura extra." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "A verificar o APK com dexdump por classes não-livres conhecidas." @@ -1689,7 +1703,11 @@ msgstr "Modo de atualização de marcações usado no git-svn, mas a repo não f #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." -msgstr "Modo de teste - coloque a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." +msgstr "Modo de teste - ponha a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "O pacote Python \"qrcode\" não está instalado (por exemplo, apt-get install python3-qrcode)!" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py @@ -1699,7 +1717,7 @@ msgstr "O código de versão OBB deve estar após \"{name}.\":" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" -msgstr "O URL base para o registro de mudanças do repositório (predefinição: https://f-droid.org)" +msgstr "O URL base para o registo de mudanças do repositório (predefinição: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" @@ -1763,9 +1781,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" +msgstr "Para usar rclone, rclone_config e awsbucket também devem ser definidos no config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1788,11 +1805,6 @@ msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas aprovad msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas de licença configuradas no seu ficheiro de configuração" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Alvo symlink inesperado: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1802,7 +1814,6 @@ msgstr "Entrada {key} desconhecida em {configname}" msgid "Unknown exception found!" msgstr "Exceção desconhecida!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1840,6 +1851,7 @@ msgstr "Campo de aplicação '{fieldname}' não reconhecido em '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bandeira de compilação '{build_flag}' não reconhecida em '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1870,11 +1882,6 @@ msgstr "O caminho de scandelete não é usado: %s" msgid "Unused scanignore path: %s" msgstr "O caminho de scanignore não é usado: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "A descompactar para %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualizar a informação do repositório para novos pacotes" @@ -1888,6 +1895,7 @@ msgstr "Atualizar o registo de transparência de binário para um URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1907,11 +1915,7 @@ msgstr "UpdateCheckData não é uma URL válida: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode está definido, mas parece que o updatecheckupdates ainda não foi executado" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (o nome da verificação de atualização) é definido como o ID comun da aplicação - pode ser removido" @@ -1926,27 +1930,10 @@ msgstr "A enviar {apkfilename} ao androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "A enviar {apkfilename} ao virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Utilização" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Utilização: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar a um ficheiro no ramo predefinido" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." @@ -1965,9 +1952,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Usando \"{path}\" para configurar s3cmd." +msgstr "A usar \"{path}\" para sincronizar com o armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1985,11 +1972,6 @@ msgstr "A usar a assinatura JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Usando androguard de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2001,9 +1983,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Usando s3cmd para sincronizar com: {url}" +msgstr "A usar rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2026,15 +2008,28 @@ msgstr "Verifique a integridade dos pacotes descarregados" msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "A verificar o pacote {path} com apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Ficheiro binário WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" @@ -2047,6 +2042,14 @@ msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição msgid "When signing or verifying fails, exit with an error code." msgstr "Se assinar ou verificar falhar, sair com um código de erro." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Gostaria de descarregar e instalar o F-Droid.apk via adb? (SIM/não)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Gostaria de descarregar a(s) aplicação(ões) do f-droid.org? (SIM/não)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" @@ -2059,6 +2062,11 @@ msgstr "Pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou seja:" msgid "ZIP file archive" msgstr "Arquivo de ficheiros ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb reporta {serial} é \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2069,19 +2077,15 @@ msgstr "adicionando IdentityFile a {path}" msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s poderia corresponder %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opção ambígua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner nos build-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2091,11 +2095,13 @@ msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs m msgid "apksigner not found, it's required for signing!" msgstr "Nenhum apksigner encontrado, é necessário para assinar!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do ficheiro para operar" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2106,8 +2112,6 @@ msgstr "applicationID com versionCode opcional na forma APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url precisa de terminar com /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2126,7 +2130,7 @@ msgstr "tentar a conexão nua por SSH para testar a implantação da chave:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar as especificações do scrlib (não é uma cadeia): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" @@ -2140,14 +2144,10 @@ msgstr "não é possível abrir o url não-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2166,14 +2166,6 @@ msgstr "clonagem {url}" msgid "commands from plugin modules:" msgstr "comandos dos módulos de plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complexo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2204,10 +2196,6 @@ msgstr "não foi possível analisar a especificação srclib (nenhum nome especi msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "não foi possível analisar a especificação srclib (demais símbolos '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2225,15 +2213,13 @@ msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "ficheiro de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registo de processo implantado {path} a {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2251,8 +2237,6 @@ msgstr "a descarga de assinaturas de scanner de '{}' falhou" msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2260,20 +2244,14 @@ msgid_plural "expected %s arguments" msgstr[0] "%s argumento esperado" msgstr[1] "%s argumentos esperados" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" @@ -2286,10 +2264,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "buscar a versão de assinaturas mais recente da Web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "ponto flutuante" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." @@ -2302,8 +2276,6 @@ msgstr "git svn clone falhou" msgid "gzip file archive" msgstr "arquivo de ficheiros gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2317,35 +2289,21 @@ msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para o criar!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "inteiro" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2383,8 +2341,6 @@ msgstr "espelho '%s' não termina com 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e em {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" @@ -2403,30 +2359,15 @@ msgstr "nenhum \"ícone\" em {appid}" msgid "no APK supplied" msgstr "nenhum APK fornecido" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "não tem tal opção: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "não há informações de versão encontrada!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2436,72 +2377,6 @@ msgstr "um dos argumentos %s é necessário" msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opção %s: se realmente deseja instalar todas as apps assinadas, use --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "Opção %s: valor %s inválido: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opção %s: escolha inválida: %r (escolha entre %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opção -%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opção -%s requer um argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opção --%s não pode ter argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opção --%s não é prefixo único" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opção --%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opção --%s necessita argumento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumentos opcionais" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" @@ -2511,8 +2386,6 @@ msgstr "opções" msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" @@ -2545,19 +2418,15 @@ msgstr "repo_url precisa de terminar com /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "o ruamel.yaml não está instalado, não é possível escrever metadados." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e apaga" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sincroniza índices {path} para {url} e apaga" +msgstr "s3cmd sincroniza os índices de {path} para {url} e elimina os removidos" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2570,19 +2439,9 @@ msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez queria usar #: ../fdroidserver/scanner.py msgid "shared library" -msgstr "biblioteca compartilhada" +msgstr "biblioteca partilhada" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostrar versão do programa e sair" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar esta ajuda e sair" @@ -2616,29 +2475,25 @@ msgstr "biblioteca estática" msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido tem o assinante permitido {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "verdadeiro" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2649,9 +2504,7 @@ msgstr "argumentos não reconhecidos: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilização: " @@ -2664,6 +2517,10 @@ msgstr "usando o Apache libcloud para sincronizar com {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está a limitar a taxa, à espera para voltar a tentar..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sim" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2676,21 +2533,19 @@ msgstr[1] "{0} apps, {1} aliases chave" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} tem vários ficheiros {name} que, parece explorar a Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! A usar o ID da aplicação em vez disso." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2711,7 +2566,6 @@ msgstr "{appid} tem APKs e ficheiros: {files}" msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2752,10 +2606,10 @@ msgstr "{file} está em branco ou corrompido!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} está obsoleto, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} é uma duplicata de {path2}, remova uma!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2777,6 +2631,11 @@ msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi marcado por virustotal {count} vezes:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} tem a impressão digital errada ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" @@ -2805,7 +2664,7 @@ msgstr "{path} tem um tamanho de zero!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" -msgstr "{path} mais de 200MB, enviar manualmente: {url}" +msgstr "{path} mais que 200MB, enviar manualmente: {url}" #: ../fdroidserver/lint.py #, python-brace-format diff --git a/locale/pt_BR/LC_MESSAGES/fdroidserver.po b/locale/pt_BR/LC_MESSAGES/fdroidserver.po index ce11b7db..ea2ad833 100644 --- a/locale/pt_BR/LC_MESSAGES/fdroidserver.po +++ b/locale/pt_BR/LC_MESSAGES/fdroidserver.po @@ -2,7 +2,7 @@ # Copyright (C) YEAR Free Software Foundation, Inc. # Wellington Terumi Uemura , 2020. # André Marcelo Alvarenga , 2020. -# Hans-Christoph Steiner , 2020. +# Hans-Christoph Steiner , 2020, 2024. # Rafael Fontenelle , 2020, 2021. # ssantos , 2020. # The Cats , 2020. @@ -11,20 +11,24 @@ # The Cats , 2023. # lucasmz-dev , 2024. # Jose Delvani , 2024. +# Jose Delvani , 2024. +# LucasMZ , 2024, 2025. +# dedakir923 , 2024. +# Igor Rückert , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-07-07 07:41+0000\n" -"Last-Translator: lucasmz-dev \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-26 10:00+0000\n" +"Last-Translator: Igor Rückert \n" "Language-Team: Portuguese (Brazil) \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: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -48,6 +52,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem arquivo de metadados correspondente!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "A chave \"isPrimary\" não deve ser adicionada em espelhos!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -58,11 +66,6 @@ msgstr "O diretório raiz para \"local_copy_dir\" {path} não existe!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" já está instalado em {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contém {name} ({version}) desatualizado" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -88,17 +91,6 @@ msgstr "\"{path}\" é assinado por uma chave que não é permitida:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "opção %(option)s necessita %(number)d argumento" -msgstr[1] "opção %(option)s necessita %(number)d argumentos" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -114,14 +106,6 @@ msgstr "%d APKs falharam em serem assinados ou verificados!" msgid "%d problems found" msgstr "%d problemas encontrados" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opções]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -142,13 +126,6 @@ msgstr "%s tem SHA-256 ruim: %s" msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "opção %s não leva um valor" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" @@ -169,8 +146,6 @@ msgstr "'keystorepass' não encontrada em config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" @@ -184,11 +159,6 @@ msgstr "\"sdk_path\" não definido em config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' será em ordem aleatória! Use () ou [] se a ordem for importante!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -199,7 +169,7 @@ msgstr "'{path}' falhou ao executar!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um{field} válido em {appid}. Regex padrão: {pattern}" @@ -209,13 +179,15 @@ msgstr "'{value}' não é um{field} válido em {appid}. Regex padrão: {pattern} msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deveria ser {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request roda somente com um único appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" @@ -306,10 +278,6 @@ msgstr "A ferramenta SDK do Android {cmd} não foi encontrada!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "O aplicativo tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "O aplicativo tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "O aplicativo tem NoSourceSince ou ArchivePolicy \"0 versões\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" @@ -336,6 +304,14 @@ msgstr "Arquivamento {apkfilename} com assinatura inválida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com atualização CheckMode: HTTP deve ter um padrão." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Não automático à todas as perguntas." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Sim automático à todas as perguntas." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -345,7 +321,6 @@ msgstr "Tipo de entrada incorreto \"{mirrortype}\" na configuração de espelhos msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a string de consulta:? Fingerprint =" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -396,16 +371,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível criar devido a {} erro durante a digitalização" msgstr[1] "Não é possível criar devido a {} erros durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha ao ler {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Categorias '%s' não são válidas" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não estão definidas" @@ -428,6 +410,10 @@ msgstr "Verificar o arquivamento de {appid} - apks:{integer}, keepversions:{keep msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não utiliza o cache, reprocessa todos os APKs" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Colorir a saída de registros" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." @@ -441,6 +427,10 @@ msgstr "Comando \"%s\" não reconhecido.\n" msgid "Commit changes" msgstr "Enviar mudanças" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Fazer commit das mudanças, push, e então faça uma merge request" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -450,20 +440,17 @@ msgstr "Definições conflitantes de \"{field}\" entre arquivos .yml e localizad msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Arquivos de configuração conflitantes! Usando {newfile}, ignorando {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Impossível encontrar '{command}' em seu sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código da versão mais recente" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" @@ -483,6 +470,7 @@ msgstr "Impossível abrir o APK {path} para análise: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo incorreto \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID do aplicativo" @@ -509,6 +497,11 @@ msgstr "Novo container criado \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Criando '{config_file}' vazio" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando diretório de registro" @@ -571,11 +564,6 @@ msgstr "Descrição '%s' é apenas o resumo do app" msgid "Description has a duplicate line" msgstr "Descrição tem uma linha duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Descrição tem uma lista (%s), mas não é com marcadores (*) nem numerada (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -624,15 +612,14 @@ msgstr "Não atualizar o repositório; útil quando testando uma compilação se msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Faça o download do F-Droid.apk usando mirrors (sites espelhos) que vazam menos privacidade na rede" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Faça o download de espelhos completos de pequenos repositórios" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Baixando %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O download do repositório já falhou uma vez, não tente novamente." @@ -666,14 +653,6 @@ msgstr "ERRO: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERRO: este comando nunca deve ser usado para espelhar o f-droid.org!\n" -"Um espelho completo de f-droid.org requer mais de 200 GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de IC não suportado, correções bem-vindas!" @@ -686,12 +665,22 @@ msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ERRO: {key} em {path} não é um \"arquivamento\" ou \"repositório\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ERRO: {key} não é uma chave válida!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ERRO: o valor de {key} deve ser do tipo {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -712,9 +701,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "A variável de ambiente {{env: {var} não está definida!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Erro ao implementar 'github_releases', {} não está presente. (Talvez seja necessário executar `fdroid update` primeiro)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -732,6 +726,10 @@ msgstr "Extrair metadados de aplicativos de um repositório de origem" msgid "Extract signatures from APKs" msgstr "Extrair assinaturas de APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk não pode ser baixado de nenhuma fonte conhecida!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -801,10 +799,6 @@ msgstr "O arquivo desapareceu enquanto era processado: {path}" msgid "Finished" msgstr "Acabado" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Métodos de doação Flattr pertencem ao campo FlattrID" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidas" @@ -836,7 +830,6 @@ msgstr "Encontrado arquivo inválido \"{path}\" de financiamento para \"{name}\" msgid "Found invalid appids in arguments" msgstr "Encontrou apps inválidos em argumentos" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Encontrado versões de códigos inválidas para alguns apps" @@ -901,15 +894,13 @@ msgstr "Falha ao limpar o Git" msgid "Git fetch failed" msgstr "Falha no 'fetch' do Git" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Falha na remoção do Git" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Falha no 'reset' do Git" @@ -954,6 +945,11 @@ msgstr "Ignorando entrada de FUNDING.yml maior que 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorando o elemento mau no manifesto: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Ignorando {oldfile} obsoleto, use {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " @@ -1039,16 +1035,12 @@ msgstr "Versão de Operação de Código inválido: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Versão de Operação de Código inválido: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID do aplicativo {appid} inválido" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Booleano inválido '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" @@ -1161,6 +1153,11 @@ msgstr "Linha mal-formada do 'serverwebroot':" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no arquivo ZIP atingida: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "A configuração de espelho de {url} contém a chave \"isPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de arquivos." @@ -1190,6 +1187,10 @@ msgstr "Nenhum 'Android SDK' foi encontrado!" msgid "No attached devices found" msgstr "Nenhum dispositivo conectado encontrado" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Nenhum dispositivo foi encontrado usando o comando `adb install`! Por favor, conecte um." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital (fingerprint) no URL." @@ -1250,7 +1251,6 @@ msgstr "Nenhum certificado de assinatura encontrado em {path}" msgid "No such package: %s" msgstr "Nenhum pacote desse tipo: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1285,7 +1285,6 @@ msgstr "Nada a fazer para {appid}." msgid "Now set these in config.yml:" msgstr "Agora defina estes em config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1303,26 +1302,28 @@ msgstr "O nome do pacote do OBB não corresponde a um APK suportado:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está desconectada, pulando geração de espelhos de git até o `fdroid deploy'" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'packageNames'. ignorando ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'projectUrl'. ignorando ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' está faltando o valor 'token'. ignorando ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Apenas PNG e JPEG são suportados para gráficos, encontrados: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Apenas mostrar diferenças com a Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Aceita apenas uma única chave \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1332,10 +1333,6 @@ msgstr "Processar apenas apps com atualizações automáticas" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação opencollective pertencem ao campo OpenCollective" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opções" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Exporte a saída do relatório JSON para um nome de arquivo após APK." @@ -1393,6 +1390,11 @@ msgstr "Caminho até a keystore para a chave de assinatura do repositório" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprima a variável secreta no terminal para facilitar a cópia/colagem" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "O modo de privacidade foi ativado com base em sua localidade ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1479,6 +1481,15 @@ msgstr "Lendo {apkfilename} do cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar em cache regras e assinaturas do scanner da rede" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Recusando assinar '{path}', o arquivo existe nas pastas {dir1} e {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Remover pacote de código-fonte e qualquer APK se verificado com sucesso." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Removendo arquivos especificados" @@ -1492,13 +1503,10 @@ msgstr "Removendo {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomeia arquivos APK que não correspondem a pacote.nome_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "O modo de atualização repoTrunk só faz sentido em repositórios git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Redefinir e criar um novo servidor de compilação, mesmo que o existente parecer normal." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1513,6 +1521,11 @@ msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Nova tentativa de download com falha: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Reescreve todos os arquivos de metadados" @@ -1529,7 +1542,7 @@ msgstr "Executar no repositório do Git que tenha alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Execute {cibase} para encontrar -debug.apk. e ignore repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1578,6 +1591,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "O Scanner encontrou {} problema" msgstr[1] "O Scanner encontrou {} problemas" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Verificando o APK em busca de blocos de assinatura adicionais." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Verificando o APK com dexdump por classes não-livres conhecidas." @@ -1698,6 +1715,10 @@ msgstr "Modo de atualização de tags usado no git-svn, mas o repositório não msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de teste - coloque a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "O pacote Python \"qrcode\" não está instalado (por exemplo, apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1770,9 +1791,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" +msgstr "Para usar rclone, rclone_config e awsbucket devem ser configurados em config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1795,11 +1815,6 @@ msgstr "A etiqueta da licença foi inesperada \"{}\"! Use apenas etiquetas FSF o msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "A etiqueta da licença foi inesperada \"{}\"! Use apenas as etiquetas configuradas no seu arquivo de configuração" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Destino de symlink inesperado: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1809,7 +1824,6 @@ msgstr "Entrada desconhecida {key} em {configname}" msgid "Unknown exception found!" msgstr "Exceção desconhecida encontrada!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1847,6 +1861,7 @@ msgstr "O campo '{fieldname}' não foi reconhecido em '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "O sinalizador de construção '{build_flag}' desconhecido em '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1877,11 +1892,6 @@ msgstr "Caminho scandelete não usado: %s" msgid "Unused scanignore path: %s" msgstr "Caminho scanignore não usado: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Descompactando para %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualiza as informações do repositório para novos pacotes" @@ -1895,6 +1905,7 @@ msgstr "Atualiza o log de transparência de um binário para um URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1912,13 +1923,9 @@ msgstr "UpdateCheckData não é uma URL válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode está definido, mas parece que o updatecheckupdates ainda não foi executado" +msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (atualização da verificação do nome) é definido como o ID comun do aplicativo - pode ser removido" @@ -1933,27 +1940,10 @@ msgstr "Enviando o {apkfilename} para o androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Enviando o {apkfilename} para o virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Uso" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Uso: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar para um arquivo na ramificação padrão" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Use /HEAD em vez de /master para apontar em um arquivo na ramificação predefinida" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." @@ -1972,9 +1962,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Usando \"{path}\" para configurar s3cmd." +msgstr "Usando \"{path}\" para sincronização com armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1992,11 +1982,6 @@ msgstr "Usando assinatura JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Usando androguard de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2008,9 +1993,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Usando s3cmd para sincronizar com: {url}" +msgstr "Usando rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2033,15 +2018,28 @@ msgstr "Verifica a integridade dos pacotes baixados" msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Verificando o pacote {path} com apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave API do VirusTotal não pode carregar arquivos maiores que 32MB, utilize {url} para enviar para {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisa sobre possíveis erros de metadados" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Arquivo binário WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" @@ -2054,6 +2052,14 @@ msgstr "Ao cotar todo o repositório, o yamllint é desativado por padrão. Inde msgid "When signing or verifying fails, exit with an error code." msgstr "Ao assinar ou verificar falhar, um código de erro será lançado." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Gostaria de baixar e instalar F-Droid.apk via adb? (SIM/NÃO)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Gostaria de baixar aplicativo(s) de f-droid.org? (SIM/NÃO)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" @@ -2066,6 +2072,11 @@ msgstr "Você pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou s msgid "ZIP file archive" msgstr "Arquivo ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "O adb informa que {serial} é \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2076,19 +2087,15 @@ msgstr "adicionando IdentityFile a {path}" msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s pode corresponder a %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opção ambígua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner no builds-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2098,11 +2105,13 @@ msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs m msgid "apksigner not found, it's required for signing!" msgstr "o apksigner não foi encontrado, ele é necessário para assinar!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do arquivo para operar" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2113,8 +2122,6 @@ msgstr "applicationId com versionCode opcional na forma APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url precisa terminar com /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2133,7 +2140,7 @@ msgstr "tentando uma conexão SSH vazia para testar a chave de implantação:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar a especificação scrlib (não uma string): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" @@ -2147,14 +2154,10 @@ msgstr "não é possível abrir a url não-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2173,14 +2176,6 @@ msgstr "clonagem {url}" msgid "commands from plugin modules:" msgstr "comandos a partir dos módulos de plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complexo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2211,10 +2206,6 @@ msgstr "não foi possível analisar a especificação srclib (nenhum nome especi msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência sem especificação): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "não foi possível analisar a especificação srclib (excesso de sinais '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2232,15 +2223,13 @@ msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "arquivo de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registro de processo implantado {path} para {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2258,8 +2247,6 @@ msgstr "o download de assinaturas de scanner de '{}' falhou" msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2267,20 +2254,14 @@ msgid_plural "expected %s arguments" msgstr[0] "foi previsto %s argumento" msgstr[1] "foi previsto %s argumentos" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" @@ -2293,10 +2274,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "obter a versão de assinaturas mais recente da Web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "ponto flutuante" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." @@ -2309,8 +2286,6 @@ msgstr "git svn clone falhou" msgid "gzip file archive" msgstr "arquivo gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2324,35 +2299,21 @@ msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para criá-la!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "inteiro" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2390,8 +2351,6 @@ msgstr "espelho '%s' não termina com 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" @@ -2410,30 +2369,15 @@ msgstr "nenhum \"ícone\" em {appid}" msgid "no APK supplied" msgstr "nenhum APK fornecido" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "não tem tal opção: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "não há informações de versão encontrada!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2443,72 +2387,6 @@ msgstr "um dos argumentos %s é necessário" msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opção %s: se você realmente deseja instalar todas as apps assinadas, use --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "Opção %s: valor %s inválido: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opção %s: escolha inválida: %r (escolha entre %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opção -%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "a opção -%s necessita de argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opção --%s não pode ter argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opção --%s não é prefixo único" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opção --%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opção --%s necessita argumento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumentos opcionais" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" @@ -2518,8 +2396,6 @@ msgstr "opções" msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" @@ -2552,19 +2428,15 @@ msgstr "repo_url precisa terminar com /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "o ruamel.yaml não está instalado, não é possível escrever os metadados." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e exclui" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sincroniza índices {path} para {url} e exclui" +msgstr "s3cmd sincroniza os índices de {path} para {url} e exclui os índices removidos" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2579,17 +2451,7 @@ msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez você tenha msgid "shared library" msgstr "biblioteca compartilhada" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostra o número da versão do programa e sai" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostra esta mensagem de ajuda e sai" @@ -2623,29 +2485,25 @@ msgstr "biblioteca estática" msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido autorizou o signatário {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "verdadeiro" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2656,9 +2514,7 @@ msgstr "argumentos não reconhecidos: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "uso: " @@ -2671,6 +2527,10 @@ msgstr "usando o Apache libcloud para sincronizar com {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está limitando a taxa, esperando para tentar novamente ..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sim" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2683,21 +2543,19 @@ msgstr[1] "{0} apls, {1} codinome de chaves" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} tem vários arquivos {name} que, parece explorar a Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! Usando o ID do applicativo em vez disso." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2718,7 +2576,6 @@ msgstr "{appid} tem APKs e arquivos: {files}" msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2759,10 +2616,10 @@ msgstr "o {file} está vazio ou está corrompido!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} foi descontinuado, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} é uma duplicata de {path2}, remova uma!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2784,6 +2641,11 @@ msgstr "{path} tem uma má assinatura de arquivo \"{pattern}\", um exploração msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi sinalizado pelo virustotal {count} vezes:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} tem a impressão digital errada ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/pt_PT/LC_MESSAGES/fdroidserver.po b/locale/pt_PT/LC_MESSAGES/fdroidserver.po index 499c48a8..e9f15dfa 100644 --- a/locale/pt_PT/LC_MESSAGES/fdroidserver.po +++ b/locale/pt_PT/LC_MESSAGES/fdroidserver.po @@ -2,15 +2,17 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # Manuela Silva , 2020. -# ssantos , 2020, 2021, 2022, 2023, 2024. -# Hans-Christoph Steiner , 2020, 2022. +# ssantos , 2020, 2021, 2022, 2023, 2024, 2025. +# Hans-Christoph Steiner , 2020, 2022, 2024. # Peter J. Mello , 2021. +# Fat Potato , 2024. +# Hugo Carvalho , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-08-12 18:05+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-05-30 07:19+0000\n" "Last-Translator: ssantos \n" "Language-Team: Portuguese (Portugal) \n" "Language: pt_PT\n" @@ -18,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.7-dev\n" +"X-Generator: Weblate 5.12-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -42,21 +44,20 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" não tem ficheiro de metadados correspondente!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "A chave \"isPrimary\" não deve ser adicionada em espelhos!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "O diretório raiz para \"local_copy_dir\" {path} não existe!" +msgstr "\"local_copy_dir\" {path} não existe!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' já está instalado no {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" contém {name} ({version}) desatualizado" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,24 +76,13 @@ msgstr "\"{path}\" não é um formato de ficheiro aceito (use: metadata/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "\"{path}\" é assinado por uma chave que não é permitida:" +msgstr "\"{path}\" está acessado por uma chave que não é permitida:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" não é uma URL válida!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "A opção %(option)s requer o argumento %(number)d" -msgstr[1] "A opção %(option)s requer os argumentos %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -108,14 +98,6 @@ msgstr "%d APKs falharam a serem assinados ou verificados!" msgid "%d problems found" msgstr "%d problemas encontrados" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opções]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -136,13 +118,6 @@ msgstr "%s tem um SHA-256 ruim: %s" msgid "%s is not an accepted build field" msgstr "%s não é um campo criado aceito" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "opção %s não leva um valor" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' não foi encontrada em config.yml!" @@ -163,8 +138,6 @@ msgstr "'keystorepass' não encontrada em config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' não encontrada em config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' é um argumento inválido para posicionadores" @@ -178,11 +151,6 @@ msgstr "'sdk_path' não definido em 'config.yml'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' é muito antigo, fdroid requer build-tools-{version} ou mais recente!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' será em ordem aleatória! Use () ou [] se a ordem for importante!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -193,7 +161,7 @@ msgstr "'{path}' falhou ao executar!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' tem um formato inválido, deveria ser um dicionário!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern}" @@ -203,20 +171,22 @@ msgstr "'{value}' não é um {field} válido em {appid}. Modelo regex: {pattern} msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' não é um {field} válido, deve ser {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request só é executado num único appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate falhou para {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() não definida" #: ../fdroidserver/lint.py msgid "/issues is missing" -msgstr "está faltando o /issues" +msgstr "/issues está em falta" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" @@ -294,16 +264,12 @@ msgstr "O caminho do SDK Android '{path}' não é um diretório!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" -msgstr "A ferramenta SDK do Android {cmd} não foi encontrada!" +msgstr "Ferramenta {cmd} do Android SDK não foi encontrada!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes para fixar o certificado." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "A app tem NoSourceSince ou ArchivePolicy \"0 versions\" ou 0, mas AutoUpdateMode ou UpdateCheckMode não são None" @@ -330,6 +296,14 @@ msgstr "Arquivamento {apkfilename} com assinatura inválida!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode com UpdateCheckMode: HTTP deve ter um modelo." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Não automático a todos os avisos." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Sim automático a todos os avisos." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -339,7 +313,6 @@ msgstr "Tipo de entrada \"{mirrortype}\" incorreto na configuração de espelhos msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL base para espelhar, pode incluir a chave de assinatura de índice usando a cadeia de consulta: ?fingerprint =" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -382,7 +355,7 @@ msgstr "Repo construído baseado em \"%s\" com esta configuração:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" -msgstr "Não é possível atualizar automaticamente a aplicação sem CurrentVersionCode" +msgstr "Aplicação não pode ser auto-atualizada sem CurrentVersionCode" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" @@ -390,16 +363,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Não é possível construir devido a erro {} durante a digitalização" msgstr[1] "Não é possível construir devido a erros {} durante a digitalização" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Falha de leitura {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Não é possível reescrever \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "As categorias '%s' não são válidas" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "As categorias não são definidas" @@ -422,6 +402,10 @@ msgstr "Verificando o arquivamento para {appid} - apks:{integer}, keepversions:{ msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Atualização limpa - não usa cache, reprocessa todos os APKs" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Colorir o registo de saída" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorias separadas por vírgula." @@ -433,7 +417,11 @@ msgstr "Comando '%s' não reconhecido.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "Enviar mudanças" +msgstr "Enviar alterações" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Confirme as alterações, envie e faça um pedido de fusão" #: ../fdroidserver/metadata.py #, python-brace-format @@ -444,20 +432,17 @@ msgstr "Definições contraditórias de \"{field}\" entre ficheiros .yml e fiche msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumentos conflitantes: \"--verbose\" e \"--quiet\" não podem ser especificados ao mesmo tempo." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Ficheiros de configuração conflitantes! Usando {newfile}, ignorando {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Não foi possível encontrar '{command}' no seu sistema" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Não foi possível encontrar o código de versão mais recente" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Não foi possível encontrar o nome da versão mais recente" @@ -477,6 +462,7 @@ msgstr "Não foi possível abrir o APK {path} para análise: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Não foi possível analisar o tamanho \"{size}\", tipo \"{type}\" incorreto" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Não foi possível encontrar o ID da aplicação" @@ -503,6 +489,11 @@ msgstr "Novo contentor criado: \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Criando \"{path}\" para configurar s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "A criar '{config_file}' vazio" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Criando o diretório de log" @@ -565,11 +556,6 @@ msgstr "Descrição '%s' é apenas o resumo da app" msgid "Description has a duplicate line" msgstr "A descrição tem uma linha duplicada" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é numerada (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,15 +604,14 @@ msgstr "Não atualizar o repositório; útil quando testando uma compilação se msgid "Don't use rsync checksums" msgstr "Não usar as somas de verificação (checksums) do rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Descarregue o F-Droid.apk utilizando espelhos que vazam menos para a rede" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descarregar espelhos completos de repos pequenos" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "A descarregar %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "O descarregamento do repositório já falhou uma vez, não tento novamente." @@ -660,14 +645,6 @@ msgstr "ERRO: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERRO: este comando nunca deve ser usado para espelhar f-Droid.org!\n" -"Um espelho completo de f-Droid.org requer mais que 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERRO: tipo de CI sem suporte, patches são bem-vindos!" @@ -680,12 +657,22 @@ msgstr "ERRO: host de git \"%s\" não suportado, patches são bem-vindos!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ERRO: {key} em {path} não é \"arquivo\" ou \"repositório\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ERRO: {key} não é uma chave válida!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ERRO: o valor de {key} deve ser do tipo {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERRO: {key}:{subkey} em {path} não está nas chaves permitidas: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -706,9 +693,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "A variável de ambiente {var} de {configname} não está definida!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "A variável de ambiente {{env: {var} não está definida!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Erro ao implementar 'github_releases', {} não está presente. (Pode ser necessário executar `fdroid update` primeiro.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -726,6 +718,10 @@ msgstr "Extrair metadados de aplicações de um repositório de origem" msgid "Extract signatures from APKs" msgstr "Extrato de assinaturas de APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "Não foi possível descarregar o F-Droid.apk de nenhuma fonte conhecida!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -795,10 +791,6 @@ msgstr "O ficheiro desapareceu enquanto era processado: {path}" msgid "Finished" msgstr "Terminado" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Os métodos de doação do Flattr pertencem no campo FlattrID:" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tags HTML proibidos" @@ -830,7 +822,6 @@ msgstr "Ficheiro de financiamento ruim \"{path}\" encontrado para \"{name}\":" msgid "Found invalid appids in arguments" msgstr "appids inválidos encontrados em argumentos" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "versionCodes inválidos encontrados para algumas apps" @@ -895,15 +886,13 @@ msgstr "Git clean falhou" msgid "Git fetch failed" msgstr "Git fetch falhou" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune falhou" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head falhou: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset falhou" @@ -948,6 +937,11 @@ msgstr "A ignorar a entrada FUNDING.yml por mais que 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "A ignorar o elemento mau no manifesto: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "A ignorar {oldfile} obsoleto, use {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorando o pacote sem metadados: " @@ -1033,16 +1027,12 @@ msgstr "VercodeOperation inválido: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation inválido: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID da aplicação {appid} inválido" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Booleano inválido '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Lista com marcadores inválida" @@ -1155,6 +1145,11 @@ msgstr "Linha de serverwebroot malformada:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Profundidade máxima de recursão no ficheiro ZIP atingida: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "A configuração de espelho de {url} contém a chave \"isPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Espelha todo o repositório e pacotes, todos os tipos de ficheiros." @@ -1184,6 +1179,10 @@ msgstr "Android SDK não encontrado!" msgid "No attached devices found" msgstr "Nenhum aparelho anexado encontrado" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Nenhum dispositivo encontrado para `adb install`! Ligue um." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nenhuma impressão digital no URL." @@ -1244,7 +1243,6 @@ msgstr "Nenhum certificado de assinatura encontrado em {path}" msgid "No such package: %s" msgstr "Nenhum pacote desses: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1279,7 +1277,6 @@ msgstr "Nada a fazer para {appid}." msgid "Now set these in config.yml:" msgstr "Agora configure estes em config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1297,26 +1294,28 @@ msgstr "O packagename do OBB não corresponde a um APK suportado:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "A máquina está offline, a saltar a geração de espelhos de git até o `fdroid deploy'" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' está a faltar o valor 'packageNames'. A ignorar ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'projectUrl'. A ignorar ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Um dos itens de configuração 'github_releases' não tem o valor 'token'. A ignorar ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Somente PNG e JPEG são suportados para gráficos, encontrado: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Apenas mostrar diferenças com a Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Aceita apenas uma única chave \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1326,10 +1325,6 @@ msgstr "Processar apenas apps com atualizações automáticas" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Os métodos de doação OpenCollective pertencem no campo OpenCollective:" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opções" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Saída de relatório JSON para ficheiro nomeado após APK." @@ -1387,6 +1382,11 @@ msgstr "Caminho até a keystore para a chave de assinatura do repositório" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Imprimir a variável secreta para o terminal para copiar/colar fácilmente" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "O modo de privacidade foi ativado com base na sua localização ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1473,6 +1473,15 @@ msgstr "Lendo {apkfilename} do cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Atualizar e armazenar as regras e assinaturas do scanner da rede no cache" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Recuso assinar '{path}', o ficheiro existe nas pastas {dir1} e {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Remover tarball de código-fonte e todos APKs se for verificado com sucesso." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Apagando ficheiros especificados" @@ -1486,13 +1495,10 @@ msgstr "A remover {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Renomear todos os ficheiros APKs que não correspondem com package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "O modo de atualização repoTrunk só faz sentido em repositórios de git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Redefinir e criar um novo servidor de compilação, mesmo que o existente parecer normal." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1507,6 +1513,11 @@ msgstr "Redimensionar todos os ícones que excedam o tamanho máximo de pixels e msgid "Restrict output to warnings and errors" msgstr "Restringir a saída a erros e avisos" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Nova tentativa de descarga com falha: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Regravar todos os ficheiros de metadados" @@ -1523,7 +1534,7 @@ msgstr "Executar no repo git que tem alterações não confirmadas" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Passar por cima de {cibase} para encontrar -debug.apk. e ignorar repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1572,6 +1583,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Scanner encontrou {} problema" msgstr[1] "Scanner encontrou {} problemas" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "A verificar a APK em busca de blocos de assinatura extra." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "A verificar o APK com dexdump por classes não-livres conhecidas." @@ -1692,6 +1707,10 @@ msgstr "Modo de atualização de marcações usado no git-svn, mas a repo não f msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modo de teste - ponha a saída apenas no diretório tmp e sempre compile, mesmo que a saída já exista." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "O pacote de Python \"qrcode\" não está instalado (por exemplo, apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1764,9 +1783,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Para usar awsbucket, os awssecretkey e awsaccesskeyid também devem ser definidos no config.yml!" +msgstr "Para usar rclone, rclone_config e awsbucket também devem ser definidos no config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1789,11 +1807,6 @@ msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas aprovad msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiqueta de licença \"{}\" inesperada! Use somente as etiquetas de licença configuradas no seu ficheiro de configuração" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Alvo symlink inesperado: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1803,7 +1816,6 @@ msgstr "Entrada {key} desconhecida em {configname}" msgid "Unknown exception found!" msgstr "Exceção desconhecida!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1841,6 +1853,7 @@ msgstr "Campo de aplicação '{fieldname}' não reconhecido em '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bandeira de compilação '{build_flag}' não reconhecida em '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1871,11 +1884,6 @@ msgstr "O caminho de scandelete não é usado: %s" msgid "Unused scanignore path: %s" msgstr "O caminho de scanignore não é usado: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "A descompactar para %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Atualizar a informação do repositório para novos pacotes" @@ -1889,6 +1897,7 @@ msgstr "Atualizar o registo de transparência de binário para um URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData tem URL inválido: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1906,13 +1915,9 @@ msgstr "UpdateCheckData não é uma URL válida: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode está definido, mas parece que o updatecheckupdates ainda não foi executado" +msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName (o nome da verificação de atualização) é definido como o ID comun da aplicação - pode ser removido" @@ -1927,27 +1932,10 @@ msgstr "A enviar {apkfilename} ao androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "A enviar {apkfilename} ao virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Utilização" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Utilização: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Use /HEAD em vez de /master ou /main para apontar a um ficheiro no ramo predefinido" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Use /HEAD em vez de /master para apontar num ficheiro na ramificação predefinida" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Use ' fdroid update -c ' para criá-lo." @@ -1966,9 +1954,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Usando \"{path}\" para configurar s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Usando \"{path}\" para configurar s3cmd." +msgstr "A usar \"{path}\" para sincronizar com o armazenamento remoto." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1986,11 +1974,6 @@ msgstr "A usar a assinatura JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Usando o jarsigner de Java, não recomendado para verificar APKs! Use apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Usando androguard de \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2002,9 +1985,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Utilizando armazenamento de chave existente \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Usando s3cmd para sincronizar com: {url}" +msgstr "A usar rclone para sincronizar com: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2027,15 +2010,28 @@ msgstr "Verifique a integridade dos pacotes descarregados" msgid "Verifying index signature:" msgstr "Verificar o índice de assinatura:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "A verificar o pacote {path} com apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "A chave VirusTotal API não pode enviar ficheiros maiores que 32MB, use {url} para enviar {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avisar sobre possíveis erros de metadados" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Ficheiro binário WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Quando configurado para índices assinados, crie apenas índices não assinados nesta etapa" @@ -2048,6 +2044,14 @@ msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição msgid "When signing or verifying fails, exit with an error code." msgstr "Se assinar ou verificar falhar, sair com um código de erro." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Gostaria de descarregar e instalar o F-Droid.apk via adb? (SIM/não)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Gostaria de descarregar a(s) aplicação(ões) do f-droid.org? (SIM/não)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' usado na geração de chaves" @@ -2060,6 +2064,11 @@ msgstr "Pode usar ANDROID_HOME para definir o caminho para o seu SDK, ou seja:" msgid "ZIP file archive" msgstr "Arquivo de ficheiros ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb reporta {serial} é \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2070,19 +2079,15 @@ msgstr "adicionando IdentityFile a {path}" msgid "adding to {name}: {path}" msgstr "adicionando a {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opção ambígua: %(option)s poderia corresponder %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opção ambígua: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner nos build-tools;{version} passa APKs com assinaturas v3 inválidas, ignorando." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2092,11 +2097,13 @@ msgstr "apksigner não encontrado! Não é possível assinar ou verificar APKs m msgid "apksigner not found, it's required for signing!" msgstr "Nenhum apksigner encontrado, é necessário para assinar!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID de aplicação do ficheiro para operar" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2107,8 +2114,6 @@ msgstr "applicationID com versionCode opcional na forma APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url precisa de terminar com /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2127,7 +2132,7 @@ msgstr "tentar a conexão nua por SSH para testar a implantação da chave:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "não é possível analisar as especificações do scrlib (não é uma cadeia): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "não é possível abrir '%(filename)s': %(error)s" @@ -2141,14 +2146,10 @@ msgstr "não é possível abrir o url não-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "não é possível encontrar os srclibs necessários: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "não é possível ter vários argumentos de subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2167,14 +2168,6 @@ msgstr "clonagem {url}" msgid "commands from plugin modules:" msgstr "comandos dos módulos de plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complexo" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2205,10 +2198,6 @@ msgstr "não foi possível analisar a especificação srclib (nenhum nome especi msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "não foi possível analisar a especificação srclib (demais símbolos '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2226,15 +2215,13 @@ msgstr "apagando: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "ficheiro de dependência sem bloqueio" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "registo de processo implantado {path} a {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2252,8 +2239,6 @@ msgstr "a descarga de assinaturas de scanner de '{}' falhou" msgid "executable binary, possibly code" msgstr "binário executável, possivelmente código" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2261,20 +2246,14 @@ msgid_plural "expected %s arguments" msgstr[0] "%s argumento esperado" msgstr[1] "%s argumentos esperados" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "esperado pelo menos um argumento" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "esperado um argumento no máximo" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "esperado um argumento" @@ -2287,10 +2266,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "buscar a versão de assinaturas mais recente da Web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "ponto flutuante" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "Forçar os erros de metadados (padrão) para serem avisos, ou para serem ignorados." @@ -2303,8 +2278,6 @@ msgstr "git svn clone falhou" msgid "gzip file archive" msgstr "arquivo de ficheiros gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2318,35 +2291,21 @@ msgstr "index-v1 deve ter uma assinatura, use ' fdroid signindex ' para criá-lo msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 deve ter uma assinatura, use droid signindex` para o criar!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "inteiro" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "valor inválido do tipo %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "opção inválida: %(value)r (escolha de %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valor conflict_resolution inválido: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2384,8 +2343,6 @@ msgstr "espelho '%s' não termina com 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "espelhos (mirrors) definidos duas vezes, em config.yml e em {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentos mutuamente exclusivos devem ser opcional" @@ -2404,30 +2361,15 @@ msgstr "nenhum \"ícone\" em {appid}" msgid "no APK supplied" msgstr "nenhum APK fornecido" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "não tem tal opção: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "não há informações de versão encontrada!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nenhuma informação de versão encontrada" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "não é permitido com o argumento %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2437,72 +2379,6 @@ msgstr "um dos argumentos %s é necessário" msgid "only accepts strings, lists, and tuples" msgstr "apenas aceita cadeias, listas e tuplos" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opção %s: se realmente deseja instalar todas as apps assinadas, use --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "Opção %s: valor %s inválido: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opção %s: escolha inválida: %r (escolha entre %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opção -%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opção -%s requer um argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opção --%s não pode ter argumento" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opção --%s não é prefixo único" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opção --%s não reconhecida" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opção --%s necessita argumento" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumentos opcionais" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opções" @@ -2512,8 +2388,6 @@ msgstr "opções" msgid "overwriting existing {path}" msgstr "sobrescrevendo {path} existente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumentos posicionais" @@ -2546,19 +2420,15 @@ msgstr "repo_url precisa de terminar com /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync está ausente ou quebrado: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "o ruamel.yaml não está instalado, não é possível escrever metadados." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincroniza índices {path} para {url} e apaga" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sincroniza índices {path} para {url} e apaga" +msgstr "s3cmd sincroniza os índices de {path} para {url} e elimina os removidos" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2573,17 +2443,7 @@ msgstr "serverwebroot: o caminho não termina com \"fdroid\", talvez queria usar msgid "shared library" msgstr "biblioteca partilhada" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "mostrar versão do programa e sair" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "mostrar esta ajuda e sair" @@ -2617,29 +2477,25 @@ msgstr "biblioteca estática" msgid "supplied reference binary has allowed signer {signer}" msgstr "o binário de referência fornecido tem o assinante permitido {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "os seguintes argumentos são necessários: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "verdadeiro" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "opção de cadeia de texto inesperada: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "O formato '%(parser_name)r' é desconhecido. (Opções Válidas: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2650,9 +2506,7 @@ msgstr "argumentos não reconhecidos: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilização: " @@ -2665,6 +2519,10 @@ msgstr "usando o Apache libcloud para sincronizar com {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "o virustotal.com está a limitar a taxa, à espera para voltar a tentar..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "sim" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2677,21 +2535,19 @@ msgstr[1] "{0} apps, {1} aliases chave" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) não tem metadados!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} tem vários ficheiros {name} que, parece explorar a Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml do {apkfilename} tem uma data má: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} não tem um nome! A usar o ID da aplicação em vez disso." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2712,7 +2568,6 @@ msgstr "{appid} tem APKs e ficheiros: {files}" msgid "{appid} is missing {name}" msgstr "{appid} tem falta de {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2753,10 +2608,10 @@ msgstr "{file} está em branco ou corrompido!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" não existe! Corrija-o no \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} está obsoleto, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} é uma duplicata de {path2}, remova uma!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2778,6 +2633,11 @@ msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} foi marcado por virustotal {count} vezes:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} tem a impressão digital errada ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ro/LC_MESSAGES/fdroidserver.po b/locale/ro/LC_MESSAGES/fdroidserver.po index 446a39be..0599ee8c 100644 --- a/locale/ro/LC_MESSAGES/fdroidserver.po +++ b/locale/ro/LC_MESSAGES/fdroidserver.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.0a5-27-gf24eae0f\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-17 08:01+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2024-12-02 17:00+0000\n" "Last-Translator: Licaon Kter \n" "Language-Team: Romanian \n" "Language: ro\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -42,6 +42,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" nu are un fișier de metadate corespunzător!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -52,11 +56,6 @@ msgstr "\"local_copy_dir\" {path} nu există!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" este deja instalat pe {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" conține {name} ({version}) depășite" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -82,18 +81,6 @@ msgstr "\"{path}\" este semnat de o cheie care nu este permisă:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" nu este un URL valid!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Opțiunea %(option)s necesită %(number)d argument" -msgstr[1] "Opțiunea %(option)s necesită %(number)d argumente" -msgstr[2] "Opțiunea %(option)s necesită %(number)d argumente" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -109,14 +96,6 @@ msgstr "%d fișiere APK nu au putut fi semnate sau verificate!" msgid "%d problems found" msgstr "%d probleme găsite" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [opțiuni]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -137,13 +116,6 @@ msgstr "%s are un SHA-256 greșit: %s" msgid "%s is not an accepted build field" msgstr "%s nu este un câmp de construcție acceptat" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "Opțiunea %s nu acceptă o valoare" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' nu a fost găsit în config.yml!" @@ -164,8 +136,6 @@ msgstr "'keystorepass' nu se găsește în config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' nu se găsește în config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' este un argument invalid pentru poziționale" @@ -179,11 +149,6 @@ msgstr "'sdk_path' nu este setat în 'config.yml'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' este prea vechi, fdroid necesită build-tools-{version} sau mai nou!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' va fi în ordine aleatorie! Folosiți paranteze () sau [] dacă ordinea este importantă!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -194,7 +159,7 @@ msgstr "'{path}' nu a reușit să se execute!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' are un format invalid, ar trebui să fie un dicționar!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' nu este valid {field} în {appid}. Regex model: {pattern}" @@ -204,13 +169,15 @@ msgstr "'{value}' nu este valid {field} în {appid}. Regex model: {pattern}" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' nu este un {field} valid, ar trebui să fie {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate a eșuat pentru {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() nu este definit" @@ -226,7 +193,7 @@ msgstr "Un URL este necesar ca argument!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "Semnăturile APK au certificate diferite în {path}" +msgstr "Semnăturile APK au certificate diferite în {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" @@ -301,10 +268,6 @@ msgstr "Instrumentul Android SDK {cmd} nu a fost găsit!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Aplicația are binare, dar nu are AllowedAPKSigningKeys corespunzătoare pentru a fixa certificatul." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "App are NoSourceSince sau ArchivePolicy \"0 versions\" dar AutoUpdateMode sau UpdateCheckMode nu sunt None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Aplicatia are NoSourceSince sau ArchivePolicy \"0 versions\" dar AutoUpdateMode sau UpdateCheckMode nu sunt None" @@ -331,6 +294,14 @@ msgstr "Arhivare {apkfilename} cu semnătură invalidă!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode cu UpdateCheckMode: HTTP trebuie să aivă un format." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -340,7 +311,6 @@ msgstr "Intrare de tip \"{mirrortype}\" greșită în configurația oglinzilor: msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL de bază pentru oglindire, poate include cheia de semnare a indexului folosind șirul de interogare: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -392,16 +362,23 @@ msgstr[0] "Nu se poate construi din cauza unei erori {} în timpul scanării" msgstr[1] "Nu se poate construi din cauza erorilor {} în timpul scanării" msgstr[2] "Nu se poate construi din cauza erorilor {} în timpul scanării" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "A eșuat citirea {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Nu se poate rescrie \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Categoriile \"%s\" nu sunt valabile" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Categoriile nu sunt setate" @@ -424,6 +401,10 @@ msgstr "Verificarea arhivării pentru {appid} - apks:{integer}, keepversions:{ke msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Actualizare curată - nu folosește memoria cache, reprocesează toate APK-urile" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Lista de categorii separate prin virgulă." @@ -437,6 +418,10 @@ msgstr "Comanda '%s' nerecunoscută.\n" msgid "Commit changes" msgstr "Efectuați modificări" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -446,20 +431,17 @@ msgstr "Definiții \"{field}\" contradictorii între fișierele .yml și cele lo msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumente contradictorii: '--verbose' și '--quiet' nu pot fi specificate în același timp." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Fișiere de configurare conflictuale! Folosind {newfile}, ignorând {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Nu a putut găsi '{command}' pe sistemul dvs" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Nu a putut găsi codul ultimei versiuni" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Nu a putut găsi numele celei mai recente versiuni" @@ -479,6 +461,7 @@ msgstr "Nu s-a putut deschide APK {path} pentru analiză: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Nu a putut analiza dimensiunea \"{size}\", tip greșit \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Nu s-a putut găsi ID-ul aplicației" @@ -505,6 +488,11 @@ msgstr "Creat un nou container \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Crearea \"{path}\" pentru configurarea s3cmd." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Citirea '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Crearea directorului de jurnal" @@ -567,11 +555,6 @@ msgstr "Descrierea \"%s\" este doar un rezumat al aplicației" msgid "Description has a duplicate line" msgstr "Descrierea are o linie duplicată" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Descrierea are o listă (%s), dar nu este punctată (*) și nici numerotată (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -620,15 +603,14 @@ msgstr "Nu reîmprospătați depozitul, util atunci când testați o construcți msgid "Don't use rsync checksums" msgstr "Nu folosiți sumele de verificare rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Descărcați oglinzi complete ale depozitelor mici" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Descărcare %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Descărcarea depozitului a eșuat deja o dată, nu mai încerc din nou." @@ -662,14 +644,6 @@ msgstr "EROARE: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ERROR: Subcomanda \"server\" a fost eliminată, utilizați \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ERROR: această comandă nu ar trebui să fie folosită niciodată pentru a oglindi f-droid.org!\n" -"O oglindă completă a f-droid.org necesită mai mult de 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ERROR: tip CI neacceptat, patch-uri binevenite!" @@ -684,6 +658,16 @@ msgstr "EROARE: gazdă git neacceptată „%s”, corecții binevenite!" msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -708,6 +692,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Variabila de mediu {var} din {configname} nu este setată!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Variabila de mediu {var} din {configname} nu este setată!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -728,6 +717,10 @@ msgstr "Extrageți metadatele aplicației dintr-un depozit sursă" msgid "Extract signatures from APKs" msgstr "Extrageți semnăturile din APK-uri" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -797,10 +790,6 @@ msgstr "Fișierul a dispărut în timpul procesării acestuia: {path}" msgid "Finished" msgstr "Finalizat" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Metodele de donație Flattr fac parte din FlattrID: câmp" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etichete HTML interzise" @@ -832,7 +821,6 @@ msgstr "Am găsit un fișier de finanțare necorespunzător \"{path}\" pentru \" msgid "Found invalid appids in arguments" msgstr "Găsit appids invalid în argumente" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Am găsit coduri de versiune invalide pentru unele aplicații" @@ -897,15 +885,13 @@ msgstr "Curățarea Git a eșuat" msgid "Git fetch failed" msgstr "Git fetch a eșuat" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git plum a eșuat" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head a eșuat: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Resetarea Git a eșuat" @@ -950,6 +936,11 @@ msgstr "Ignorarea intrării FUNDING.yml mai lungă de 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Ignorarea elementului greșit din manifest: %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} este depreciat, folosiți {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Ignorarea pachetului fără metadate: " @@ -1035,16 +1026,12 @@ msgstr "VercodeOperation invalid: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation invalidă: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID-ul aplicației nevalabil {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Boolean invalid \"%s" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Listă cu puncte invalidă" @@ -1157,6 +1144,11 @@ msgstr "Linie de root a serverului web deformată:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "A fost atinsă adâncimea maximă de recursivitate în fișierul ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Oglindește întregul repo și arhiva, toate tipurile de fișiere." @@ -1186,6 +1178,10 @@ msgstr "Nu s-a găsit niciun SDK Android!" msgid "No attached devices found" msgstr "Nu s-au găsit dispozitive atașate" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Nu există amprente în URL." @@ -1246,7 +1242,6 @@ msgstr "Nu s-au găsit certificate de semnare în {path}" msgid "No such package: %s" msgstr "Nu există un astfel de pachet: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1281,7 +1276,6 @@ msgstr "Nimic de făcut pentru {appid}." msgid "Now set these in config.yml:" msgstr "Acum setați-le în config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1299,26 +1293,28 @@ msgstr "OBB's packagename nu se potrivește cu un APK acceptat:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Mașină offline, sărind peste generarea oglinzii git până la `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Doar PNG și JPEG sunt acceptate pentru grafică, găsite: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Imprimă doar diferențele cu Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1328,10 +1324,6 @@ msgstr "Procesați numai aplicațiile cu actualizări automate" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metodele de donație OpenCollective aparțin OpenCollective: câmp" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Opțiuni" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Emite raportul JSON în fișierul numit după APK." @@ -1389,6 +1381,11 @@ msgstr "Calea către depozitul de chei pentru cheia de semnare a repo-ului" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Tipărește variabila secretă în terminal pentru un ușor copy/paste" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1475,6 +1472,15 @@ msgstr "Citirea {apkfilename} din memoria cache" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Actualizează și stochează în memorie regulile și semnăturilor de scanare din rețea" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Eliminarea fișierelor specificate" @@ -1488,13 +1494,10 @@ msgstr "Eliminarea lui {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Redenumiți fișierele APK care nu se potrivesc cu package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Modul de actualizare RepoTrunk are sens doar în depozitele git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Resetați și creați un nou server de construcție, chiar dacă cel existent pare să fie în regulă." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1509,6 +1512,11 @@ msgstr "Redimensionați toate pictogramele care depășesc dimensiunea maximă a msgid "Restrict output to warnings and errors" msgstr "Limitarea ieșirii la avertismente și erori" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rescrieți toate fișierele de metadate" @@ -1575,6 +1583,10 @@ msgstr[0] "Scannerul a găsit o problemă {}" msgstr[1] "Scannerul a găsit {} probleme" msgstr[2] "Scannerul a găsit {} probleme" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Scanarea APK cu dexdump pentru clasele cunoscute ca fiind non-libere." @@ -1695,6 +1707,10 @@ msgstr "Modul de actualizare a etichetelor folosit în git-svn, dar repo-ul nu a msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Modul test - puneți ieșirea numai în directorul tmp și construiți întotdeauna, chiar dacă ieșirea există deja." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1792,11 +1808,6 @@ msgstr "Etichetă de licență neașteptată \"{}\"! Folosiți numai etichete ap msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etichetă de licență neașteptată \"{}\"! Utilizați numai etichetele de licență configurate în fișierul de configurare" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Neașteptată țintă symlink: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1806,7 +1817,6 @@ msgstr "Intrare necunoscută {key} în {configname}" msgid "Unknown exception found!" msgstr "S-a găsit o excepție necunoscută!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1844,6 +1854,7 @@ msgstr "Câmp de aplicație nerecunoscut '{fieldname}' în '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Indicator de construcție nerecunoscut '{build_flag}' în '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1874,11 +1885,6 @@ msgstr "Calea de scanare a ștergerii neutilizată: %s" msgid "Unused scanignore path: %s" msgstr "Cale de scanare neutilizată: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Decomprimarea la %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Actualizarea informațiilor repo pentru noile pachete" @@ -1892,6 +1898,7 @@ msgstr "Actualizarea jurnalului de transparență binară pentru o adresă URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData are un URL invalid: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1911,11 +1918,7 @@ msgstr "UpdateCheckData nu este un URL valid: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName este setat la ID-ul cunoscut al aplicației, acesta poate fi eliminat" @@ -1930,27 +1933,10 @@ msgstr "Încărcarea {apkfilename} pe androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Încărcarea {apkfilename} la virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Utilizare" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Utilizare: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Folosiți /HEAD în loc de /master sau /main pentru a indica un fișier din ramura implicită" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Folosiți /HEAD în loc de /master pentru a indica un fișier din ramura implicită" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Utilizați `fdroid update -c` pentru a-l crea." @@ -1989,11 +1975,6 @@ msgstr "Folosind JAR Signature" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Folosind jarsigner de la Java, nu este recomandat pentru verificarea APK-urilor! Utilizați apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Folosind androguard din \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2030,15 +2011,28 @@ msgstr "Verificarea integrității pachetelor descărcate" msgid "Verifying index signature:" msgstr "Verificarea semnăturii indexului:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key nu poate încărca fișiere mai mari de 32MB, utilizați {url} pentru a încărca {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Avertizează cu privire la posibile erori de metadate" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Atunci când este configurat pentru indici cu semnătură, creați numai indici fără semnătură în această etapă" @@ -2051,6 +2045,14 @@ msgstr "Atunci când se face linting pentru întregul depozit, yamllint este dez msgid "When signing or verifying fails, exit with an error code." msgstr "În cazul în care semnarea sau verificarea eșuează, ieșiți cu un cod de eroare." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 \"Distinguished Name\" utilizat la generarea cheilor" @@ -2063,6 +2065,11 @@ msgstr "Puteți utiliza ANDROID_HOME pentru a seta calea către SDK-ul dvs., adi msgid "ZIP file archive" msgstr "Arhiva de fișiere ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2073,19 +2080,15 @@ msgstr "adăugând IdentityFile la {path}" msgid "adding to {name}: {path}" msgstr "adăugând la {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "opțiune ambiguă: %(option)s ar putea corespunde cu %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "opțiune ambiguă: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2095,11 +2098,13 @@ msgstr "apksigner nu a fost găsit! Nu se poate semna sau verifica APK-urile mod msgid "apksigner not found, it's required for signing!" msgstr "apksigner nu a fost găsit, este necesar pentru a semna!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID-ul de aplicație al fișierului pe care se operează" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2110,8 +2115,6 @@ msgstr "ID-ul aplicației cu versionCode opțional sub forma APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url trebuie să se termine cu /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2130,7 +2133,7 @@ msgstr "încercând o conexiune SSH goală pentru a testa cheia de implementare: msgid "can not parse scrlib spec (not a string): '{}'" msgstr "nu poate analiza specificația scrlib (not a string): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "nu se poate deschide '%(filename)s': %(error)s" @@ -2144,14 +2147,10 @@ msgstr "nu se poate deschide un URL non-https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "nu poate găsi srclibs necesare: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "nu poate avea mai multe argumente subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2170,14 +2169,6 @@ msgstr "clonarea {url}" msgid "commands from plugin modules:" msgstr "comenzi din modulele plugin:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "complexă" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2209,10 +2200,6 @@ msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun num msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "could not parse srclib spec (prea multe semne '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2237,8 +2224,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "a implementat jurnalul de proces {path} la {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2256,8 +2241,6 @@ msgstr "descărcarea semnăturilor de scaner de la '{}' a eșuat" msgid "executable binary, possibly code" msgstr "binar executabil, eventual cod" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2266,20 +2249,14 @@ msgstr[0] "argument %s așteptat" msgstr[1] "argumente %s așteptate" msgstr[2] "argumente %s așteptate" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "se așteaptă cel puțin un argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "se așteaptă cel mult un argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "se așteaptă un singur argument" @@ -2292,10 +2269,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "extrage cea mai recentă versiune de semnături de pe web" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "punct flotant" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "forțează erorile de metadate (implicit) să fie avertismente sau să fie ignorate." @@ -2308,8 +2281,6 @@ msgstr "git svn clone a eșuat" msgid "gzip file archive" msgstr "Arhiva de fișiere gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2323,35 +2294,21 @@ msgstr "index-v1 trebuie să aibă o semnătură, folosiți `fdroid signindex` p msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 trebuie să aibă o semnătură, folosiți `fdroid signindex` pentru a o crea!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "întreg" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "invalid %(type)s valoare: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "alegere invalidă: %(value)r (alege din %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "valoare invalidă a rezoluției_conflictului: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2389,8 +2346,6 @@ msgstr "oglinda '%s' nu se termină cu 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "servere de rezervă duplicat, în config.yml și {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentele care se exclud reciproc trebuie să fie opționale" @@ -2409,30 +2364,15 @@ msgstr "nu există \" pictogramă \" în {appid}" msgid "no APK supplied" msgstr "nici un APK furnizat" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "nu există o astfel de opțiune: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "nu s-au găsit informații despre versiune!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "nu s-au găsit informații despre versiune" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "nu este permis cu argumentul %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2442,72 +2382,6 @@ msgstr "unul dintre argumentele %s este necesar" msgid "only accepts strings, lists, and tuples" msgstr "acceptă doar șiruri de caractere, liste și tupluri" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "opțiunea %s: Dacă doriți cu adevărat să instalați toate aplicațiile semnate, utilizați --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "opțiunea %s: valoare %s invalidă: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "opțiunea %s: alegere invalidă: %r (alege din %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "opțiunea -%s nerecunoscută" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "opțiunea -%s necesită argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "opțiunea --%s nu trebuie să aibă un argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "opțiunea --%s nu este un prefix unic" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "opțiunea --%s nerecunoscută" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "opțiunea --%s necesită un argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumente opționale" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "opțiuni" @@ -2517,8 +2391,6 @@ msgstr "opțiuni" msgid "overwriting existing {path}" msgstr "suprascriere {path} existent" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumente poziționale" @@ -2551,19 +2423,15 @@ msgstr "repo_url trebuie să se termine cu /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync lipsește sau este nefuncțional: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml nu este instalat, nu poate scrie metadatele." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sincronizează indexurile {path} cu {url} și șterge" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sincronizează indexurile {path} cu {url} și șterge" +msgstr "s3cmd sincronizează indexurile {path} cu {url} și le șterge pe cele eliminate" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2578,17 +2446,7 @@ msgstr "serverwebroot: calea nu se termină cu \"fdroid\", poate că v-ați refe msgid "shared library" msgstr "bibliotecă partajată" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "arată numărul versiunii programului și iese" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "arată acest mesaj de ajutor și iese" @@ -2622,29 +2480,25 @@ msgstr "bibliotecă statică" msgid "supplied reference binary has allowed signer {signer}" msgstr "binare de referință furnizate au permis semnatarului {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "sunt necesare următoarele argumente: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "adevărat" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "șir de opțiuni neașteptate: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "parser necunoscut %(parser_name)r (choices: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2655,9 +2509,7 @@ msgstr "argumente nerecunoscute: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "permisiuni nesigure pe '{config_file}' (ar trebui să fie 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "utilizare: " @@ -2670,6 +2522,10 @@ msgstr "folosind Apache libcloud pentru a se sincroniza cu {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com limitează rata, așteptând o nouă încercare..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "da" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2683,21 +2539,19 @@ msgstr[2] "{0} aplicații, {1} aliasuri de chei" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) nu are metadate!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} are mai multe fișiere {name}, pare a fi un exploit Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml al lui {apkfilename} are o dată greșită: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} nu are un nume! În schimb, utilizați ID-ul aplicației." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2718,7 +2572,6 @@ msgstr "{appid} are atât APK-uri, cât și fișiere: {files}" msgid "{appid} is missing {name}" msgstr "{appid} lipsește {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2759,10 +2612,10 @@ msgstr "{file} este gol sau corupt!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" nu există! Verificați \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} este depreciat, folosiți {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2784,6 +2637,11 @@ msgstr "{path} are o semnătură proastă a fișierului \"{pattern}\", posibil e msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} a fost marcat de virustotal de {count} ori:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ru/LC_MESSAGES/fdroidserver.po b/locale/ru/LC_MESSAGES/fdroidserver.po index 11f345a0..bd4aa6f5 100644 --- a/locale/ru/LC_MESSAGES/fdroidserver.po +++ b/locale/ru/LC_MESSAGES/fdroidserver.po @@ -1,9 +1,9 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. -# Golubev Alexander , 2020, 2021. +# Golubev Alexander , 2020, 2021, 2024, 2025. # Mingun , 2020. # anonymous , 2020. -# Andrey , 2020, 2021, 2022, 2023. +# Andrey , 2020, 2021, 2022, 2023, 2025. # gardenapple , 2020. # Boris Timofeev , 2020. # Hans-Christoph Steiner , 2020. @@ -15,20 +15,22 @@ # Alexander Ivanov , 2024. # gfbdrgng , 2024. # neverender , 2024. +# Dmitry , 2024. +# Artyom Rybakov , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-06-07 10:15+0000\n" -"Last-Translator: neverender \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-06-24 10:15+0000\n" +"Last-Translator: Artyom Rybakov \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.13-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -52,6 +54,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "У \"%s/\" нет соответствующего файла метаданных!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Ключ \"IsPrimary\" не следует добавлять в зеркала!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -62,11 +68,6 @@ msgstr "\"local_copy_dir\" {path} не существует!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' уже установлен на {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "В пути \"{path}\" устаревшие имя {name} или версия {version} пакета" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -92,18 +93,6 @@ msgstr "\"{path}\" подписан ключом, который не разре msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" — не корректный URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Параметр %(option)s требует %(number)d аргумент" -msgstr[1] "Параметр %(option)s требует %(number)d аргумента" -msgstr[2] "Параметр %(option)s требует %(number)d аргументов" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -119,14 +108,6 @@ msgstr "%d APK не удалось подписать или проверить! msgid "%d problems found" msgstr "%d ошибок найдено" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [параметры]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -147,13 +128,6 @@ msgstr "%s имеет неверный SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s не является допустимым полем" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s параметр не принимает значений" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "В config.yml нет переменной 'keypass'!" @@ -174,8 +148,6 @@ msgstr "'keystorepass' не найден в config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' не найден в config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' не годится в качестве позиционного аргумента" @@ -189,11 +161,6 @@ msgstr "'sdk_path' не найден в config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt} — устаревшая версия, F-droid нужна версия build-tools-{version} или более поздняя!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' добавлено в произвольном порядке! Если порядок важен, используйте скобки () и []!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -204,7 +171,7 @@ msgstr "{path} не удалось исполнить!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' имеет недопустимый формат, это должен быть словарь!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' не подходит в качестве {field} в {appid}. Образец регулярного выражения: {pattern}" @@ -214,13 +181,15 @@ msgstr "'{value}' не подходит в качестве {field} в {appid}. msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' не является допустимым {field}, должно быть {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request работает только с одним appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...checkupdate для {appid} завершился ошибкой: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не определен" @@ -309,16 +278,11 @@ msgstr "Инструмент Android SDK {cmd} не найден!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "Приложение имеет двоичные файлы, но не имеет соответствующего сертификата AllowedAPKSigningKeys для закрепления." +msgstr "У приложения задано поле Binaries, но не указано AllowedAPKSigningKeys, что необходимо, чтобы ограничить ключи подписи." #: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Приложение имеет NoSourceSince или ArchivePolicy \"0 версий\", но AutoUpdateMode или UpdateCheckMode не равны None" - -#: ../fdroidserver/lint.py -#, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Приложение имеет NoSourceSince или ArchivePolicy \"0 версий\" или 0, но AutoUpdateMode или UpdateCheckMode не None" +msgstr "У приложения задано поле NoSourceSince, или поле ArchivePolicy равно \"0 versions\" или \"0\", но AutoUpdateMode или UpdateCheckMode не равны None" #: ../fdroidserver/lint.py #, python-brace-format @@ -342,6 +306,14 @@ msgstr "Вы пытаетесь поместить в архив {apkfilename} msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode с UpdateCheckMode: HTTP должен иметь шаблон." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Автоматически отвечать \"нет\" на все запросы." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Автоматически отвечать \"да\" на все запросы." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -351,7 +323,6 @@ msgstr "Неверный тип записи \"{mirrortype}\" в конфигу msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Основной URL-адрес зеркала может содержать ключ для подписывания индекса (добавьте запрос \"?fingerprint=\")" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -403,16 +374,23 @@ msgstr[0] "Запустить сборку невозможно из-за {} о msgstr[1] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" msgstr[2] "Запустить сборку невозможно из-за {} ошибок во время сканирования данных" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Не удалось распознать {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Невозможно переписать \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Неправильные категории: '%s'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категории не выбраны" @@ -435,6 +413,10 @@ msgstr "Проверка перед помещением в архив для {a msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Очистка с обновлением: не использовать кэш, повторно сгенерировать все APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Раскрашивать сообщения журнала при выводе" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Категории перечислены через запятую." @@ -446,7 +428,11 @@ msgstr "Команда '%s' не распознана.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "Сохранить изменения (commit)" +msgstr "Зафиксировать изменения (commit)" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Зафиксировать изменения (commit), отправить (push) их в удаленный репозиторий, и затем создать запрос на слияние" #: ../fdroidserver/metadata.py #, python-brace-format @@ -457,20 +443,17 @@ msgstr "Конфликтующие определения \"{field}\" между msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Несовместимые аргументы: '--verbose' и '--quiet' нельзя указывать одновременно." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Конфликтуюущие файлы настроек! {newfile} — используется; {oldfile} — игнорируется!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "В вашей системе недоступна команда '{command}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Не удалось найти последнюю версию приложения (versionCode)" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Не удалось найти название последней версии" @@ -490,6 +473,7 @@ msgstr "Не удалось открыть и проанализировать msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Не удалось разобрать размер «{size}», неверный тип «{type}»" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Не удалось найти Application ID" @@ -516,6 +500,11 @@ msgstr "Новый контейнер \"{name}\" создан" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Создание \"{path}\" для конфигурации s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Создание пустого '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Создание директории для хранения логов" @@ -578,11 +567,6 @@ msgstr "Описание '%s' копирует краткий обзор при msgid "Description has a duplicate line" msgstr "В описании встречаются одинаковые строки" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "В описании есть неразмеченный список (%s). Воспользуйтесь (*) для ненумерованного списка и (#) для нумерованного" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -631,15 +615,14 @@ msgstr "Не обновлять репозиторий. Упрощает тес msgid "Don't use rsync checksums" msgstr "Не использовать контрольные суммы rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Загружать F-Droid.apk с помощью тех зеркал, из которые в сеть утекает меньше данных" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Полностью загружать зеркала для небольших репозиториев" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Загрузка %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Репозиторий не удалось склонировать с первой попытки." @@ -673,14 +656,6 @@ msgstr "ОШИБКА: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ОШИБКА: подкоманда \"server\" была удалена, используйте \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ОШИБКА: эту команду ни в коем случае нельзя использовать для создания зеркала f-droid.org!\n" -"Оно занимает больше 200 Гб." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ОШИБКА: этот тип CI не поддерживается, налаживайте и присылайте патчи!" @@ -693,12 +668,22 @@ msgstr "ОШИБКА: неподдерживаемый хост git «%s», па #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "ОШИБКА: {key} в {path} должен быть или \"archive\", или \"repo\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ОШИБКА: {key} недействительный ключ!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ОШИБКА: значение {key} должно быть типа {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ОШИБКА: {key}:{subkey} в {path} не входит в список допустимых значений: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -719,9 +704,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Переменная среды {var} из {configname} не установлена!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Переменная среды {{env: {var}}} не установлена!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Ошибка развертывания 'github_releases', {} отсутствует. (Возможно, сначала вам нужно запустить `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -739,6 +729,10 @@ msgstr "Извлекать метаданные приложения из исх msgid "Extract signatures from APKs" msgstr "Извлечь подписи из APK файлов" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk не может быть загружен ни из одного известного источника!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -808,10 +802,6 @@ msgstr "Файл исчез во время обработки: {path}" msgid "Finished" msgstr "Готово" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Cсылка на пожертвования через Flattr должна быть в поле «FlattrID:»" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Запрещенные теги HTML" @@ -843,7 +833,6 @@ msgstr "Обнаружен неверный файл финансировани msgid "Found invalid appids in arguments" msgstr "В аргументах обнаружены неправильные appid" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Для некоторых приложений обнаружены неправильные номера внутренней версии (versionCode)" @@ -908,15 +897,13 @@ msgstr "Очистка репозитория (git clean) не удалась" msgid "Git fetch failed" msgstr "Не удалось получить данные из репозитория (git fetch)" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Не удалось выполнить Git prune" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Не удалось настроить HEAD для удаленного репозитория (git remote set-head): \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Не удалось отменить изменения (git reset)" @@ -959,11 +946,16 @@ msgstr "Проигнорировано: запись в FUNDING.yml длинне #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" -msgstr "Игнорирование плохого элемента в манифесте: %s" +msgstr "Проигнорировано: плохой элемент в манифесте: %s" + +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Устаревший {oldfile} игнорируется, используйте {newfile}!" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " -msgstr "Проигнорировано, пакеты без метаданных: " +msgstr "Проигнорировано: пакеты без метаданных: " #: ../fdroidserver/update.py #, python-brace-format @@ -1046,16 +1038,12 @@ msgstr "Расхождение версий приложения в метада msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Недействительная VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Неверный ID приложения: {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Расхождение условий перехода состояния (boolean) в метаданных: '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Неверно размеченный список" @@ -1168,6 +1156,11 @@ msgstr "Неверный путь serverwebroot:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Достигнута максимальная глубина рекурсии в ZIP-файле: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Конфигурация зеркала для {url} содержит ключ \"IsPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Создать зеркало всего репозитория и архива, включая все типы файлов." @@ -1197,6 +1190,10 @@ msgstr "Android SDK не обнаружена!" msgid "No attached devices found" msgstr "Подключенных устройств не найдено" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Для `adb install` не найдено ни одного устройства! Пожалуйста, подключите какое-нибудь." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL-адрес не содержит идентификационной метки (fingerprint)." @@ -1257,7 +1254,6 @@ msgstr "В {path} не обнаружены сертификаты для под msgid "No such package: %s" msgstr "Такого пакета не существует: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1292,7 +1288,6 @@ msgstr "Автоматические обновления для {appid} нед msgid "Now set these in config.yml:" msgstr "Определите эти переменные в config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1310,26 +1305,28 @@ msgstr "Указанный в OBB файле packagename не соответст msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Автономная система, пропуск генерации git-зеркала до `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "В одном из 'github_releases' отсутствует значение 'packageNames'; пропускаем ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "В одном из 'github_releases' отсутствует значение 'projectUrl'; пропускаем ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "В одном из 'github_releases' отсутствует значение 'token'; пропускаем ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Допускаются изображения только в форматах PNG и JPEG: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Отобразить только приложения, версия которых в Play Store отличается от здешней" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Принимает только один ключ \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1339,10 +1336,6 @@ msgstr "Запустить проверку только для приложен msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Cсылка на пожертвования через OpenCollective должна быть в поле «OpenCollective:»" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Параметры" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Вывод отчета в формате JSON под именем файла APK." @@ -1400,6 +1393,11 @@ msgstr "Путь к хранилищу с ключом для подписыва msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Отобразить секретную переменную в терминале (чтобы ее было легче скопировать и вставить)" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Режим конфиденциальности был включен в соответствии с вашей локалью ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1486,6 +1484,15 @@ msgstr "Чтение {apkfilename} из кеша" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Обновление и кэширование правил и сигнатур сканера из сети" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Отказываюсь подписывать '{path}', файл существует как в папке {dir1}, так и в папке {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Удалить tar-архив с исходным кодом и все APK-файлы, если проверка для них прошла успешно." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Удаление выбранных файлов" @@ -1499,13 +1506,10 @@ msgstr "Удаление {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Переименовать все APK файлы, не соответствующие шаблону \"название.пакета_123.apk\"" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Режим обновления RepoTrunk имеет смысл только в репозиториях git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Сбросить все настройки и создать новый сервер сборки, даже если со старым все в порядке." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1520,6 +1524,11 @@ msgstr "Изменить размер всех иконок, превышающ msgid "Restrict output to warnings and errors" msgstr "Показывать в выводе только предупреждения и ошибки" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Повторная попытка неудачной загрузки: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перезаписать все метаданные" @@ -1536,7 +1545,7 @@ msgstr "Запустить для репозитория git с несохран #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Просматриваем {cibase} в поиске -debug.apk (пропуская repo_basedir: {repo_basedir})" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1586,6 +1595,10 @@ msgstr[0] "Сканирование обнаружило {} ошибку" msgstr[1] "Сканирование обнаружило {} ошибки" msgstr[2] "Сканирование обнаружило {} ошибок" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Проверка APK на наличие дополнительных блоков подписи." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Сканирование APK с помощью dexdump на наличие известных несвободных классов." @@ -1706,6 +1719,10 @@ msgstr "Режим обновления тегов используется в g msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тестовый режим. Все собранное попадает во временную директорию; сборка запускается снова в любом случае." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Пакет Python \"qrcode\" не установлен (например, apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1778,9 +1795,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Необходимо определить переменные awsbucket, awssecretkey и awsaccesskeyid в config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Необходимо определить переменные awsbucket, awssecretkey и awsaccesskeyid в config.yml!" +msgstr "Чтобы использовать rclone, в config.yml должны быть заданы rclone_config и awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1803,11 +1819,6 @@ msgstr "Неожиданная метка лицензии: \"{}\"! Исполь msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неожиданная метка лицензии: \"{}\"! Используйте только метки, указанные в вашем файле настроек" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Неожиданная цель симлинка: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1817,7 +1828,6 @@ msgstr "Неизвестная запись {key} в {configname}" msgid "Unknown exception found!" msgstr "Произошла неизвестная ошибка!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1855,6 +1865,7 @@ msgstr "Неизвестное поле приложения '{fieldname}' в '{ msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Неизвестный флаг сборки '{build_flag}' в '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1885,11 +1896,6 @@ msgstr "Неиспользованный scandelete-путь: %s" msgid "Unused scanignore path: %s" msgstr "Неиспользованный scanignore-путь: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Распаковка в %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Обновить информацию о репозитории для новых пакетов" @@ -1903,6 +1909,7 @@ msgstr "Обновить лог степени прозрачности (binary msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData содержит некорректный URL-адрес: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1922,11 +1929,7 @@ msgstr "UpdateCheckData содержит некорректный URL-адрес msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode установлен, но похоже, что checkupdates еще не запущен." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode установлен, но похоже, что функцияheckupdates еще не запущена" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Имя приложения для проверки обновлений (UpdateCheckName) соответствует ID приложения — это поле можно удалить" @@ -1941,27 +1944,10 @@ msgstr "Загрузка {apkfilename} на androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Загрузка {apkfilename} на virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Использование" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Использование: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Используйте /HEAD вместо /master или /main, чтобы указать на файл в ветке по умолчанию" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Указывайте /HEAD, а не /master, ссылаясь на файл в ветке по умолчанию" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Чтобы создать необходимые файлы метаданных, выполните `fdroid update -c`." @@ -1980,9 +1966,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Для конфигурации s3cmd используется \"{path}\"." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Для конфигурации s3cmd используется \"{path}\"." +msgstr "Для синхронизации с удаленным хранилищем используется путь \"{path}\"." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -2000,11 +1986,6 @@ msgstr "Использование подписи JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Проверка APK с помощью Java jarsigner. Так делать не следует! Пользуйтесь для этого apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Запуск androguard из \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2016,14 +1997,14 @@ msgid "Using existing keystore \"{path}\"" msgstr "Используются ключи из \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "s3cmd синхронизация с: {url}" +msgstr "Используется rclone для синхронизации с: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" -msgstr "s3cmd синхронизация с: {url}" +msgstr "Используется s3cmd для синхронизации с: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" @@ -2041,15 +2022,28 @@ msgstr "Проверить целостность загруженных пак msgid "Verifying index signature:" msgstr "Проверка подписи индекса:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Проверка пакета {path} с помощью apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Через API VirusTotal нельзя загрузить файлы больше 32MB, загрузите {path} на {url} самостоятельно." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Предупреждать о возможных ошибках в метаданных" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Двоичный файл WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Даже если в конфигурации сборки задано подписывать индексы, то все равно cоздавать неподписанные индексы (только на данном этапе)" @@ -2062,6 +2056,14 @@ msgstr "При проверке целого репозитория, yamllint п msgid "When signing or verifying fails, exit with an error code." msgstr "При неудачном подписании или проверке выйдите с кодом ошибки." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Вы хотите скачать и установить F-Droid.apk через adb? (ДА/нет)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Хотите ли вы загрузить приложение(я) с сайта f-droid.org? (ДА/нет)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "При генерации ключей использовалось различимое имя (Distinguished Name) стандарта X.509" @@ -2074,6 +2076,11 @@ msgstr "Путь к SDK можно указать в переменной ANDROI msgid "ZIP file archive" msgstr "Архив ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb сообщает, что устройство «{serial}» находится в состоянии «{status}»!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2084,19 +2091,15 @@ msgstr "добавление IdentiyFile в {path}" msgid "adding to {name}: {path}" msgstr "добавление в {name}:{path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неоднозначный выбор: %(option)s совпадает с %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "неоднозначный выбор: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner из build-tools;{version} пропускает APK-пакеты с некорректными подписями v3; проигнорировано." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2106,11 +2109,13 @@ msgstr "apksigner не найден! Невозможно подписать и msgid "apksigner not found, it's required for signing!" msgstr "apksigner не найден, он необходим для создания подписи!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID приложения того файла, с которым будут производится операции" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2121,8 +2126,6 @@ msgstr "ID приложения и внутренняя версия прило msgid "archive_url needs to end with /archive" msgstr "archive_url должен оканчиваться «/archive»" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2141,7 +2144,7 @@ msgstr "попытка установить голое SSH-соединение msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не удалось разобрать спецификацию scrlib (не является строкой): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не удается открыть '%(filename)s': %(error)s" @@ -2155,14 +2158,10 @@ msgstr "не удалось открыть не-https url: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "не удалось найти необходимые srclibs: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "у субпарсера должен быть только один аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2181,14 +2180,6 @@ msgstr "клонирование {url}" msgid "commands from plugin modules:" msgstr "Команды из подключаемых модулей:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "комплекс" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2220,10 +2211,6 @@ msgstr "не удалось разобрать srclib spec (не указано msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "не удалось разобрать спецификацию scrlib (слишком много символов '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2241,15 +2228,13 @@ msgstr "удаление: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "файл зависимостей без блокировки" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "лог {path} загружен на {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2267,8 +2252,6 @@ msgstr "не удалось загрузить подписи сканера с msgid "executable binary, possibly code" msgstr "исполняемый бинарный файл, возможно код" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2277,20 +2260,14 @@ msgstr[0] "необходимо указать %s аргумент" msgstr[1] "необходимо указать %s аргумента" msgstr[2] "необходимо указать %s аргументов" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "необходимо указать хотя бы один аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "можно указать только один аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "можно указать только один аргумент" @@ -2303,10 +2280,6 @@ msgstr "fdroid [<команда>] [-h|--help|--version|<аргументы>]" msgid "fetch the latest version of signatures from the web" msgstr "получить последнюю версию подписей из интернета" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "с плавающей запятой" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "принудительно обрабатывать ошибки как предупреждения или игнорировать их." @@ -2319,8 +2292,6 @@ msgstr "команда git svn clone не выполнена" msgid "gzip file archive" msgstr "архив gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2334,35 +2305,21 @@ msgstr "index-v1 должен быть подписан, сделайте это msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 должен быть подписан, сделайте это с помощью `fdroid signindex`!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "число" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "неверное %(type)s значение: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неверный выбор: %(value)r (следует выбрать из %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "неверное значение conflict_resolution: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2400,8 +2357,6 @@ msgstr "адрес зеркала '%s' должен заканчиваться ' msgid "mirrors set twice, in config.yml and {path}!" msgstr "Зеркала установлены дважды, в config.yml и {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "взаимоисключающие аргументы не должны быть обязательными" @@ -2420,30 +2375,15 @@ msgstr "{appid} не содержит поля \"icon\"" msgid "no APK supplied" msgstr "APK файл не указан" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "такого параметра нет: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "определить версию не удалось!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "информация о версии не найдена" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "недопустимо с аргументом %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2453,72 +2393,6 @@ msgstr "необходимо указать хотя бы один аргуме msgid "only accepts strings, lists, and tuples" msgstr "принимает строки, списки и туплы" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "параметр %s: если вы действительно хотите установить все подписанные приложения, то используйте --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "параметр %s: неверное %s значение: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "параметр %s: неверный выбор: %r (следует выбрать из %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "параметр -%s не распознан" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "параметр -%s требует аргумент" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "параметру --%s не нужны аргументы" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "параметр --%s не является уникальным префиксом" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "параметр --%s не распознан" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "параметру --%s нужен аргумент" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "необязательные аргументы" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "параметры" @@ -2528,8 +2402,6 @@ msgstr "параметры" msgid "overwriting existing {path}" msgstr "перезапись существующего пути {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позиционные аргументы" @@ -2562,19 +2434,15 @@ msgstr "repo_url должен оканчиваться «/repo»" msgid "rsync is missing or broken: {error}" msgstr "rsync отсутствует или сломан: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml не установлен, не получается записать метаданные." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронизировать индексы из {path} в {url} и удалить их" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd синхронизировать индексы из {path} в {url} и удалить их" +msgstr "s3cmd синхронизирует индексы из {path} в {url} и удаляет стертые" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2589,17 +2457,7 @@ msgstr "serverwebroot: путь не заканчивается на \"fdroid\", msgid "shared library" msgstr "разделяемая библиотека" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "показать номер версии программы и выйти" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "показать это справочное сообщение и выйти" @@ -2633,29 +2491,25 @@ msgstr "статическая библиотека" msgid "supplied reference binary has allowed signer {signer}" msgstr "предоставленный эталонный двоичный файл разрешил подписанту {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "требуются аргументы: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "истина" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неизвестная строка параметра: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "неизвестный парсер %(parser_name)r (следует выбрать из %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2666,9 +2520,7 @@ msgstr "неизвестные аргументы: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезопасные права доступа к файлу '{config_file}' (должны быть 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "использование: " @@ -2681,6 +2533,10 @@ msgstr "Аpache libcloud: синхронизация с {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com ограничивает траффик, ждем повторной попытки..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "да" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2694,21 +2550,19 @@ msgstr[2] "{0} приложений, {1} алиасов ключей для по msgid "{apkfilename} ({appid}) has no metadata!" msgstr "Не обнаружено метаданных для {apkfilename} ({appid})!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "У {apkfilename} несколько файлов {name}. Выглядит подозрительно и похоже на попытку нарушения безопасности (Master Key exploit)!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml приложения {apkfilename} содержит неверную дату: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "У {appid} нет имени! Будет использовано ID приложения." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2729,7 +2583,6 @@ msgstr "{appid} содержит как APK, так и файлы: {files}" msgid "{appid} is missing {name}" msgstr "В {appid} нет {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2770,10 +2623,10 @@ msgstr "{file} пустой или поврежденный!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name}: \"{section}/icons/{path}\" не существует! Поправьте свой \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} признан устаревшим; используйте {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} дублирует {path2}, удалите один!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2795,6 +2648,11 @@ msgstr "{path}: неверная подпись \"{pattern}\". Выглядит msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} был отмечен virustotal {count} раз:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "У {path} неправильный отпечаток ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/sk/LC_MESSAGES/fdroidserver.po b/locale/sk/LC_MESSAGES/fdroidserver.po index c56e39c1..f3f21800 100644 --- a/locale/sk/LC_MESSAGES/fdroidserver.po +++ b/locale/sk/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" @@ -33,6 +33,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -43,11 +47,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -73,18 +72,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" -msgstr[2] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +87,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +107,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +127,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +140,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +150,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +160,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -292,10 +259,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +285,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +302,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +353,23 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -415,6 +392,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +409,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +422,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +452,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +479,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +546,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +594,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +635,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +644,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +681,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +706,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -770,10 +779,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +810,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -870,15 +874,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +925,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1008,16 +1015,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1130,6 +1133,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1167,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1231,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1254,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1272,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1289,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1350,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1436,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1449,12 +1483,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1470,6 +1501,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1483,6 +1519,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1531,6 +1572,10 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1651,6 +1696,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1715,6 +1764,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1736,11 +1789,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1750,7 +1798,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1788,6 +1835,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1818,11 +1866,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1836,6 +1879,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1855,11 +1899,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1874,27 +1914,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1912,6 +1935,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1928,11 +1956,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1943,6 +1966,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1964,15 +1992,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1985,6 +2026,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1997,6 +2046,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2007,18 +2061,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2029,11 +2079,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2044,8 +2096,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2064,7 +2114,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2078,14 +2128,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2104,14 +2150,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2143,10 +2181,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2162,13 +2196,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2186,8 +2222,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2196,20 +2230,14 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2222,10 +2250,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2238,8 +2262,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2253,35 +2275,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2319,8 +2327,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2339,30 +2345,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2372,72 +2363,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2447,8 +2372,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2481,13 +2404,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2503,17 +2427,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2547,29 +2461,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2580,9 +2490,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2595,6 +2503,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2608,21 +2520,19 @@ msgstr[2] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2643,7 +2553,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2684,9 +2593,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2709,6 +2618,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/sq/LC_MESSAGES/fdroidserver.po b/locale/sq/LC_MESSAGES/fdroidserver.po index efee1b91..efa0401b 100644 --- a/locale/sq/LC_MESSAGES/fdroidserver.po +++ b/locale/sq/LC_MESSAGES/fdroidserver.po @@ -1,13 +1,13 @@ # SOME DESCRIPTIVE TITLE. # This file is put in the public domain. -# Besnik Bleta , 2020, 2021, 2022, 2023, 2024. -# Hans-Christoph Steiner , 2020, 2021. +# Besnik Bleta , 2020, 2021, 2022, 2023, 2024, 2025. +# Hans-Christoph Steiner , 2020, 2021, 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.6-349-g907c04ea\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-02-20 18:58+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-26 21:33+0000\n" "Last-Translator: Besnik Bleta \n" "Language-Team: Albanian \n" "Language: sq\n" @@ -15,7 +15,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.5-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -39,6 +39,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "“%s/”\" s’ka kartelë tejtëdhënash me përputhje!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Kyçi “isPrimary” s’duhet shtuar te pasqyra!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -49,11 +53,6 @@ msgstr "“local_copy_dir” {path} s’ekziston!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' është tashmë e instaluar në {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "“{path}” përmban {name} të vjetruar ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -79,17 +78,6 @@ msgstr "“{path}” është nënshkruar me një kyç që s’lejohet:" msgid "\"{url}\" is not a valid URL!" msgstr "“{url}” s’është URL e vlefshme!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Mundësi %(option)s lyp %(number)d argument" -msgstr[1] "Mundësi %(option)s lyp %(number)d argumente" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -98,21 +86,13 @@ msgstr "%(prog)s: gabim: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "" +msgstr "S’u arrit të nënshkruhen ose verifikohen %d APK!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "U gjetën %d probleme" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [mundësi]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -133,13 +113,6 @@ msgstr "%s ka SHA-256 të gabuar: %s" msgid "%s is not an accepted build field" msgstr "%s s’është fushë e pranuar montimi" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "Mundësia %s s’merr ndonjë vlerë" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "S’u gjet 'keypass' në config.yml!" @@ -160,8 +133,6 @@ msgstr "S’u gjet 'keystorepass' te config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "S’u gjet 'repo_keyalias' te config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' është argument i pavlefshëm për pozicionalë" @@ -175,11 +146,6 @@ msgstr "'sdk_path' te 'config.yml' s’është ujdisur!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' është shumë i vjetër, fdroid lyp build-tools-{version} ose më të ri!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' do të jetë sipas një rendi kuturu! Nëse rendi është i rëndësishëm, përdorni kllapa () ose []!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -190,7 +156,7 @@ msgstr "S’u arrit të përmbushet '{path}'!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ka format të pavlefshëm, duhet të jetë një fjalor!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' s’është një {field} e vlefshme te {appid}. Rregullsi shprehjeje të rregullt: {pattern}" @@ -200,13 +166,15 @@ msgstr "'{value}' s’është një {field} e vlefshme te {appid}. Rregullsi shpr msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' s’është një {field} e vlefshme, duhet të jetë {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request xhiron vetëm me një appid!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…checkupdate dështoi për {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() e pacaktuar" @@ -220,9 +188,9 @@ msgid "A URL is required as an argument!" msgstr "Lypset një URL si argument!" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "S’u gjetën dëshmi nënshkrimi te {path}" +msgstr "Nënshkrimet APK kanë dëshmi të ndryshme te {path}:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" @@ -247,7 +215,7 @@ msgstr "Alias i kyçit të nënshkrimeve të depos te depo kyçesh" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" -msgstr "" +msgstr "Mungon AllowedAPKSigningKeys, por u dha dyor reference" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" @@ -298,13 +266,8 @@ msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to msgstr "Aplikacioni ka Dyorë, por s’ka AllowedAPKSigningKeys përkatës për të fiksuar dëshmi." #: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”" - -#: ../fdroidserver/lint.py -#, fuzzy msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”" +msgstr "Aplikacioni ka NoSourceSince ose ArchivePolicy “0 versione”, ose 0, por AutoUpdateMode ose UpdateCheckMode janë vënë si “Asnjë”" #: ../fdroidserver/lint.py #, python-brace-format @@ -328,6 +291,14 @@ msgstr "Po arkivohet {apkfilename} me nënshkrim të pavlefshëm!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode me UpdateCheckMode: HTTP duhet të ketë një rregullsi." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "“Jo” e automatizuar për krejt hapat." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "“Po” e automatizuar për krejt hapat." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -337,7 +308,6 @@ msgstr "Lloj i gabuar zëri “{mirrortype}” në formësim pasqyrash: {mirror} msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL bazë për t’u pasqyruar, mund të përfshijë kyçin e nënshkrimit të treguesit që përdor vargun e kërkimi: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -388,16 +358,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "S’montohet dot, për shkak të {} gabimi teksa skanohej" msgstr[1] "S’montohet dot, për shkak të {} gabimeve teksa skanohej" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "S’u arrit të lexohej {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "S’rishkruhet dot “{path}”" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Kategoritë '%s' s’janë të vlefshme" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "S’janë ujdisur kategori" @@ -405,7 +382,7 @@ msgstr "S’janë ujdisur kategori" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" -msgstr "" +msgstr "Kategori “{category}” e përkufizuar, por jo e përdorur për ndonjë aplikacion!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" @@ -420,6 +397,10 @@ msgstr "Po kontrollohet arkivimi për {appid} - apks:{integer}, keepversions:{ke msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Përditësim nha e para - mos përdor fshehtina, ripërpuno krejt APK-të" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Ngjyros ç’jep regjistri" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Listë kategorish ndarë me presje." @@ -433,6 +414,10 @@ msgstr "Urdhër '%s' jo i pranuar.\n" msgid "Commit changes" msgstr "Depozito ndryshimet" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Parashtro ndryshimet, depozitoji, mandej bëj një kërkesë për përzierje" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -442,20 +427,17 @@ msgstr "Përkufizime “{field}” me përplasje, mes kartelash .yml dhe të pë msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Argumente që përplasen: '--verbose' dhe '--quiet' s’mund të përdoren në të njëjtën kohë." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Kartela formësimi me përplasje! Po përdoret {newfile}, po shpërfillet {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Në sistemin tuaj s’u gjet '{command}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "S’u gjet dot kod i versionit më të ri" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "S’u gjet dot emër i versionit më të ri" @@ -475,6 +457,7 @@ msgstr "S’u hap dot kartela APK {path} për analizim : " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "S’u përtyp dot madhësia “{size}”, lloj i gabuar “{type}”" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "S’u gjet dot ID Aplikacione" @@ -501,6 +484,11 @@ msgstr "U krijua kontejner i ri “{name}”" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Po krijohet “{path}” për formësim të s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Po krijohet '{config_file}' e zbrazët" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Po krijohet drejtori regjistrash" @@ -563,11 +551,6 @@ msgstr "Përmbledhja '%s' është thjesht përmbledhja e aplikacionit" msgid "Description has a duplicate line" msgstr "Përshkrimi ka një rresht të përsëdytur" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Përshkrimi ka një listë (%s), por kjo s’është as me toptha (*), as e numërtuar (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -576,12 +559,12 @@ msgstr "Përshkrimi me gjatësi {length} është mbi kufirin prej {limit} shenja #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" -msgstr "" +msgstr "Mos kishit në mendje config/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" -msgstr "" +msgstr "Mos kishit në mendje {code}?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" @@ -616,15 +599,14 @@ msgstr "Mos rifresko depon, e dobishme kur testohet një montim pa lidhje intern msgid "Don't use rsync checksums" msgstr "Mos përdorni checksum-e rsync-u" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Shkarkojeni F-Droid.apk duke përdorur pasqyra që kanë më pak rrjedhje te rrjeti" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Shkarko pasqyra të plota deposh të vogla" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Po shkarkohet %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Shkarkimi i depos dështoi një herë, s’po riprovohet." @@ -637,7 +619,7 @@ msgstr "Shkarkimi i {url} dështoi. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" -msgstr "" +msgstr "U shpërfill deklarim i përsëdytur Anti-Veçorie te {path}!" #: ../fdroidserver/index.py #, python-format @@ -652,20 +634,12 @@ msgstr "Lidhje e përsëdytur te '{field}': {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "GABIM: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "GABIM: Nënurdhri “server” është hequr, përdorni “deploy”!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"GABIM: ky urdhër s’duhet përdorur kurrë për krijimin e një pasqyre të f-droid.org!\n" -"Një pasqyrë e plotë e f-droid.org lyp më tepër se 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "GABIM: lloj CI i pambuluar, arnimet janë të mirëpritura!" @@ -678,12 +652,22 @@ msgstr "GABIM: strehë git “%s” që nuk mbulohet, arnimet janë të mirëpri #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "GABIM: {key} te {path} s’është “archive” apo “repo”!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "GABIM: {key} s’është kyç i vlefshëm!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "GABIM: Vlera e {key} duhet të jetë e llojit {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "GABIM: {key}:{subkey} te {path} s’është te kyçet e lejuar: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -704,9 +688,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "S’është ujdisur ndryshore {var} nga {configname}!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "S’është ujdisur ndryshore {{env: {var}}}!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Gabim në sendërtim të 'github_releases', {} s’është e pranishme. (Mund t’ju duhet të xhironi `fdroid update` së pari.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -724,6 +713,10 @@ msgstr "Përftoji tejtëdhënat e aplikacionit prej një depoje burim" msgid "Extract signatures from APKs" msgstr "Përfto nënshkrime prej APK-sh" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk s’u shkarkua dot nga ndonjë burim i njohur!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -793,10 +786,6 @@ msgstr "Kartela u zhduk teksa përpunohej: {path}" msgid "Finished" msgstr "Përfundoi" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Metodat e dhurimit përmes Flattr-i i takojnë fushës FlattrID:" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Etiketa HTML të ndaluara" @@ -828,7 +817,6 @@ msgstr "U gjet kartelë e dëmtuar themeli “{path}” për “{name}”:" msgid "Found invalid appids in arguments" msgstr "U gjetën appid-e të pavlefshëm te argumente" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "U gjetën versionCodes të pavlefshëm për disa aplikacione" @@ -839,9 +827,8 @@ msgid "Found multiple JAR Signature Block Files in {path}" msgstr "Te {path} u gjetën Kartela të shumta JAR Blloqesh Nënshkrimi" #: ../fdroidserver/common.py -#, fuzzy msgid "Found multiple Signer Certificates!" -msgstr "U gjetën dëshmi të shumta nënshkrimi për depon." +msgstr "U gjetën Dëshmi të shumta Nënshkruesi!" #: ../fdroidserver/metadata.py #, python-brace-format @@ -894,23 +881,20 @@ msgstr "Veprimi “git clean” dështoi" msgid "Git fetch failed" msgstr "Veprimi “git fetch” dështoi" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Veprimi “git prune” dështoi" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Veprimi “git remote set-head” dështoi: “%s”" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Veprimi “git reset” dështoi" #: ../fdroidserver/common.py -#, fuzzy msgid "Git submodule deinit failed" -msgstr "Veprimi “git submodule update” dështoi" +msgstr "Veprimi “git submodule deinit” dështoi" #: ../fdroidserver/common.py msgid "Git submodule sync failed" @@ -948,6 +932,11 @@ msgstr "Po shpërfillen zëra FUNDING.yml më të gjatë se 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Po shpërfillet element i gabuar në manifest: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Po shpërfillet {oldfile} e nxjerrë nga përdorimi, përdorni {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Po shpërfillet paketë pa tejtëdhëna: " @@ -1033,16 +1022,12 @@ msgstr "VercodeOperationi pavlefshëm: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation i pavlefshëm: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "ID e pavlefshme aplikacioni {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Bulean i pavlefshëm '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Listë me toptha e pavlefshme" @@ -1119,7 +1104,7 @@ msgstr "Depo kyçesh për kyç nënshkrimi:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " -msgstr "" +msgstr "Te AllowedAPKSigningKeys është përdorur kyç i ditur diagnostikimi: " #: ../fdroidserver/lint.py #, python-brace-format @@ -1155,6 +1140,11 @@ msgstr "Rresht serverwebroot i keqformuar:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "U mbërrit në thellësi maksimum rekursive te kartelë ZIP: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Formësimi i pasqyrës për {url} përmban kyç “isPrimary”!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Pasqyro depon e plotë dhe arkivin, krejt llojet e kartelave." @@ -1184,6 +1174,10 @@ msgstr "S’u gjet SDK Android!" msgid "No attached devices found" msgstr "S’u gjetën pajisje të bashkëngjitura" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "S’u gjetën pajisje për `adb install`! Ju lutemi, vendosni një të tillë." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "S’ka shenja gishtash te URL-ja." @@ -1244,7 +1238,6 @@ msgstr "S’u gjetën dëshmi nënshkrimi te {path}" msgid "No such package: %s" msgstr "S’ka paketë të tillë: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1259,9 +1252,8 @@ msgid "No unsigned directory - nothing to do" msgstr "S’ka drejtori të panënshkruar - s’ka ç’bëhet" #: ../fdroidserver/__main__.py -#, fuzzy msgid "No version information could be found." -msgstr "s’u gjetën hollësi versioni" +msgstr "S’u gjetën hollësi versioni." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" @@ -1280,7 +1272,6 @@ msgstr "S’ka ç’bëhet për {appid}." msgid "Now set these in config.yml:" msgstr "Tani, ujdisini këto te config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1298,26 +1289,28 @@ msgstr "packagename i OBB-së nuk përputhet me ndonjë APK të mbuluar:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Makinë jo në linjë, po anashkalohet prodhim pasqyre git, deri sa `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Një nga zërat e formësimit të 'github_releases'mungon te vlera 'packageNames' value. Po anashkalohet…" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Njërit prej zërave të formësimit të 'github_releases' i mungon vlera 'projectUrl'. Po anashkalohet…" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Një nga zërat e formësimit të 'github_releases' mungon te vlera 'token' value. Po anashkalohet…" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Si formate grafike mbulohen vetëm PNG dhe JPEG, u gjet: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Shtyp vetëm dallimet me Play Store-in" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Pranon vetëm një “env” të vetëm kyçi" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1327,10 +1320,6 @@ msgstr "Kryeje vetëm për aplikacione me vetëpërditësime" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Metodat e dhurimit përmes OpenCollective i takojnë fushës OpenCollective:" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Mundësi" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Hidhe raportin JSON te kartelë e emërtuar sipas APK-sh." @@ -1388,6 +1377,11 @@ msgstr "Shteg për te depo kyçesh për kyçin e nënshkrimit të depos" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Shtype ndryshoren e fshehtë te terminali, për kopjim/ngjitje të kollajtë" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Mënyra “Privatësi” qe aktivizuar bazuar në vendoren tuaj ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1434,9 +1428,8 @@ msgid "Pushing binary transparency log to {url}" msgstr "" #: ../fdroidserver/deploy.py -#, fuzzy msgid "Pushing to remote server failed!" -msgstr "Veprimi “git remote set-head” dështoi: “%s”" +msgstr "Depozitimi te shërbyesi i largët dështoi!" #: ../fdroidserver/deploy.py #, python-brace-format @@ -1472,9 +1465,17 @@ msgid "Reading {apkfilename} from cache" msgstr "Po lexohet {apkfilename} prej fshehtine" #: ../fdroidserver/build.py -#, fuzzy msgid "Refresh and cache scanner rules and signatures from the network" -msgstr "sill nga interneti versionin më të ri të nënshkrimeve" +msgstr "Rifresko dhe ruaj në fshehtinë rregulla skaneri nga rrjeti" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "S’po pranohet të nënshkruhet '{path}', kartela ekziston te të dyja dosjet, {dir1} dhe {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Hiqni paketimin e burimit dhe çfarëdo APK-sh, nëse verifikimi është i suksesshëm." #: ../fdroidserver/common.py msgid "Removing specified files" @@ -1489,13 +1490,10 @@ msgstr "Po hiqet {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Riemërtoni kartelat APK që nuk përputhen me package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Mënyra “RepoTrunk” ka kuptim vetën në depo git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Zeroje dhe krijo një shërbyes montimesh të ri fringo, edhe nëse ai ekzistuesi duket të jetë në rregull." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1510,6 +1508,11 @@ msgstr "Ripërmaso krejt ikonat që tejkalojnë madhësinë maksimum në piksel msgid "Restrict output to warnings and errors" msgstr "Kufizoje output-in në sinjalizime dhe gabime" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Po riprovohet shkarkim i dështuar: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Rishkruaj krejt kartelat e tejtëdhënave" @@ -1526,7 +1529,7 @@ msgstr "Xhirojeni në depo git që ka ndryshime të padepozituara te dega vendor #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Kalo nëpër {cibase} për të gjetur -debug.apk. dhe anashkalo repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1544,7 +1547,7 @@ msgstr "Po xhirohet wget te {path}" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" -msgstr "" +msgstr "SHA-256 e {url} nuk përkon me zërin!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." @@ -1575,6 +1578,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Kontrolli gjeti {} problem" msgstr[1] "Kontrolli gjeti {} probleme" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Po kontrollohet te APK për blloqe ekstra nënshkrimi." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Po kontrollohet APK me “dexdump” për klasa të ditura jo të lira." @@ -1695,6 +1702,10 @@ msgstr "U përdor mënyra “tags update” në git-svn, por depoja s’qe ujdis msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Mënyra testim - hidhe output-in vetëm te drejtoria tmp, dhe monto përherë, edhe nëse output-i ekziston tashmë." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Paketa Python “qrcode” s’është e instaluar (p.sh., apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1731,11 +1742,8 @@ msgid "These are the apps that have been archived from the main repo." msgstr "Këto janë aplikacionet që janë arkivuar nga depoja kryesore." #: ../fdroidserver/mirror.py -#, fuzzy msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." -msgstr "" -"GABIM: ky urdhër s’duhet përdorur kurrë për krijimin e një pasqyre të f-droid.org!\n" -"Një pasqyrë e plotë e f-droid.org lyp më tepër se 200GB." +msgstr "Ky urdhër s’duhet përdorur kurrë për krijimin e një pasqyre të f-droid.org! Një kopje e plotë lyp më tepër se 600GB." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." @@ -1771,9 +1779,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Për të përdorur awsbucket, te config.yml duhen ujdisur edhe awssecretkey dhe awsaccesskey!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Për të përdorur awsbucket, te config.yml duhen ujdisur edhe awssecretkey dhe awsaccesskey!" +msgstr "Që të përdorni rclone, rclone_config dhe awsbucket duhen ujdisur te config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1796,11 +1803,6 @@ msgstr "Etiketë licence “{}” e papritur! Përdorni vetëm etiketa të mirat msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Etiketë e papritur licence “{}”! Përdorni vetëm etiketa licencash të formësuara te kartela e formësimit tuaj" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Vendmbërritje e papritur lidhjeje simbolike: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1810,7 +1812,6 @@ msgstr "Zë i panjohur {key} në {configname}" msgid "Unknown exception found!" msgstr "U gjet përjashtim i panjohur!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1848,6 +1849,7 @@ msgstr "Fushë aplikacioni jo e pranuar '{fieldname}' te '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Flamurkë e jo e pranuar montimi '{build_flag}' te '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1878,11 +1880,6 @@ msgstr "Shteg scandelete i papërdorur: %s" msgid "Unused scanignore path: %s" msgstr "Shteg scanignore i papërdorur: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Po përftohet te %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Përditësoni të dhëna depoje për paketa të reja" @@ -1896,6 +1893,7 @@ msgstr "Përditësoni regjistrin e transparencës së dyorit për një URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ka URL të pavlefshme: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1913,14 +1911,9 @@ msgstr "UpdateCheckData s’është URL e vlefshme: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates s’është xhiruar ende" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -#, fuzzy -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates s’është xhiruar ende" +msgstr "UpdateCheckMode është ujdisur, por duket sikur checkupdates s’është xhiruar ende." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Si UpdateCheckName është caktuar ID aplikacioni të njohur - s’mund të hiqet" @@ -1935,27 +1928,9 @@ msgstr "Po ngarkohet {apkfilename} te androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Po ngarkohet {apkfilename} to virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Përdorim" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Përdorim: %s\n" - #: ../fdroidserver/lint.py -#, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master" +msgstr "Për të treguar një kartelë te dega parazgjedhje, përdorni /HEAD, në vend se /master apo /main" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." @@ -1975,9 +1950,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Po përdoret “{path}” për formësim të s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Po përdoret “{path}” për formësim të s3cmd." +msgstr "Po përdoret “{path}” për njëkohësim me depozitë të largët." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1988,19 +1963,13 @@ msgid "Using APK Signature v3" msgstr "Po përdoret Nënshkrimi APK-je v3" #: ../fdroidserver/common.py -#, fuzzy msgid "Using JAR Signature" -msgstr "Po përdoret Nënshkrimi APK-je v2" +msgstr "Po përdoret Nënshkrim JAR" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Po përdoret jarsigner Java, s’rekomandohet për verifikim APK-sh! Përdorni apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Po përdoret androguard prej “{path}”" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2012,9 +1981,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Po përdoret depo ekzistuese kyçesh “{path}”" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Po përdoret s3cmd për njëkohësim me: {url}" +msgstr "Po përdoret rclone për njëkohësim me: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2037,15 +2006,28 @@ msgstr "Verifikoni integritetin e paketave të shkarkuara" msgid "Verifying index signature:" msgstr "Po verifikohet nënshkrim treguesi:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Po verifikohet paketë {path} me apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Kyçi API VirusTotal s’mund të ngarkojë kartela më të mëdha se 2MB, përdorni {url} që të ngarkoni {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Sinjalizo rreth gabimesh të mundshëm tejtëdhënash" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Kartelë dyore WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Kur është formësuar për tregues të nënshkruar, në këtë fazë krijo vetëm tregues të panënshkruar" @@ -2056,7 +2038,15 @@ msgstr "" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." -msgstr "" +msgstr "Kur nënshkrimi, ose verifikimi dështon, dil me një kod gabimi." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Doni të shkarkohet dhe instalohet F-Droid.apk përmes adb-je? (PO/jo)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Doni të shkarkohet aplikacioni(et) që nga f-droid.org? (PO/jo)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" @@ -2070,6 +2060,11 @@ msgstr "Mund të përdorni ANDROID_HOME që të caktoni shtegun për te SDK-ja j msgid "ZIP file archive" msgstr "Arkiv kartelash ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb-ja njofton se {serial} është “{status}”!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2080,19 +2075,15 @@ msgstr "po shtohet IdentityFile te {path}" msgid "adding to {name}: {path}" msgstr "po shtohet te {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "mundësi e dykuptimtë: %(option)s mund të përputhej me %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "mundësi e dykuptimtë: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner te build-tools;{version} përcjell APK-ra ne nënshkrime v3 të pavlefshme, po shpërfillet." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2102,11 +2093,13 @@ msgstr "S’u gjet apksigner! S’nënshkruhen ose verifikohen dot APK-ra modern msgid "apksigner not found, it's required for signing!" msgstr "S’u gjet apksigner, është i domosdoshëm për nënshkrim!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID aplikacioni e kartelës mbi të cilën të veprohet" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2117,8 +2110,6 @@ msgstr "ID aplikacioni me versionCode opsional në formën APPID[:VERCODE]" msgid "archive_url needs to end with /archive" msgstr "archive_url lypset të përfundojë me /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2137,7 +2128,7 @@ msgstr "po tentohet lidhje SSH e zhveshur, për të testuar kyç sendërtimesh:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "s’përtyp dot specifikim scrlib (s’është një varg): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "s’hapet dot '%(filename)s': %(error)s" @@ -2151,14 +2142,10 @@ msgstr "s’mund të hapet url jo https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "s’gjenden dot srclibs të domosdoshme: “{path}”" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "s’mund të kihen argumente të shumtë për subparser" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2177,14 +2164,6 @@ msgstr "po klonohet {url}" msgid "commands from plugin modules:" msgstr "urdhra prej modulesh shtojce:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "kompleks" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2208,18 +2187,13 @@ msgid "could not parse '{path}'" msgstr "s’u përtyp dot '{path}'" #: ../fdroidserver/common.py -#, fuzzy msgid "could not parse srclib spec (no name specified): '{}'" -msgstr "s’u përtyp dot specifikim scrlib (s’u dha referencë): '{}'" +msgstr "s’u përtyp dot specifikim scrlib (s’u dha emër): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "s’u përtyp dot specifikim scrlib (s’u dha referencë): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "s’u përtyp dot specifikim scrlib (shumë shenja '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2237,15 +2211,13 @@ msgstr "po fshihet: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "kartelë varësie pa kyç" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2263,8 +2235,6 @@ msgstr "dështoi shkarkimi i nënshkrimeve të kontrollorit prej “{}”" msgid "executable binary, possibly code" msgstr "dyor i ekzekutueshëm, ka gjasa të jetë kod" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2272,20 +2242,14 @@ msgid_plural "expected %s arguments" msgstr[0] "pritej %s argument" msgstr[1] "priteshin %s argumente" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "pritej e pakta një argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "pritej e shumta një argument" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "pritej një argument" @@ -2298,10 +2262,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "sill nga interneti versionin më të ri të nënshkrimeve" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "bëji gabimet e tejtëdhënave (parazgjedhje) të jenë sinjalizime, ose të shpërfillen." @@ -2314,8 +2274,6 @@ msgstr "veprimi “git svn clone” dështoi" msgid "gzip file archive" msgstr "Arkiv gzip kartelash" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2329,35 +2287,21 @@ msgstr "index-v1 duhet të ketë një nënshkrim, përdorni `fdroid signindex` p msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 duhet të ketë një nënshkrim, përdorni `fdroid signindex` për ta krijuar!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "numër i plotë" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "vlerë %(type)s e pavlefshme: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "zgjedhje e pavlefshme: %(value)r (zgjidhni nga %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "vlerë e pavlefshme conflict_resolution: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2391,12 +2335,10 @@ msgid "mirror '%s' does not end with 'fdroid'!" msgstr "pasqyra '%s' s’përfundon me 'fdroid'!" #: ../fdroidserver/index.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "Tani, ujdisini këto te config.yml:" +msgstr "pasqyra të ujdisura dy herë, te config.yml dhe {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "argumentet që përjashtojnë njëri-tjetrin duhet të jenë opsionalë" @@ -2415,30 +2357,15 @@ msgstr "s’ka “icon” te {appid}" msgid "no APK supplied" msgstr "s’u dha APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "s’ka mundësi të tillë: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "s’u gjetën të dhëna versioni!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "s’u gjetën hollësi versioni" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "e palejuar me argumentin %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2448,72 +2375,6 @@ msgstr "një nga argumentet %s është i domosdoshëm" msgid "only accepts strings, lists, and tuples" msgstr "prano vetëm vargje, lista dhe dyshe" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "mundësi %s: Nëse doni vërtet të instaloni krejt aplikacionet e nënshkruar, përdorni --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "mundësi %s: vlerë %s e pavlefshme: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "mundësia %s: zgjedhje e pavlefshme: %r (zgjidhni nga %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "mundësi -%s jo e pranuar" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "mundësia -%s lyp argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "mundësia --%s s’duhet të ketë një argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "mundësia --%s s’është parashtesë unike" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "mundësi --%s e papranuar" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "mundësia --%s lyp argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "argumente opsionalë" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "mundësi" @@ -2523,8 +2384,6 @@ msgstr "mundësi" msgid "overwriting existing {path}" msgstr "po mbishkruhet {path} ekzistues" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "argumente pozicionalë" @@ -2536,7 +2395,7 @@ msgstr "" #: ../fdroidserver/build.py msgid "reference binary missing signature" -msgstr "" +msgstr "dyorit të refrencës i mungon nënshkrimi" #: ../fdroidserver/signatures.py #, python-brace-format @@ -2555,21 +2414,17 @@ msgstr "repo_url lypset të përfundojë me /repo" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml s’është i instaluar, s’mund të shkruhen tejtëdhëna." +msgstr "rsync-u mungon, ose është i dëmtuar: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" -msgstr "s3cmd sync indexes {path} to {url} and delete" +msgstr "" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sync indexes {path} to {url} and delete" +msgstr "s3cmd njëkohëson tregues nga {path} te {url} dhe fshin të hequrit" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2577,25 +2432,14 @@ msgid "scanner cache is malformed! You can clear it with: '{clear}'" msgstr "fshehtina e kontrollorit është e keqformuar! Mund ta spastroni me: “{clear}”" #: ../fdroidserver/deploy.py -#, fuzzy msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" -msgstr "local_copy_dir does s’mbaron me “fdroid”, ndoshta kishit në mendje: “{path}”" +msgstr "serverwebroot: shtegu nuk mbaron me “fdroid”, ndoshta kishit në mendje një nga këto:" #: ../fdroidserver/scanner.py msgid "shared library" msgstr "librari e përbashkët" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "shfaq numër versioni programi dhe dil" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "shfaq këtë mesazh ndihme dhe dil" @@ -2629,29 +2473,25 @@ msgstr "librari statike" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "argumentet vijuese janë të domosdoshëm: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "varg i papritur mundësie: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "përtypës i panjohur %(parser_name)r (choices: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2662,9 +2502,7 @@ msgstr "argumente të papranuar: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "leje jo të parrezikshme mbi '{config_file}' (duhet të ishin 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "përdorimi: " @@ -2677,6 +2515,10 @@ msgstr "po përdoret Apache libcloud për njëkohësim me {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com i kufizon shpejtësitë, po pritet për riprovim…" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "po" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2689,21 +2531,19 @@ msgstr[1] "{0} aplikacione, {1} aliase kyçi" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) s’ka tejtëdhëna!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} ka shumë kartela {name}, duket si rreng me Kyçin e Përgjithshëm!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml e {apkfilename} ka një datë të gabuar: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} s’ka emër! Në vend të tij po përdoret ID aplikacioni." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2724,7 +2564,6 @@ msgstr "{appid} ka nga të dyja, APK-ra dhe kartela: {files}" msgid "{appid} is missing {name}" msgstr "{appid} i mungon {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2765,10 +2604,10 @@ msgstr "{file} është e zbrazët ose e dëmtuar!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} “{section}/icons/{path}” s’ekziston! Kontrolloni “config.yml”." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} është nxjerrë nga përdorimi, përdorni {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} është përsëdytje e {path2}, hiqeni njërin!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2788,27 +2627,32 @@ msgstr "{path} ka “{pattern}” të gabuar nënshkrimi kartele, ka gjasa të j #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "për {path} ka {count} herë sinjalizime nga virustotal:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} ka shenja gishtash të gabuara ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} s’është “key: value”, por një {datatype}!" #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "{path} is not a standard config file!" -msgstr "'sdk_path' te 'config.yml' s’është ujdisur!" +msgstr "{path} s’është kartelë standarde formësimi!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path} s’është listë, por një {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} s’është {expected_type}, por një {datatype}!" #: ../fdroidserver/update.py #, python-brace-format @@ -2823,7 +2667,7 @@ msgstr "{path} më tepër se 200MB, ngarkojeni dorazi: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}: “{code}” s’është kod i vlefshëm vendi ISO_3166-1 alpha-2!" #: ../fdroidserver/update.py #, python-brace-format diff --git a/locale/sr/LC_MESSAGES/fdroidserver.po b/locale/sr/LC_MESSAGES/fdroidserver.po index c45ba575..5413ac1d 100644 --- a/locale/sr/LC_MESSAGES/fdroidserver.po +++ b/locale/sr/LC_MESSAGES/fdroidserver.po @@ -3,12 +3,13 @@ # Саша Петровић , 2022. # Đorđe Vasiljević , 2022. # Reno Tx , 2024. +# Hans-Christoph Steiner , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1b0\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-09-07 00:41+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2024-12-30 22:00+0000\n" "Last-Translator: Reno Tx \n" "Language-Team: Serbian \n" "Language: sr\n" @@ -16,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.8-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -40,6 +41,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "Датотека метаподатака за „%s/“ не постоји!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +55,6 @@ msgstr "\"local_copy_dir\" {path} не постоји!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" је већ инсталиран на {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" садржи застарели {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,18 +80,6 @@ msgstr "„{path}” је потписан кључем који није доз msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" није валидан URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s опција захтева %(number)d аргумент" -msgstr[1] "%(option)s опција захтева %(number)d аргументa" -msgstr[2] "%(option)s опција захтева %(number)d аргуменaтa" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +95,6 @@ msgstr "%d АПК-ова није успело да се потпише или msgid "%d problems found" msgstr "%d проблема пронађено" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [опције]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +115,6 @@ msgstr "%s има лош SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s није прихваћено поље за градњу" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "Опција %s не прихвата вредност" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' није пронађен у config.yml!" @@ -162,8 +135,6 @@ msgstr "'keystorepass' није пронађен у config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' није пронађен у config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'захтевано' је неважећи аргумент за позиционе параметре" @@ -177,11 +148,6 @@ msgstr "'путања_до_сдк' није постављена у config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' је превише стар, fdroid захтева build-tools-{version} или новији!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' ће бити у насумичном редоследу! Користите () или [] заграде ако је редослед важан!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -192,7 +158,7 @@ msgstr "'{path}' није успео да се изврши!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' има неважећи формат, треба да буде речник!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' није валидан {field} у {appid}. Регекспатерн: {pattern}" @@ -202,13 +168,15 @@ msgstr "'{value}' није валидан {field} у {appid}. Регекспат msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' није важећи {field}, треба да буде {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request се извршава само на једној апликацији!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...провера ажурирања није успела за {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() није дефинисано" @@ -299,10 +267,6 @@ msgstr "Андроид СДК алат {cmd} није пронађен!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Апликација има бинарне фајлове али нема одговарајуће AllowedAPKSigningKeys за пиновање сертификата." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Апликација има NoSourceSince или ArchivePolicy \"0 верзија\" али AutoUpdateMode или UpdateCheckMode нису None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Апликација има NoSourceSince или ArchivePolicy \"0 верзија\" или 0, али AutoUpdateMode или UpdateCheckMode нису None" @@ -329,6 +293,14 @@ msgstr "Архивирање {apkfilename} са неважећим потпис msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode са UpdateCheckMode: HTTP мора имати образац." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Аутоматски одговори \"не\" на све упите." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Аутоматски одговори \"да\" на све упите." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -338,7 +310,6 @@ msgstr "Лош тип уноса \"{mirrortype}\" у конфигурацији msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Основни URL за огледало, може укључивати кључ за потписивање индекса користећи упит низ: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -390,16 +361,23 @@ msgstr[0] "Не може се изградити због {} грешке при msgstr[1] "Не може се изградити због {} грешке приликом скенирања" msgstr[2] "Не може се изградити због {} грешака приликом скенирања" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Није успело читање {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Не могу да препишем \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Категорије '%s' нису важеће" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категорије нису подешене" @@ -422,6 +400,10 @@ msgstr "Провера архивирања за {appid} - апк-и:{integer}, msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Чисто ажурирање – не користите кешеве, поново обрађујте све АПК-ове" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Бојење излазних логова" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Запета раздвојена листа категорија." @@ -435,6 +417,10 @@ msgstr "Наредба „%s” није препозната.\n" msgid "Commit changes" msgstr "Потврди измене" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Уређивање промена, пуш, затим направите захтев за спајање" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -444,20 +430,17 @@ msgstr "Конфликтне дефиниције \"{field}\" између .yml msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Контрадикторни аргументи: '--verbose' и '--quiet' не могу бити наведени у исто време." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Конфликтни конфигурациони фајлови! Користи се {newfile}, игнорише се {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Није могуће пронаћи '{command}' на вашем систему" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Није могуће пронаћи најновији верзијски код" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Није могуће пронаћи назив најновије верзије" @@ -477,6 +460,7 @@ msgstr "Није могуће отворити APK {path} за анализу: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Није могуће парсовање величине \"{size}\", погрешан тип \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Није пронађен ИД апликације" @@ -503,6 +487,11 @@ msgstr "Креиран нови контејнер \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Креирање \"{path}\" за конфигурацију s3cmd." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Читање '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Креирање директоријума за записе" @@ -565,11 +554,6 @@ msgstr "Опис '%s' је само сажетак апликације" msgid "Description has a duplicate line" msgstr "Опис има дупликатну линију" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Опис има листу (%s) али није тачкаст (*) нити нумерисан (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,15 +602,14 @@ msgstr "Не освежавајте репозиторијум, корисно msgid "Don't use rsync checksums" msgstr "Не користите rsync чексуме" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Преузмите F-Droid.apk користећи огледала која мање цуре у мрежу" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Преузмите комплетне огледале малих репоа" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Преузимање %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Преузимање складишта је већ једном неуспело, не покушавам поново." @@ -660,14 +643,6 @@ msgstr "ГРЕШКА: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ГРЕШКА: Подкоманда „server“ је уклоњена, користите „deploy“!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ГРЕШКА: ову команду никада не треба користити за пресликавање f-droid.org!\n" -"Потпуно пресликавање f-droid.org захтева више од 200ГБ." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ГРЕШКА: неподржани тип CI, закрпе добродошле!" @@ -680,12 +655,22 @@ msgstr "ГРЕШКА: неподржан git домаћин \"%s\", закрпе #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "ERROR: {key} у {path} није \"archive\" или \"repo\"!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "ERROR: {key}:{subkey} у {path} није у дозвољеним кључевима: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -706,9 +691,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Еколошка променљива {var} из {configname} није подешена!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Еколошка променљива {var} из {configname} није подешена!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Error deploying 'github_releases', {} није присутан. (Можда треба прво да покренете `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -726,6 +716,10 @@ msgstr "Извлачење метаподатака апликације из и msgid "Extract signatures from APKs" msgstr "Извуците потписе из АПК-ова" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk није могао да се преузме са било ког познатог извора!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -795,10 +789,6 @@ msgstr "Фајл је нестао током обраде: {path}" msgid "Finished" msgstr "Завршено" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Методе донације путем Flattr-а спадају у поље FlattrID:" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Забрањене HTML ознаке" @@ -830,7 +820,6 @@ msgstr "Пронађена лоша датотека за финансирање msgid "Found invalid appids in arguments" msgstr "Пронађени неважећи ID-еви апликација у аргументима" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Пронађени неважећи верзијски кодови за неке апликације" @@ -895,15 +884,13 @@ msgstr "Гит чишћење није успело" msgid "Git fetch failed" msgstr "Преузимање из Гит-а није успело" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune није успео" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head неуспешан: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Гит ресет није успео" @@ -948,6 +935,11 @@ msgstr "Игнорисање FUNDING.yml уноса дужег од 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Игнорисање лошег елемента у манифесту: %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} је застарео, користите {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Игнорисање пакета без метаподатака: " @@ -1033,16 +1025,12 @@ msgstr "Неважећа VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Неважећа VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Неважећи идентификациони број апликације {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Неважећи буловски '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Неисправна наменска листа" @@ -1155,6 +1143,11 @@ msgstr "Неисправна линија серверског корена ве msgid "Max recursion depth in ZIP file reached: %s" msgstr "Достигнута максимална дубина рекурзије у ZIP датотеци: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Зерклите потпуну репозиторyју и архиву, све типове фајлова." @@ -1184,6 +1177,10 @@ msgstr "Нема пронађеног Android SDK!" msgid "No attached devices found" msgstr "Није пронађен ниједан прикључени уређај" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Нема пронађених уређаја за `adb install`! Молимо вас, уметните један." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Нема отиска прста у УРЛ-у." @@ -1202,7 +1199,7 @@ msgstr "Нема информација." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" -msgstr "Нема одговарајућих ознака." +msgstr "Нема одговарајућих ознака" #: ../fdroidserver/update.py #, python-brace-format @@ -1244,7 +1241,6 @@ msgstr "Нема сертификата за потпис у {path}" msgid "No such package: %s" msgstr "Нема пакета: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1279,7 +1275,6 @@ msgstr "Ништа за радити за {appid}." msgid "Now set these in config.yml:" msgstr "Сада поставите ове у config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1297,26 +1292,28 @@ msgstr "Име пакета OBB не одговара подржаном APK-у: msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Оффлайн машина, прескочено генерисање git огледала до `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "Једна од 'github_releases' конфигурационих ставки нема 'packageNames' вредност. прескакање ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "Једна од 'github_releases' конфигурационих ставки недостаје 'projectUrl' вредност. прескакање ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "Једна од 'github_releases' конфигурационих ставки нема 'token' вредност. прескакање ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Само PNG и JPEG су подржани за графику, нађено: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Само штампај разлике са Плеј продавницом" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1326,10 +1323,6 @@ msgstr "Само процесирај апликације са автоматс msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Методе донација OpenCollective припадају OpenCollective: пољу" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Опције" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Извештај у JSON формату сачувај у датотеку именовану по APK." @@ -1387,6 +1380,11 @@ msgstr "Путања до хранионице за кључ потписива msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Штампај тајну променљиву на терминал за лако копирање/налепљивање" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Режим приватности је омогућен на основу ваше локације ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1473,6 +1471,15 @@ msgstr "Читање {apkfilename} из кеша→" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Освежите и кеширајте правила и потписе скенера са мреже" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Уклони изворни tarball и све APK-ове ако су успешно проверени." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Уклањање наведених датотека" @@ -1486,13 +1493,10 @@ msgstr "Уклањање {path}" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Преименујте APK фајлове који не одговарају package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "RepoTrunk режим ажурирања има смисла само у git-svn репозиторјима" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Ресетујте и креирајте потпуно нови билд сервер, чак и ако се постојећи чини у реду." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1507,6 +1511,11 @@ msgstr "Промени величину свих икона које прела msgid "Restrict output to warnings and errors" msgstr "Ограничите излаз на упозорења и грешке" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Поновно покушавање неуспелог преузимања: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Преупишите све метаподатке" @@ -1523,7 +1532,7 @@ msgstr "Покрени на git репозиторијуму који има н #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Покрените преко {cibase} да пронађете -debug.apk. и прескочите repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1573,6 +1582,10 @@ msgstr[0] "Скенирање је пронашло {} проблем" msgstr[1] "Скенирање је пронашло {} проблема" msgstr[2] "Скенирање је пронашло {} проблема" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Сkeniranje АПК-а за додатне блокове потписивања." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Скенирање APK са dexdump за познате неслободне класе." @@ -1693,6 +1706,10 @@ msgstr "Режим ажурирања ознака коришћен у git-svn, msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тест режим - стави излаз у tmp директоријум само, и увек компајлирај, чак и ако излаз већ постоји." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1765,9 +1782,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Да бисте користили awsbucket, awssecretkey и awsaccesskeyid морају бити подешени у config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Да бисте користили awsbucket, awssecretkey и awsaccesskeyid морају бити подешени у config.yml!" +msgstr "Да бисте користили rclone, rclone_config и awsbucket морају бити подешени у config.yml!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1790,11 +1806,6 @@ msgstr "Неочекивана ознака лиценце \"{}\"! Корист msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неочекивана ознака лиценце \"{}\"! Користите само ознаке лиценце конфигурисане у вашем конфигурационом фајлу" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Неочекивани симболички линк циљ: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1804,7 +1815,6 @@ msgstr "Непознати унос {key} у {configname}" msgid "Unknown exception found!" msgstr "Непозната изузетна ситуација пронађена!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1842,6 +1852,7 @@ msgstr "Непознато поље апликације '{fieldname}' у '{path msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Непозната застава изградње '{build_flag}' у '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1872,11 +1883,6 @@ msgstr "Некоришћена путања за брисање скенирањ msgid "Unused scanignore path: %s" msgstr "Некоришћена путања за игнорисање скенирања: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Распакујем у %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Ажурирање информација о репозиторијуму за нове пакете" @@ -1890,6 +1896,7 @@ msgstr "Ажурирање дневника транспарентности б msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData има неважећи URL: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1909,11 +1916,7 @@ msgstr "UpdateCheckData није важећи URL: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode је подешен, али изгледа да checkupdates још није покренут." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode је подешен, али изгледа да checkupdates још није покренут" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName је постављен на познати ID апликације, може се уклонити" @@ -1928,27 +1931,10 @@ msgstr "Отпремање {apkfilename} на androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Отпремање {apkfilename} на virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Употреба" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Употреба: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Користите /HEAD уместо /master или /main да покажете на фајл у подразумеваној грани" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Користи /HEAD уместо /master за указивање на датотеку у подразумеваној грани" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Користи `fdroid update -c` да је креираш." @@ -1967,9 +1953,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Користим \"{path}\" за конфигурисање s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Користим \"{path}\" за конфигурисање s3cmd." +msgstr "Користим \"{path}\" за синхронизацију са удаљеним складиштем." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1987,11 +1973,6 @@ msgstr "Коришћење JAR потписа" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Користим Java's jarsigner, не препоручује се за верификацију APK-ова! Користи apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Користим androguard из \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2003,9 +1984,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Користим постојећи keystore \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Користим s3cmd за синхронизацију са: {url}" +msgstr "Користим rclone за синхронизацију са: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2028,15 +2009,28 @@ msgstr "Верификуј интегритет преузетих пакета" msgid "Verifying index signature:" msgstr "Верификација потписа индекса:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Провера пакета {path} са apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API кључ не може отпремити датотеке веће од 32MB, користи {url} за отпремање {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Упозорење о могућим грешкама у метаподацима" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "ВебАсембли бинарни фајл" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Када је конфигурисано за потписане индексе, креирај само непотписане индексе у овој фази" @@ -2049,6 +2043,14 @@ msgstr "Када се врши провера целог репозиториј msgid "When signing or verifying fails, exit with an error code." msgstr "Када потписивање или верификација не успеју, излазите са кодом грешке." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Да ли желите да преузмете и инсталирате F-Droid.apk преко adb? (ДА/не)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Да ли желите да преузмете апликацију(е) са f-droid.org? (ДА/не)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' коришћен приликом генерисања кључева" @@ -2061,6 +2063,11 @@ msgstr "Можеш користити ANDROID_HOME да подесиш пута msgid "ZIP file archive" msgstr "ZIP архивска датотека" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb пријављује {serial} је \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2071,19 +2078,15 @@ msgstr "додавање IdentityFile у {path}" msgid "adding to {name}: {path}" msgstr "додавање у {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "нејасна опција: %(option)s може одговарати %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "двосмислена опција: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2093,11 +2096,13 @@ msgstr "apksigner није пронађен! Не могу да потпишем msgid "apksigner not found, it's required for signing!" msgstr "apksigner није пронађен, потребан је за потписивање!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "ID апликације датотеке за рад" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2108,8 +2113,6 @@ msgstr "ID апликације са опционим versionCode у облик msgid "archive_url needs to end with /archive" msgstr "archive_url мора да се завршава са /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2128,7 +2131,7 @@ msgstr "покушавам SSH везу без кључа да тестирам msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не могу да парсирам scrlib спецификацију (није стринг): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не могу да отворим '%(filename)s': %(error)s" @@ -2142,14 +2145,10 @@ msgstr "не могу да отворим non-https url: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "не могу да пронађем потребне srclibs: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "не могу имати више аргумената подпарсера" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2168,14 +2167,6 @@ msgstr "клонирам {url}" msgid "commands from plugin modules:" msgstr "команде из plugin модула:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "комплекс" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2207,10 +2198,6 @@ msgstr "није могуће парсирати srclib спецификациј msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не могу да парсирам srclib спецификацију (није наведена референца): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "не могу да парсирам srclib спецификацију (превише '@' знакова): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2228,15 +2215,13 @@ msgstr "бришем: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "фајл зависности без закључавања" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "постављен лог процеса {path} на {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2254,8 +2239,6 @@ msgstr "преузимање потписа скенера са '{}' није у msgid "executable binary, possibly code" msgstr "извршни бинарни фајл, могуће код" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2264,20 +2247,14 @@ msgstr[0] "очекиван %s аргумент" msgstr[1] "очекивана %s аргумента" msgstr[2] "очекивано %s аргумената" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "очекиван бар један аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "очекиван највише један аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "очекиван један аргумент" @@ -2290,10 +2267,6 @@ msgstr "fdroid [<команда>] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "преузмите најновију верзију потписа са веба" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "број са покретним зарезом" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "форсирај грешке метаподатака (подразумевано) да буду упозорења, или да буду игнорисане." @@ -2306,8 +2279,6 @@ msgstr "git svn clone није успео" msgid "gzip file archive" msgstr "gzip архива датотека" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2321,35 +2292,21 @@ msgstr "index-v1 мора имати потпис, користите `fdroid si msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 мора имати потпис, користите `fdroid signindex` да га направите!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "цео број" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "неважећа %(type)s вредност: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неважећи избор: %(value)r (изаберите из %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "неважећа conflict_resolution вредност: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2387,8 +2344,6 @@ msgstr "огледало '%s' се не завршава са 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "огледала су постављена два пута, у config.yml и {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "међусобно искључиви аргументи морају бити опционални" @@ -2407,30 +2362,15 @@ msgstr "нема \"иконе\" у {appid}" msgid "no APK supplied" msgstr "нема достављеног APK-а" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "нема такве опције: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "нема пронађених информација о верзији!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "није пронађена информација о верзијама" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "није дозвољено са аргументом %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2440,72 +2380,6 @@ msgstr "један од аргумената %s је обавезан" msgid "only accepts strings, lists, and tuples" msgstr "прихвата само стрингове, листе и тапл" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "опција %s: Ако заиста желите да инсталирате све потписане апликације, користите --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "опција %s: неважећа %s вредност: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "опција %s: неважећи избор: %r (изаберите из %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "опција -%s није препозната" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "опција -%s захтева аргумент" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "опција --%s не сме имати аргумент" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "опција --%s није јединствени префикс" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "опција --%s није препозната" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "опција --%s захтева аргумент" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "опциони аргументи" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "опције" @@ -2515,8 +2389,6 @@ msgstr "опције" msgid "overwriting existing {path}" msgstr "преписивање постојећег {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позициони аргументи" @@ -2549,19 +2421,15 @@ msgstr "repo_url мора да се завршава са /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync недостаје или је покварен: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml није инсталиран, не могу да пишем метаподатке." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронизује индексе {path} са {url} и брише" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd синхронизује индексе {path} са {url} и брише" +msgstr "s3cmd синхронизује индексе из {path} у {url} и брише уклоњене" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2576,17 +2444,7 @@ msgstr "serverwebroot: путања се не завршава са \"fdroid\", msgid "shared library" msgstr "дељена библиотека" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "прикажи верзију програма и изађи" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "прикажи ову поруку помоћи и изађи" @@ -2620,29 +2478,25 @@ msgstr "статичка библиотека" msgid "supplied reference binary has allowed signer {signer}" msgstr "достављени референтни бинарни фајл има дозвољеног потписника {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "следећи аргументи су обавезни: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "истина" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неочекивана опција стринг: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "непознат парсер %(parser_name)r (избори: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2653,9 +2507,7 @@ msgstr "непрепознати аргументи: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезбедне дозволе на '{config_file}' (требало би да буду 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "употреба: " @@ -2668,6 +2520,10 @@ msgstr "користећи Apache libcloud за синхронизацију с msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com ограничава брзину, чекање на поновни покушај..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "да" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2681,21 +2537,19 @@ msgstr[2] "{0} апликација, {1} кључних алијаса" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) нема метаподатке!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} има више {name} фајлова, изгледа као Master Key експлоат!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename}'s AndroidManifest.xml има лош датум: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} нема име! Користи се ID апликације уместо тога." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2716,7 +2570,6 @@ msgstr "{appid} има и APK-ове и фајлове: {files}" msgid "{appid} is missing {name}" msgstr "{appid} недостаје {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2757,10 +2610,10 @@ msgstr "{file} је празан или оштећен!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" не постоји! Проверите \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} је застарео, користите {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2782,6 +2635,11 @@ msgstr "{path} има лош потпис датотеке \"{pattern}\", мог msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} је означен од стране virustotal {count} пута:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} има погрешан отисак прста ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/sv/LC_MESSAGES/fdroidserver.po b/locale/sv/LC_MESSAGES/fdroidserver.po index b32bd3fa..a0928312 100644 --- a/locale/sv/LC_MESSAGES/fdroidserver.po +++ b/locale/sv/LC_MESSAGES/fdroidserver.po @@ -3,14 +3,15 @@ # Hans-Christoph Steiner , 2020. # Elias Mårtenson , 2021. # Joel A , 2021. -# Kristoffer Grundström , 2021, 2024. +# Kristoffer Grundström , 2021, 2024, 2025. # "P.O" , 2023. +# Marcus skoding , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-04-24 08:39+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-17 21:44+0000\n" "Last-Translator: Kristoffer Grundström \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -18,7 +19,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.5.1-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -34,12 +35,18 @@ msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" +"\n" +"{path} kodad för den hemliga variabeln DEBUG_KEYSTORE:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" har ingen matchande meta-datafil!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +57,6 @@ msgstr "\"local_copy_dir\" {path} finns inte!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' är redan installerad i {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" innehåller utdaterat {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,17 +82,6 @@ msgstr "\"{path}\" är signerad av en nyckel som inte är tillåten:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" är inte en giltig URL!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -99,21 +90,13 @@ msgstr "%(prog)s: fel: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "" +msgstr "%d APK:er kunde inte signeras eller verifieras!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" msgstr "%d problem hittades" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [alternativ]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -122,25 +105,18 @@ msgstr "%r kan inte kallas" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" -msgstr "" +msgstr "%s producerade inte en dict!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" -msgstr "" +msgstr "%s har felaktig SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" msgstr "%s är inte ett acceptabelt byggnationsfält" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' hittades inte i config.yml!" @@ -161,8 +137,6 @@ msgstr "'keystorepass' hittades inte i config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' hittades inte i config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -176,11 +150,6 @@ msgstr "'sdk_path' är inte inställt i config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "{aapt} är för gammal, fdroid kräver build-tools-{version} eller nyare!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -191,7 +160,7 @@ msgstr "Misslyckades med att köra '{path}'!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' är inte ett giltigt {field} i {appid}. Regex-mönster: {pattern}" @@ -201,13 +170,15 @@ msgstr "'{value}' är inte ett giltigt {field} i {appid}. Regex-mönster: {patte msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' är inte ett giltigt {field} i {appid}. Regex-mönster: {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() angavs inte" @@ -264,7 +235,7 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "Android AAR library" -msgstr "" +msgstr "AAR-bibliotek för Android" #: ../fdroidserver/scanner.py msgid "Android APK file" @@ -272,7 +243,7 @@ msgstr "Android APK-fil" #: ../fdroidserver/scanner.py msgid "Android DEX code" -msgstr "" +msgstr "DEX-kod för Android" #: ../fdroidserver/init.py #, python-brace-format @@ -298,10 +269,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -328,6 +295,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -337,7 +312,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -351,7 +325,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" -msgstr "" +msgstr "Trasig symlink: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" @@ -388,16 +362,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" -msgstr "" +msgstr "Kan inte skriva om \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -420,6 +401,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -431,6 +416,10 @@ msgstr "Kommandot '%s' känns inte igen.\n" #: ../fdroidserver/checkupdates.py msgid "Commit changes" +msgstr "Skicka in ändringar" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" msgstr "" #: ../fdroidserver/metadata.py @@ -442,20 +431,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -475,6 +461,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -485,7 +472,7 @@ msgstr "" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" -msgstr "" +msgstr "Kunde inte hitta paketets ID" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" @@ -501,6 +488,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Läser '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -552,7 +544,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" -msgstr "" +msgstr "Tar bort okänd fil: {path}" #: ../fdroidserver/lint.py #, python-format @@ -563,11 +555,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -616,13 +603,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -652,18 +638,12 @@ msgstr "" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "FEL: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -673,6 +653,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -690,6 +690,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -704,6 +713,10 @@ msgstr "" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" +msgstr "Extrahera signaturer från APK:er" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" msgstr "" #: ../fdroidserver/update.py @@ -775,13 +788,9 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" -msgstr "" +msgstr "Förbjudna HTML-taggar" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." @@ -810,7 +819,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -875,15 +883,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -928,6 +934,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -978,7 +989,7 @@ msgstr "Installera byggda paket på enheter" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." -msgstr "" +msgstr "Installerar %s..." #: ../fdroidserver/install.py #, python-brace-format @@ -991,7 +1002,7 @@ msgstr "Interagera med förrådets HTTP-servern" #: ../fdroidserver/update.py msgid "Invalid APK" -msgstr "" +msgstr "Ogiltig APK" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -1013,16 +1024,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1069,7 +1076,7 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "Java JAR file" -msgstr "" +msgstr "JAR-file för Java" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py @@ -1135,6 +1142,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1164,6 +1176,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1178,7 +1194,7 @@ msgstr "" #: ../fdroidserver/import_subcommand.py msgid "No information found." -msgstr "" +msgstr "Ingen information hittades." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" @@ -1203,7 +1219,7 @@ msgstr "" #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "" +msgstr "Inga paket angavs" #: ../fdroidserver/install.py #, python-format @@ -1224,7 +1240,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1232,7 +1247,7 @@ msgstr "" #: ../fdroidserver/checkupdates.py msgid "No tags found" -msgstr "" +msgstr "Inga taggar hittades" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" @@ -1248,7 +1263,7 @@ msgstr "" #: ../fdroidserver/signindex.py msgid "Nothing to do" -msgstr "" +msgstr "Inget att göra" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -1259,7 +1274,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1277,13 +1291,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1294,10 +1322,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Alternativ" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1355,6 +1379,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1377,7 +1406,7 @@ msgstr "" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" -msgstr "" +msgstr "Behandlar {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" @@ -1420,7 +1449,7 @@ msgstr "Läs alla metadatafiler och avsluta" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" -msgstr "" +msgstr "Läser '{config_file}'" #: ../fdroidserver/common.py #, python-brace-format @@ -1441,25 +1470,31 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" -msgstr "" +msgstr "Tar bort angivna filer" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" -msgstr "" +msgstr "Tar bort {path}''" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "Byt namn på APK-filer som inte matchar paket.namn_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1475,6 +1510,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Skriv om alla metadatafiler" @@ -1482,12 +1522,17 @@ msgstr "Skriv om alla metadatafiler" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "" +msgstr "Skriver om '{appid}'" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1535,6 +1580,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1605,7 +1654,7 @@ msgstr "" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" -msgstr "" +msgstr "Hoppar över {appid}: avstängd" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" @@ -1655,6 +1704,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1719,6 +1772,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1740,11 +1797,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1754,7 +1806,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "Okänt undantag hittades!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1792,6 +1843,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1822,11 +1874,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Uppdatera förrådinformation för nya paket" @@ -1840,6 +1887,7 @@ msgstr "Uppdatera binärens genomskinliga logg för en URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1859,11 +1907,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1878,27 +1922,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Användning" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Användning: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1916,6 +1943,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,17 +1958,12 @@ msgstr "" #: ../fdroidserver/common.py msgid "Using JAR Signature" -msgstr "" +msgstr "Använder JAR-signatur" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1947,6 +1974,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1968,15 +2000,28 @@ msgstr "Verifiera integriteten hos de nedladdade paketen" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Visa varningar vid möjliga metadatafel" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1989,6 +2034,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1999,6 +2052,11 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "ZIP file archive" +msgstr "ZIP-filarkiv" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" msgstr "" #: ../fdroidserver/nightly.py @@ -2011,19 +2069,15 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "tvetydigt alternativ: %(option)s kunde motsvara %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "tvetydig option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2033,11 +2087,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2048,8 +2104,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2068,7 +2122,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "kan inte öppna '%(filename)s': %(error)s" @@ -2082,14 +2136,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,20 +2152,12 @@ msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" -msgstr "" +msgstr "klonar {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "komplex" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2146,14 +2188,10 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" -msgstr "" +msgstr "skapade {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -2163,6 +2201,10 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" +msgstr "tar bort: repo/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" msgstr "" #: ../fdroidserver/common.py @@ -2170,8 +2212,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2179,7 +2219,7 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "downloading '{}'" -msgstr "" +msgstr "hämtar '{}'" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" @@ -2189,8 +2229,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2198,23 +2236,17 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" -msgstr "" +msgstr "ett argument förväntades" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" @@ -2224,10 +2256,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2238,10 +2266,8 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "gzip file archive" -msgstr "" +msgstr "gzip-filarkiv" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2255,35 +2281,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2321,8 +2333,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2339,32 +2349,17 @@ msgstr "" #: ../fdroidserver/signatures.py msgid "no APK supplied" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "inget sådant val: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" +msgstr "ingen APK tillhandahölls" #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2374,72 +2369,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "alternativet -%s kändes inte igen" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "alternativet -%s kräver argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "alternativet --%s måste inte ha ett argument" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "alternativet --%s inte ett unikt prefix" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "alternativet --%s kändes inte igen" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "alternativet --%s kräver argument" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "alternativa argument" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2448,10 +2377,8 @@ msgstr "Alternativ" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" -msgstr "" +msgstr "skriver över befintlig {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "positionella argument" @@ -2484,13 +2411,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2504,19 +2432,9 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "shared library" -msgstr "" +msgstr "delat bibliotek" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "visa programmets versionsnummer och avsluta" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "visa det här hjälpmeddelandet och avsluta" @@ -2543,36 +2461,32 @@ msgstr "" #: ../fdroidserver/scanner.py msgid "static library" -msgstr "" +msgstr "statiskt bibliotek" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "följande argument krävs: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "oväntad alternativ-sträng: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2583,9 +2497,7 @@ msgstr "argumenten känns inte igen: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "o-säkra behörigheter på '{config_file}' (borde vara 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "användning: " @@ -2598,6 +2510,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "ja" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2610,21 +2526,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}{appid} har ingen metadata!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2645,7 +2559,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "{appid}saknas {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2686,9 +2599,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2711,6 +2624,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" @@ -2718,7 +2636,6 @@ msgstr "" #: ../fdroidserver/common.py #, fuzzy, python-brace-format -#| msgid "'sdk_path' not set in config.yml!" msgid "{path} is not a standard config file!" msgstr "'sdk_path' är inte inställt i config.yml!" @@ -2750,7 +2667,7 @@ msgstr "" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" -msgstr "" +msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format diff --git a/locale/sw/LC_MESSAGES/fdroidserver.po b/locale/sw/LC_MESSAGES/fdroidserver.po index 8713c384..3ddf8eb8 100644 --- a/locale/sw/LC_MESSAGES/fdroidserver.po +++ b/locale/sw/LC_MESSAGES/fdroidserver.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.3a1\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2024-09-08 11:09+0000\n" "Last-Translator: abelbiwott-dev \n" "Language-Team: Swahili \n" @@ -40,6 +40,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" haina faili ya metadata inayolingana!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -50,11 +54,6 @@ msgstr "\"local_copy_dir\" {path} haipo!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "Tayari \"{apkfilename}\" imesakinishwa kwenye {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" ina {name} ({version}) iliyopitwa na wakati" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -80,17 +79,6 @@ msgstr "\"{path}\" imetiwa saini na ufunguo ambao hauruhusiwi:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" si URL halali!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "Chaguo %(option)s linahitaji hoja %(number)d" -msgstr[1] "Chaguo %(option)s linahitaji hoja %(number)d" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -106,14 +94,6 @@ msgstr "APK %d hazijatiwa saini au kuthibitishwa!" msgid "%d problems found" msgstr "%d matatizo yamepatikana" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [chaguo]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -134,13 +114,6 @@ msgstr "%s ina SHA-256 mbaya: %s" msgid "%s is not an accepted build field" msgstr "%s sio sehemu ya kujenga inayokubalika" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "chaguo la %s halichukui thamani" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' haipatikani kwenye config.yml!" @@ -161,8 +134,6 @@ msgstr "'keystorepass' haipatikani kwenye config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' haipatikani kwenye config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "\"required\" ni hoja batili kwa vipengee vya nafasi" @@ -176,11 +147,6 @@ msgstr "'sdk_path' haijawekwa kwenye config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' ni ya zamani sana, fdroid inahitaji zana za kujenga-{version} au mpya!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' itakuwa katika mpangilio nasibu! Tumia mabano () au [] ikiwa agizo ni muhimu!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -191,7 +157,7 @@ msgstr "{path} imeshindwa kutekeleza!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' ina muundo batili, inapaswa kuwa kamusi!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' si {field} halali katika {appid}. Muundo wa regex: {pattern}" @@ -201,13 +167,15 @@ msgstr "'{value}' si {field} halali katika {appid}. Muundo wa regex: {pattern}" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' si {field} halali, inapaswa kuwa {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "...sasisho la ukaguzi limeshindwa la{appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() haijafafanuliwa" @@ -298,10 +266,6 @@ msgstr "Zana ya SDK ya Android {cmd} haijapatikana!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Apu ina Binari lakini haina AllowedAPKSigningKeys zinazolingana ili kubandika cheti." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Apu ina NoSourceSince au ArchivePolicy \"0 versions\" lakini AutoUpdateMode au UpdateCheckMode sio None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Apu ina NoSourceSince au ArchivePolicy \"matoleo 0\" au 0 lakini AutoUpdateMode au UpdateCheckMode sio Hakuna" @@ -328,6 +292,14 @@ msgstr "Kuhifadhi {apkfilename} yenye saini batili!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode na UpdateCheckMode: HTTP lazima iwe na mpangilio." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -337,7 +309,6 @@ msgstr "Aina mbaya ya ingizo \"{mirrortype}\" katika usanidi wa vioo: {mirror}" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "URL ya msingi ya kioo, inaweza kujumuisha ufunguo wa saini ya faharasa kwa kutumia mfuatano wa saili: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -388,16 +359,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Haiwezi kujenga kutokana na kosa la {} wakati wa uchanganuzi" msgstr[1] "Haiwezi kujenga kutokana na makosa ya {} wakati wa uchanganuzi" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Imeshindwa kusoma {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Haiwezi kuandika upya \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Makundi ‘%s’ sio halali" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Makundi hayajawekwa" @@ -420,6 +398,10 @@ msgstr "Kuangalia uhifadhi kwa {appid} - apks:{integer}, keepversions: {keep}, a msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Sasisho safi - usitumie cache, chakata tena APK zote" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Orodha ya makundi iliyotenganishwa kwa koma." @@ -433,6 +415,10 @@ msgstr "Amri '%s' haitambuliki.\n" msgid "Commit changes" msgstr "Fanya mabadiliko" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -442,20 +428,17 @@ msgstr "Ukinzani kati ya ufafanuzi wa \"{field}\" kati ya .yml na faili zilizoja msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Hoja zinazokinzana: '--verbose' na '--quiet' haiwezi kubainishwa kwa wakati mmoja." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Faili za usanidi zinazokinzana! Kwa kutumia {newfile}, ukipuuza {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Haikuweza kupata '{command}' kwenya mfumo wako" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Haikuweza kupata msimbo wa toleo wa hivi karibuni" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Haikuweza kupata jina la toleo la hivi karibuni" @@ -475,6 +458,7 @@ msgstr "Haikuweza kufungua APK {path} kwa uchambuzi: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Haikuweza kuchanganua ukubwa \"{size}\", aina isiyo sahihi \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Haikuweza kupata Kitambulisho cha apu" @@ -501,6 +485,11 @@ msgstr "Imeunda kontena mpya \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Kuunda \"{path}\" kwa ajili ya kusanidi s3cmd." +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Kusoma '{config_file}'" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Inaunda saraka ya kumbukumbu" @@ -563,11 +552,6 @@ msgstr "Maelezo %s ni muhtasari ya apu tu" msgid "Description has a duplicate line" msgstr "Maelezo ina mstari wa nakala" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Maelezo ina orodha (%s) lakini sio yenye vitone (*) wala nambari (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -616,15 +600,14 @@ msgstr "Usionyeshe upya ghala hio, muhimu wakati wa kujaribu jengo isiyo na muun msgid "Don't use rsync checksums" msgstr "Usitumie rsync checksums" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Pakua vioo kamili vya maghala madogo" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Inapakua %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Kupakua ghala hio tayari imefeli mara moja, haijaribu tena." @@ -658,14 +641,6 @@ msgstr "HITILAFU: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HITILAFU: Amri ndogo ya \"server\" imetolewa, tumia \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"HITILAFU: amri hii haipaswi kutumika kama kioo kwa f-droid.org!\n" -"Kioo kamili cha f-droid.org kinahitaji zaidi ya 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HITILAFU: aina ya CI isiyoungwa mkono, marekebisho yanakaribishwa!" @@ -680,6 +655,16 @@ msgstr "HITILAFU: mwenyeji wa git isiyoungwa mkono \"%s\", marekebisho yanakarib msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" @@ -704,6 +689,11 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Vigezo vya mazingira {var} kutoka {configname} haijawekwa!" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Vigezo vya mazingira {var} kutoka {configname} haijawekwa!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" msgstr "" @@ -724,6 +714,10 @@ msgstr "Pata metadata ya apu kutoka kwa ghala ya chanzo" msgid "Extract signatures from APKs" msgstr "Pata sahihi kutoka kwa APKs" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -793,10 +787,6 @@ msgstr "Faili ilipotea wakati wa kuichakata: {path}" msgid "Finished" msgstr "Imekamilika" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Njia za mchango ya Flattr ni za FlattrID: eneo" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Tagi za HTML zilizokatazwa" @@ -828,7 +818,6 @@ msgstr "Imepata faili ya fedha mbaya \"{path}\" ya \"{name}\":" msgid "Found invalid appids in arguments" msgstr "Imepata appids batili katika hoja" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Ilipata versionCodes batili katika baadhi ya apu" @@ -893,15 +882,13 @@ msgstr "Git clean imeshindwa" msgid "Git fetch failed" msgstr "Git fetch imeshindwa" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune imeshindwa" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head imeshindwa: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset imeshindwa" @@ -946,6 +933,11 @@ msgstr "Inapuuza ingizo la FUNDING.yml iliyo ndefu kuliko 2048: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Inapuuza kipengele kibaya katika manifest: %s" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} imewacha kutumika, tumia {newfile}" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Inapuuza kifurushi kisicho na metadata: " @@ -1031,16 +1023,12 @@ msgstr "VercodeOperation batili: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "VercodeOperation batili: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Kitambulisho batili cha apu {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Boolean batili '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Orodha ya vitone batili" @@ -1153,6 +1141,11 @@ msgstr "Laini ya serverwebroot yenye umbo bovu:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Upeo wa kina cha urejeshaji katika faili ya ZIP umefikiwa: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Akisi ghala mzima na uhifadhi, aina zote za faili." @@ -1182,6 +1175,10 @@ msgstr "Hakuna SDK ya Android Iliyopatikana!" msgid "No attached devices found" msgstr "Hakuna vifaa vilivyoambatanishwa vimepatikana" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Hakuna alama ya kidole kwenye URL." @@ -1242,7 +1239,6 @@ msgstr "Hakuna vyeti vya kusaini vimepatikana katika {path}" msgid "No such package: %s" msgstr "Hakuna kifurushi kama vile: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1277,7 +1273,6 @@ msgstr "Hakuna la kufanya kwa {appid}." msgid "Now set these in config.yml:" msgstr "Sasa seti hizi katika config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1295,26 +1290,28 @@ msgstr "Jina la kifurushi cha OBB hailingani na APK inayoungwa mkono:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Machini iliyo nje ya mtandao, inapuuza uundaji wa kioo cha git mpaka 'fdroid deploy'" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." msgstr "" #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "PNG na JPEG pekee zinakubalika katika mchoro, zimepata: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Chapisha tofauti pekee na Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1324,10 +1321,6 @@ msgstr "Chakata apu zilizo na masasisho ya kiotomatiki pekee" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Njia za Mchango wa OpenCollective inapatikana kwenye OpenCollective: uwanja" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Chaguo" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Toa ripoti ya JSON kwa faili iliyopewa jina la APK." @@ -1385,6 +1378,11 @@ msgstr "Ielekeze kwa keystore kwa ufunguo wa kusaini ghala" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Chapisha kigezo hicho cha siri kwa kidirisha cha amri kwa urahisi wa kunakili/kubandika" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1471,6 +1469,15 @@ msgstr "Kusoma {apkfilename} kutoka kwa hifadhi ya muda" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Onyesha upya na uweke kwenye hifadhi ya muda kanuni za skana na sahihi kutoka kwenye mtandao" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Kuondoa faili zilizobainishwa" @@ -1484,13 +1491,10 @@ msgstr "Kuondoa {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Badilisha jina la faili za APK ambazo hazilingani na package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Hali ya kisasa ya RepoTrunk ni ya maana tu katika ghala za git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Weka upya na uunde seva mpya ya kujenga, hata ikiwa ile iliopo inaonekana kuwa sawa." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1505,6 +1509,11 @@ msgstr "Badilisha ukubwa wa ikoni zote zinazopita saizi kubwa ya pixel kisha uon msgid "Restrict output to warnings and errors" msgstr "Zuia pato iwe onyo na hitilafu" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Andika upya faili zote za metadata" @@ -1570,6 +1579,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Skena imepata tatizo {}" msgstr[1] "Skena zimepata matatizo {}" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Kuchanganua APK kwa kutumia dexdump kwa madarasa yanayojulikana kuwa si huru." @@ -1690,6 +1703,10 @@ msgstr "Hali ya usasisho ya tagi imetumika katika git-svn, lakini ghala haikuset msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Hali ya majaribio - weka pato kwenye saraka ya tmp pekee, na uunde kila mara, hata kama pato tayari ipo." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1787,11 +1804,6 @@ msgstr "tagi ya leseni lisilotarajiwa \"{}\"! Tumia pekee tagi zilizoidhinishwa msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "tagi ya leseni isiyotarajiwa \"{}\"! Tumia pekee tagi za leseni zilizosanidiwa katika faili yako ya usanidi" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Lengo la symlink lisiyotarajiwa:{link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1801,7 +1813,6 @@ msgstr "ingilio lisilojulikana {key} katika {configname}" msgid "Unknown exception found!" msgstr "Kighairi kisichojulikana kimepatikana!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1839,6 +1850,7 @@ msgstr "Nafasi ya apu isiyotambulika '{fieldname}' katika '{path}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Bendera ya kujenga isiyotambulika '{build_flag}' katika '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1869,11 +1881,6 @@ msgstr "Njia ya scandelete isiyotumika: %s" msgid "Unused scanignore path: %s" msgstr "Njia ya scanignore isiyotumika: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Kufungua zipu kwa %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Sasisha maelezo ya repo kwa vifurushi vipya" @@ -1887,6 +1894,7 @@ msgstr "Sasisha logi ya uwazi ya binary kwa URL" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData ina URL batili: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1906,11 +1914,7 @@ msgstr "UpdateCheckData si URL iliyo halali: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode imewekwa lakini inaonekana kama checkupdates haijaendeshwa bado." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode imewekwa lakini inaonekana kama likecheckupdates haijaendeshwa bado" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName imewekwa katika kitambulisho cha apu kinachojulikana, inaweza kutolewa" @@ -1925,27 +1929,10 @@ msgstr "Kupakia {apkfilename} kwa androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Kupakia {apkfilename} kwa virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Matumizi" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Matumizi: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Tumia /HEAD badala ya /master au /main kuashiria faili kwenye tawi la msingi" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Tumia /HEAD badala ya /master kuashiria kwa fiaili katika tawi la msingi" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Tumia `fdroid update -C` kuiunda." @@ -1984,11 +1971,6 @@ msgstr "Kutumia saini ya JAR" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Kutumia jarsigner ya Java, haipendekezwi kwa kuthibitisha APK! Tumia apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Kutumia androguard kutoka \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2025,15 +2007,28 @@ msgstr "Thibitisha uadilifu wa furushi zilizopakuliwa" msgid "Verifying index signature:" msgstr "Kuthibitisha saini ya faharasa:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ufunguo wa API ya VirusTotal haiwezi kupakia faili zaidi ya 32MB, tumia {url} kupakia {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Onya kuhusu hitilafu ya metadata yanayoweza kutokea" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Ikiwa imesanidiwa kwa faharasa zilizosainiwa, unda pekee faharasa zisizosainiwa katika hatua hii" @@ -2046,6 +2041,14 @@ msgstr "Wakati unapochambua msimbo wa ghala mzima yamllint inalemazwa kwa chaguo msgid "When signing or verifying fails, exit with an error code." msgstr "Wakati kusaini au kuthibitisha umefeli, toka na msimbo wa hitilafu." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distinguished Name' inayotumika wakati wa kuzalisha funguo" @@ -2058,6 +2061,11 @@ msgstr "Unaweza kutumia ANDROID_HOME kuseti njia ya SDK yako, kwa mfano:" msgid "ZIP file archive" msgstr "kumbukumbu ya faili ya ZIP" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2068,19 +2076,15 @@ msgstr "Inaongeza IdentityFile kwa {path}" msgid "adding to {name}: {path}" msgstr "Inaongeza kwa {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "chaguo lisiloeleweka: %(option)s linaweza kulingana na %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "chaguo lisiloeleweka: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2090,11 +2094,13 @@ msgstr "apksigner haijapatikana! Haiwezi kusaini au kutibitisha APK ya kisasa" msgid "apksigner not found, it's required for signing!" msgstr "apksigner haikupatikana, inahitajika kwa ajili ya kusaini!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "Kitambulisho cha apu cha faili kufanyia kazi" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2105,8 +2111,6 @@ msgstr "Kitambulisho cha apu yenye versionCode iliyo ya hiari katika fomu APPID[ msgid "archive_url needs to end with /archive" msgstr "archive_url inahitaji kumalizia na /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2125,7 +2129,7 @@ msgstr "inajaribu uhusiano wa SSH ulio tupu ili kujaribu ufunguo wa kupeleka:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "Haiwezi kuchanganua speci ya scrlib (sio kamba): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "Haiwezi kufungua '%(filename)s':%(error)s" @@ -2139,14 +2143,10 @@ msgstr "Haiwezi kufungua URL isiyo ya https: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "Haiwezi kupata srclibs inayohitajika: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "Haiwezi kuwa na hoja za subparser nyingi" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2165,14 +2165,6 @@ msgstr "kukaririsha {url}" msgid "commands from plugin modules:" msgstr "amri kutoka kwa kiunzi huru cha programu-jalizi:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "changamani" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2203,10 +2195,6 @@ msgstr "haikuweza kuchanganua specifisheni ya srclib (hakuna jina limebainishwa) msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "haikuweza kuchanganua specifisheni ya srclib (hakuna rejeleo limebainishwa): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "haikuweza kuchanganua specifisheni ya srclib (saini nyingi mno za '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2231,8 +2219,6 @@ msgstr "" msgid "deployed process log {path} to {dest}" msgstr "logi ya mchakato uliosambazwa {path} hadi {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2250,8 +2236,6 @@ msgstr "Inapakua sahihi za skena kutoka '{}' imefeli" msgid "executable binary, possibly code" msgstr "binari inayoweza kutekelezwa, ikiwezekana msimbo" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2259,20 +2243,14 @@ msgid_plural "expected %s arguments" msgstr[0] "hoja %s iliyotarajiwa" msgstr[1] "hoja %s zilizotarajiwa" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "ilitarajia angalau hoja moja" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "Imetarajiwa isiwe zaidi ya hoja moja" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "Ilitarajia hoja moja" @@ -2285,10 +2263,6 @@ msgstr "fdroid [] [-h|--msaada|--toleo|]" msgid "fetch the latest version of signatures from the web" msgstr "Pakua toleo jipya zaidi za saini kutoka kwenye mtandao" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "hatua ya kuelea" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "lazimisha hitilafu za metadata (chaguo msingi) ziwe maonyo, au ziwe za kupuuzwa." @@ -2301,8 +2275,6 @@ msgstr "svn clone ya git ilifeli" msgid "gzip file archive" msgstr "kumbukumbu ya faili ya gzip" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2316,35 +2288,21 @@ msgstr "index-v1 lazima iwe na saini, tumia `fdroid signindex` kuiunda!" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 lazima iwe na saini, tumia `fdroid signindex` kuiunda!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "nambari kamili" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "Thamani batili ya %(type)s: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "chaguo iliyo batili: %(value)r (chagua kutoka %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "thamani ya conflict_resolution iliyo batili: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2382,8 +2340,6 @@ msgstr "kioo %s haikwishia na 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "vioo vimesetiwa mara mbili, katika config.yml na {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "Hoja zinazokinzana lazima ziwe za hiari" @@ -2402,30 +2358,15 @@ msgstr "hakuna \"icon\" katika {appid}" msgid "no APK supplied" msgstr "hakuna APK iliyowasilishwa" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "hakuna chaguo kama hilo: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "hakuna maelezo ya toleo imepatikana!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "hakuna maelezo ya toleo zimepatikana" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "haikubaliki na hoja %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2435,72 +2376,6 @@ msgstr "moja ya hoja %s inahitajika" msgid "only accepts strings, lists, and tuples" msgstr "inakubali pekee kamba, orodha, na jozi" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "chaguo %s: Ikiwa kweli unataka kusakinisha apu zote zilizosainiwa, tumia --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "chaguo %s: thamani %s iliyo batili: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "chaguo %s: chaguo batili: %r(choose from %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "chaguo -%s halitambuliki" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "chaguo -%s linahitaji hoja" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "chaguo --%s ni lazima isiwe na hoja" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "chaguo --%s sio kiambishi awali cha kipekee" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "chaguo --%s halitambuliki" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "chaguo --%s linahitaji hoja" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "hoja za hiari" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "uchaguzi" @@ -2510,8 +2385,6 @@ msgstr "uchaguzi" msgid "overwriting existing {path}" msgstr "inaandika upya {path} iliyopo" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "hoja ya msimamo" @@ -2544,10 +2417,6 @@ msgstr "repo_url ina haja ya kuisha na /ghala" msgid "rsync is missing or broken: {error}" msgstr "rsync inakosa au imevunjika: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml haijasimikwa, haiwezi kuandika metadata." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" @@ -2571,17 +2440,7 @@ msgstr "serverwebroot: njia haikamiliki na \"fdroid\", labda ulimaanisha moja ka msgid "shared library" msgstr "maktaba inayoshirikishwa" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "onyesha nambari ya toleo la programu kisha uondoke" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "onyesha ujumbe huu wa usaidizi na uondoke" @@ -2615,29 +2474,25 @@ msgstr "maktaba tuli" msgid "supplied reference binary has allowed signer {signer}" msgstr "binari ya rejeleo lililowasilishwa imeruhusu signer {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "hoja zifuatazo zinahitajika: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "Chaguo lisilotarajiwa: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "kichanganuzi isiyojulikana %(parser_name)r (chaguo: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2648,9 +2503,7 @@ msgstr "hoja zisizotambulika: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "ruhusa zisizo salama kwenye '{config_file}' (inapaswa kuwa 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "matumizi: " @@ -2663,6 +2516,10 @@ msgstr "kutumia Apache libcloud kulandanisha na {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com inapunguza kiwango, inangojea kujaribu tena..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2675,21 +2532,19 @@ msgstr[1] "apu {0}, lakabu muhimu{1}" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) haina metadata!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} ina faili nyingi za {name}, inaonekana kama shambulio la Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml ya {apkfilename} ina tarehe mbaya: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} haina jina! Inatumia kitambulisho cha apu badala yake." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2710,7 +2565,6 @@ msgstr "{appid} ina vyote viwili APK pamoja na faili: {files}" msgid "{appid} is missing {name}" msgstr "{appid} inakosa {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2751,10 +2605,10 @@ msgstr "{file} ni tupu au fisadi!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" haipo! Angalia \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} imewacha kutumika, tumia {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2776,6 +2630,11 @@ msgstr "{path} ina saini mbaya ya faili \"{pattern}\", Uwezekano wa kunyonywa la msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} imealamishwa na virustotal mara {count}:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ta/LC_MESSAGES/fdroidserver.po b/locale/ta/LC_MESSAGES/fdroidserver.po index 6f2df53a..0661e420 100644 --- a/locale/ta/LC_MESSAGES/fdroidserver.po +++ b/locale/ta/LC_MESSAGES/fdroidserver.po @@ -2,26 +2,30 @@ # This file is put in the public domain. # K.B.Dharun Krishna , 2022. # Naveen , 2024. +# தமிழ்நேரம் , 2024. +# Hans-Christoph Steiner , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 2.1-273-g54e84d87\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" -"PO-Revision-Date: 2024-01-25 11:40+0000\n" -"Last-Translator: Naveen \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-01-20 14:04+0000\n" +"Last-Translator: Hans-Christoph Steiner \n" "Language-Team: Tamil \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.4-dev\n" +"X-Generator: Weblate 5.10-dev\n" #: ../fdroidserver/nightly.py msgid "" "\n" "SSH public key to be used as deploy key:" msgstr "" +"\n" +"பாஓடு பொது விசை வரிசைப்படுத்தல் விசையாகப் பயன்படுத்தப்பட வேண்டும்:" #: ../fdroidserver/nightly.py #, python-brace-format @@ -29,63 +33,53 @@ msgid "" "\n" "{path} encoded for the DEBUG_KEYSTORE secret variable:" msgstr "" +"\n" +"{path} பிழைத்திருத்த_கிச்டோர் ரகசிய மாறிக்குக் குறியாக்கம் செய்யப்பட்டுள்ளது:" #: ../fdroidserver/lint.py #, python-format msgid "\"%s/\" has no matching metadata file!" +msgstr "\"%s/\" க்கு பொருந்தக்கூடிய மேனிலை தரவு கோப்பு இல்லை!" + +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" msgstr "" #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" -msgstr "" +msgstr "\"local_copy_dir\" {path} இல்லை!" #: ../fdroidserver/install.py #, python-brace-format msgid "\"{apkfilename}\" is already installed on {dev}." -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" +msgstr "\"{apkfilename}\" ஏற்கனவே {dev} இல் நிறுவப்பட்டுள்ளது." #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" -msgstr "" +msgstr "\"{path}\" அண்மைக் கால {name} ({version})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "\"{path}\" exists but s3cmd is not installed!" -msgstr "" +msgstr "\"{path}\" உள்ளது, ஆனால் S3CMD நிறுவப்படவில்லை!" #: ../fdroidserver/lint.py #, python-brace-format msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)" -msgstr "" +msgstr "\"{path}\" என்பது ஒரு உதவி கோப்பு வடிவம் அல்ல (பயன்பாடு: மெட்டாடேட்டா/*.yml)" #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" is signed by a key that is not allowed:" -msgstr "" +msgstr "\"{path}\" அனுமதிக்கப்படாத ஒரு விசையால் கையொப்பமிடப்பட்டுள்ளது:" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "\"{url}\" is not a valid URL!" -msgstr "" +msgstr "\"{url}\" சரியான முகவரி அல்ல!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -94,330 +88,324 @@ msgstr "%(prog)s: பிழை: %(message)s\n" #: ../fdroidserver/publish.py #, python-format msgid "%d APKs failed to be signed or verified!" -msgstr "" +msgstr "%d apks கையொப்பமிடவோ சரிபார்க்கவோ தோல்வியுற்றது!" #: ../fdroidserver/scanner.py #, python-format msgid "%d problems found" -msgstr "" +msgstr "%d சிக்கல்கள் காணப்படுகின்றன" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [விருப்பங்கள்]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" -msgstr "" +msgstr "%r அழைக்க முடியாது" #: ../fdroidserver/signindex.py #, python-format msgid "%s did not produce a dict!" -msgstr "" +msgstr "%s ஒரு கட்டளையை உருவாக்கவில்லை!" #: ../fdroidserver/signindex.py #, python-format msgid "%s has bad SHA-256: %s" -msgstr "" +msgstr "%s மோசமான SHA-256: %s" #: ../fdroidserver/lint.py #, python-format msgid "%s is not an accepted build field" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" +msgstr "%s ஏற்றுக்கொள்ளப்பட்ட கட்டட புலம் அல்ல" #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" -msgstr "" +msgstr "config.yml இல் 'கீபாச்' காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'keystore' is NONE and 'smartcardoptions' is blank!" -msgstr "" +msgstr "'கீச்டோர்' எதுவுமில்லை, 'அறிவுள்ள கார்டோப்சன்ச்' காலியாக உள்ளது!" #: ../fdroidserver/common.py msgid "'keystore' not found in config.yml!" -msgstr "" +msgstr "'கீச்டோர்' config.yml இல் காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'keystorepass' not found in config.yml!" -msgstr "" +msgstr "'கீச்டோர்பாச்' config.yml இல் காணப்படவில்லை!" #: ../fdroidserver/common.py msgid "'repo_keyalias' not found in config.yml!" -msgstr "" +msgstr "config.yml இல் 'ரெப்போ_காலியாச்' காணப்படவில்லை!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" -msgstr "" +msgstr "'தேவை' என்பது நிலைப்பாடுகளுக்கு தவறான வாதமாகும்" #: ../fdroidserver/common.py msgid "'sdk_path' not set in config.yml!" -msgstr "" +msgstr "'sdk_path' config.yml இல் அமைக்கப்படவில்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" +msgstr "'{aapt}' மிகவும் பழையது, fdroid க்கு கட்டிய-கருவிகள்-{version} அல்லது புதியவை தேவை!" #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" -msgstr "" +msgstr "'{path}' செயல்படுத்தத் தவறிவிட்டது!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{path}' has invalid format, it should be a dictionary!" -msgstr "" +msgstr "'{path}' தவறான வடிவத்தைக் கொண்டுள்ளது, அது ஒரு அகராதியாக இருக்க வேண்டும்!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" -msgstr "" +msgstr "'{value}' என்பது {appid} இல் செல்லுபடியாகும் {field} அல்ல. ரீசெக்ச் முறை: {pattern}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field}, should be {pattern}" -msgstr "" +msgstr "'{value}' என்பது செல்லுபடியாகும் {field} அல்ல, {pattern} ஆக இருக்க வேண்டும்" + +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "-மெர்ச்-கோருதல் ஒரு பயன்பாட்டில் மட்டுமே இயங்குகிறது!" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" -msgstr "" +msgstr "... {appid}: {error} க்கு செக்அப்டேட் தோல்வியுற்றது" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" -msgstr "" +msgstr ".__ அழைப்பு __ () வரையறுக்கப்படவில்லை" #: ../fdroidserver/lint.py msgid "/issues is missing" -msgstr "" +msgstr "/சிக்கல்கள் இல்லை" #: ../fdroidserver/mirror.py msgid "A URL is required as an argument!" -msgstr "" +msgstr "ஒரு வாதமாக ஒரு முகவரி தேவை!" #: ../fdroidserver/common.py #, python-brace-format msgid "APK signatures have different certificates in {path}:" -msgstr "" +msgstr "APK கையொப்பங்கள் {path} இல் வெவ்வேறு சான்றிதழ்களைக் கொண்டுள்ளன:" #: ../fdroidserver/__main__.py msgid "Add PGP signatures using GnuPG for packages in repo" -msgstr "" +msgstr "ரெப்போவில் உள்ள தொகுப்புகளுக்கு GNUPG ஐப் பயன்படுத்தி PGP கையொப்பங்களைச் சேர்க்கவும்" #: ../fdroidserver/update.py msgid "Add a repo signing key to an unsigned repo" -msgstr "" +msgstr "கையொப்பமிடாத ரெப்போவுக்கு ரெப்போ கையொப்பமிடும் விசையைச் சேர்க்கவும்" #: ../fdroidserver/update.py msgid "Add skeleton metadata files for APKs that are missing them" -msgstr "" +msgstr "காணாமல் போன APK களுக்கு எலும்புக்கூடு மேனிலை தரவு கோப்புகளைச் சேர்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Adding new repo for only {name}" -msgstr "" +msgstr "புதிய ரெப்போவை {name} க்கு மட்டுமே சேர்ப்பது" #: ../fdroidserver/init.py msgid "Alias of the repo signing key in the keystore" -msgstr "" +msgstr "கீச்டோரில் ரெப்போ கையொப்பமிடும் விசையின் மாற்றுப்பெயர்" #: ../fdroidserver/build.py msgid "AllowedAPKSigningKeys missing but reference binary supplied" -msgstr "" +msgstr "Lentapcigningkeys காணவில்லை, ஆனால் குறிப்பு பைனரி வழங்கப்பட்டது" #: ../fdroidserver/import_subcommand.py msgid "Allows a different revision (or git branch) to be specified for the initial import" -msgstr "" +msgstr "ஆரம்ப இறக்குமதிக்கு வேறு திருத்தம் (அல்லது அறிவிலி கிளை) குறிப்பிட அனுமதிக்கிறது" #: ../fdroidserver/mirror.py msgid "Also mirror the full archive section" -msgstr "" +msgstr "முழு காப்பக பகுதியையும் பிரதிபலிக்கிறது" #: ../fdroidserver/lint.py msgid "Also warn about formatting issues, like rewritemeta -l" -msgstr "" +msgstr "மறுபயன்பாடு -எல் போன்ற சிக்கல்களை வடிவமைத்தல் பற்றியும் எச்சரிக்கவும்" #: ../fdroidserver/scanner.py msgid "Android AAR library" -msgstr "" +msgstr "ஆண்ட்ராய்டு AAR நூலகம்" #: ../fdroidserver/scanner.py msgid "Android APK file" -msgstr "" +msgstr "ஆண்ட்ராய்டு APK கோப்பு" #: ../fdroidserver/scanner.py msgid "Android DEX code" -msgstr "" +msgstr "ஆண்ட்ராய்டு DEX குறியீடு" #: ../fdroidserver/init.py #, python-brace-format msgid "Android SDK not found at {path}!" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK {path} இல் காணப்படவில்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' does not exist!" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK பாதை '{path}' இல்லை!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK path '{path}' is not a directory!" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK பாதை '{path}' ஒரு அடைவு அல்ல!" #: ../fdroidserver/common.py #, python-brace-format msgid "Android SDK tool {cmd} not found!" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK கருவிகள் {cmd} கிடைக்கவில்லை!" #: ../fdroidserver/lint.py msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "" - -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "பயன்பாட்டில் பைனரிகள் உள்ளன, ஆனால் சான்றிதழுடன் தொடர்புடைய AllowedAPKSigningKeys இல்லை." #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" +msgstr "பயன்பாட்டில் Nosourcencence அல்லது காப்பகப் போலிசி \"0 பதிப்புகள்\" அல்லது 0 உள்ளது, ஆனால் ஆட்டோப்டேட்மோட் அல்லது புதுப்பிப்பு தொழில்நுட்பம் எதுவும் இல்லை" #: ../fdroidserver/lint.py #, python-brace-format msgid "App is in '{repo}' but has a link to {url}" -msgstr "" +msgstr "பயன்பாடு '{repo}' இல் உள்ளது, ஆனால் {url} க்கான இணைப்பைக் கொண்டுள்ளது" #: ../fdroidserver/lint.py msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate." -msgstr "" +msgstr "பயன்பாட்டு பதிப்பில் பைனரி உள்ளது, ஆனால் பின் சான்றிதழுடன் தொடர்புடைய AllowedAPKSigningKeys இல்லை." #: ../fdroidserver/lint.py msgid "Appending .git is not necessary" -msgstr "" +msgstr "சேர்ப்பது .git தேவையில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Archiving {apkfilename} with invalid signature!" -msgstr "" +msgstr "தவறான கையொப்பத்துடன் காப்பக {apkfilename}!" #: ../fdroidserver/lint.py msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." -msgstr "" +msgstr "புதுப்பிப்பு தொழில்நுட்பம் கொண்ட ஆட்டோப்டேட்மோட்: HTTP ஒரு வடிவத்தைக் கொண்டிருக்க வேண்டும்." + +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "எல்லா தூண்டுதல்களுக்கும் தானியங்கி இல்லை." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "எல்லா தூண்டுதல்களுக்கும் தானியங்கி ஆம்." #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" -msgstr "" +msgstr "கண்ணாடியில் \"{mirrortype}\" மோசமான நுழைவு வகை: {mirror}" #: ../fdroidserver/mirror.py msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" -msgstr "" +msgstr "அடிப்படை முகவரி கண்ணாடிக்கு, வினவல் சரம் பயன்படுத்தி குறியீட்டு கையொப்பமிடும் விசையை சேர்க்கலாம்:? கைரேகை =" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" -msgstr "" +msgstr "கிளை '{branch}' '{versionName}'கட்டமைப்பில் உறுதிமொழியாக பயன்படுத்தப்படுகிறது" #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in srclib '{srclib}'" -msgstr "" +msgstr "கிளை '{branch}' '{srclib}'இல் உறுதிமொழியாக பயன்படுத்தப்படுகிறது" #: ../fdroidserver/update.py #, python-brace-format msgid "Broken symlink: {path}" -msgstr "" +msgstr "உடைந்த சிம்லிங்க்: {path}" #: ../fdroidserver/__main__.py msgid "Build a package from source" -msgstr "" +msgstr "மூலத்திலிருந்து ஒரு தொகுப்பை உருவாக்குங்கள்" #: ../fdroidserver/build.py msgid "Build all applications available" -msgstr "" +msgstr "கிடைக்கக்கூடிய அனைத்து பயன்பாடுகளையும் உருவாக்குங்கள்" #: ../fdroidserver/lint.py msgid "Build generated by `fdroid import` - remove disable line once ready" -msgstr "" +msgstr "`Fdroid இறக்குமதி` மூலம் உருவாக்கப்பட்ட உருவாக்கு - ஆயத்தம் செய்தவுடன் முடக்கு வரியை அகற்றவும்" #: ../fdroidserver/checkupdates.py msgid "Build metadata git repo has uncommited changes!" -msgstr "" +msgstr "மேனிலை தரவு அறிவிலி ரெப்போ உருவாக்கப்படாத மாற்றங்களைக் கொண்டுள்ளது!" #: ../fdroidserver/build.py msgid "Build only the latest version of each package" -msgstr "" +msgstr "ஒவ்வொரு தொகுப்பின் அண்மைக் கால பதிப்பை மட்டுமே உருவாக்குங்கள்" #: ../fdroidserver/init.py #, python-format msgid "Built repo based in \"%s\" with this config:" -msgstr "" +msgstr "இந்த உள்ளமைவுடன் \"%s\" அடிப்படையில் ரெப்போ கட்டப்பட்டது:" #: ../fdroidserver/checkupdates.py msgid "Can't auto-update app with no CurrentVersionCode" -msgstr "" +msgstr "CurrentVersionCode இல்லாமல் பயன்பாட்டை தானாக புதுப்பிக்க முடியாது" #: ../fdroidserver/build.py msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ச்கேன் செய்யும் போது {} பிழை காரணமாக உருவாக்க முடியாது" +msgstr[1] "ச்கேன் செய்யும் போது {} பிழைகள் காரணமாக உருவாக்க முடியாது" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "தோல்வியுற்ற வாசிப்பு {path}: {error}" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" -msgstr "" +msgstr "\"{path}\" ஐ மீண்டும் எழுத முடியாது" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" -msgstr "" +msgstr "வகைகள் '%s' செல்லுபடியாகாது" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" -msgstr "" +msgstr "வகைகள் அமைக்கப்படவில்லை" #: ../fdroidserver/index.py #, python-brace-format msgid "Category \"{category}\" defined but not used for any apps!" -msgstr "" +msgstr "வகை \"{category}\" வரையறுக்கப்பட்டுள்ளது, ஆனால் எந்த பயன்பாடுகளுக்கும் பயன்படுத்தப்படவில்லை!" #: ../fdroidserver/__main__.py msgid "Check for updates to applications" -msgstr "" +msgstr "பயன்பாடுகளுக்கான புதுப்பிப்புகளைச் சரிபார்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Checking archiving for {appid} - apks:{integer}, keepversions:{keep}, archapks:{arch}" -msgstr "" +msgstr "{appid} க்கான காப்பகத்தை சரிபார்க்கிறது- பயன்பாடுகள்: {integer}, காப்புபதிப்புகள்: {keep}, காப்பகங்கள்: {arch}" #: ../fdroidserver/update.py msgid "Clean update - don't uses caches, reprocess all APKs" -msgstr "" +msgstr "தூய்மையான புதுப்பிப்பு - தற்காலிக சேமிப்பைப் பயன்படுத்த வேண்டாம், அனைத்து APK ஐ மீண்டும் செயலாக்குங்கள்" + +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "பதிவு வெளியீட்டை வண்ணமயமாக்கவும்" #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." -msgstr "" +msgstr "கமா பிரிக்கப்பட்ட வகைகளின் பட்டியல்." #: ../fdroidserver/__main__.py #, python-format @@ -426,252 +414,267 @@ msgstr "'%s' கட்டளை அங்கீகரிக்கப்படவ #: ../fdroidserver/checkupdates.py msgid "Commit changes" -msgstr "" +msgstr "மாற்றங்களைச் செய்யுங்கள்" + +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "மாற்றங்களைச் செய்யுங்கள், தள்ளுங்கள், பின்னர் ஒன்றிணைக்கும் கோரிக்கையை உருவாக்குங்கள்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" -msgstr "" +msgstr ".Yml மற்றும் உள்ளூர்மயமாக்கப்பட்ட கோப்புகளுக்கு இடையில் முரண்பட்ட \"{field}\" வரையறைகள்:" #: ../fdroidserver/__main__.py msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" +msgstr "முரண்பட்ட வாதங்கள்: '--verbose' மற்றும் '--quiet' ஒரே நேரத்தில் குறிப்பிட முடியாது." #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" -msgstr "" +msgstr "உங்கள் கணினியில் '{command}' கண்டுபிடிக்க முடியவில்லை" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" -msgstr "" +msgstr "அண்மைக் கால பதிப்பு குறியீட்டைக் கண்டுபிடிக்க முடியவில்லை" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" -msgstr "" +msgstr "அண்மைக் கால பதிப்பு பெயரைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not find {path} to remove it" -msgstr "" +msgstr "அதை அகற்ற {path} கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "Could not open APK {path} for analysis: " -msgstr "" +msgstr "பகுப்பாய்விற்கு பயன்பாடு {path}ஐ திறக்க முடியவில்லை: " #: ../fdroidserver/common.py #, python-brace-format msgid "Could not parse size \"{size}\", wrong type \"{type}\"" -msgstr "" +msgstr "அளவை \"{size}\", தவறான வகை \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" -msgstr "" +msgstr "பயன்பாட்டு ஐடியைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/checkupdates.py msgid "Couldn't find any version information" -msgstr "" +msgstr "எந்த பதிப்பு தகவலையும் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/checkupdates.py msgid "Couldn't find package ID" -msgstr "" +msgstr "தொகுப்பு ஐடியைக் கண்டுபிடிக்க முடியவில்லை" #: ../fdroidserver/update.py msgid "Cowardily refusing to overwrite existing signing key setup!" -msgstr "" +msgstr "ஏற்கனவே கையொப்பமிடும் விசை அமைப்பை மேலெழுத மறுக்கிறது!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Created new container \"{name}\"" -msgstr "" +msgstr "புதிய கொள்கலனை உருவாக்கியது \"{name}\"" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating \"{path}\" for configuring s3cmd." -msgstr "" +msgstr "S3CMD ஐ கட்டமைக்க \"{path}\" ஐ உருவாக்குதல்." + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "'{config_file}'" #: ../fdroidserver/publish.py msgid "Creating log directory" -msgstr "" +msgstr "பதிவு கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Creating new S3 bucket: {url}" -msgstr "" +msgstr "புதிய எச் 3 வாளியை உருவாக்குதல்: {url}" #: ../fdroidserver/publish.py msgid "Creating output directory" -msgstr "" +msgstr "வெளியீட்டு கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/index.py msgid "Creating signed index with this key (SHA256):" -msgstr "" +msgstr "இந்த விசையுடன் கையொப்பமிடப்பட்ட குறியீட்டை உருவாக்குதல் (SHA256):" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "Creating temporary directory" -msgstr "" +msgstr "தற்காலிக கோப்பகத்தை உருவாக்குதல்" #: ../fdroidserver/index.py msgid "Creating unsigned index in preparation for signing" -msgstr "" +msgstr "கையொப்பமிடுவதற்கான தயாரிப்பில் கையொப்பமிடாத குறியீட்டை உருவாக்குதல்" #: ../fdroidserver/lint.py #, python-brace-format msgid "CurrentVersionCode {cv} is less than oldest build entry {versionCode}" -msgstr "" +msgstr "CurrentVersionCode {cv} மிகப் பழமையான உருவாக்க நுழைவு {versionCode} ஐ விட குறைவாக உள்ளது" #: ../fdroidserver/nightly.py msgid "DEBUG_KEYSTORE is not set or the value is incomplete" -msgstr "" +msgstr "Debug_keystore அமைக்கப்படவில்லை அல்லது மதிப்பு முழுமையடையாது" #: ../fdroidserver/update.py msgid "Delete APKs and/or OBBs without metadata from the repo" -msgstr "" +msgstr "ரெப்போவிலிருந்து மேனிலை தரவு இல்லாமல் APKS மற்றும்/அல்லது OBB களை நீக்கு" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting archive, repo is too big ({size} max {limit})" -msgstr "" +msgstr "காப்பகத்தை நீக்குதல், ரெப்போ மிகப் பெரியது ({size} அதிகபட்சம் {limit})" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Deleting git-mirror history, repo is too big ({size} max {limit})" -msgstr "" +msgstr "கிட்-மிரர் வரலாற்றை நீக்குதல், ரெப்போ மிகப் பெரியது ({size} அதிகபட்சம் {limit})" #: ../fdroidserver/update.py #, python-brace-format msgid "Deleting unknown file: {path}" -msgstr "" +msgstr "அறியப்படாத கோப்பை நீக்குதல்: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Description '%s' is just the app's summary" -msgstr "" +msgstr "விளக்கம் '%s' என்பது பயன்பாட்டின் சுருக்கம்" #: ../fdroidserver/lint.py msgid "Description has a duplicate line" -msgstr "" - -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" +msgstr "விளக்கம் ஒரு நகல் கோடு உள்ளது" #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" -msgstr "" +msgstr "நீளம் {length} இன் விளக்கம் {limit} கரி வரம்புக்கு மேல் உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "Did you mean config/{name}.yml?" -msgstr "" +msgstr "நீங்கள் கட்டமைப்பு/{name}.yml?" #: ../fdroidserver/lint.py #, python-brace-format msgid "Did you mean {code}?" -msgstr "" +msgstr "நீங்கள் {code} என்று சொன்னீர்களா?" #: ../fdroidserver/import_subcommand.py msgid "Do not add 'disable:' to the generated build entries" -msgstr "" +msgstr "உருவாக்கப்பட்ட உருவாக்க உள்ளீடுகளுக்கு 'முடக்கு:' ஐ முடக்க வேண்டாம்" #: ../fdroidserver/nightly.py msgid "Do not deploy the new files to the repo" -msgstr "" +msgstr "புதிய கோப்புகளை ரெப்போவுக்கு பயன்படுத்த வேண்டாம்" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Do not include \"{path}\" in URL!" -msgstr "" +msgstr "முகவரி இல் \"{path}\" சேர்க்க வேண்டாம்!" #: ../fdroidserver/init.py msgid "Do not prompt for Android SDK path, just fail" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK பாதைக்கு கேட்க வேண்டாம், தோல்வியடைகிறது" #: ../fdroidserver/nightly.py msgid "Do not remove the private keys generated from the keystore" -msgstr "" +msgstr "கீச்டோரிலிருந்து உருவாக்கப்பட்ட தனிப்பட்ட விசைகளை அகற்ற வேண்டாம்" #: ../fdroidserver/build.py msgid "Don't create a source tarball, useful when testing a build" -msgstr "" +msgstr "ஒரு மூலத்தை உருவாக்க வேண்டாம், ஒரு கட்டமைப்பைச் சோதிக்கும்போது பயனுள்ளதாக இருக்கும்" #: ../fdroidserver/build.py msgid "Don't refresh the repository, useful when testing a build with no internet connection" -msgstr "" +msgstr "இணைய இணைப்பு இல்லாத கட்டமைப்பைச் சோதிக்கும்போது பயனுள்ளதாக இருக்கும் களஞ்சியத்தை புதுப்பிக்க வேண்டாம்" #: ../fdroidserver/deploy.py ../fdroidserver/nightly.py msgid "Don't use rsync checksums" -msgstr "" +msgstr "RSYNC CHECKSUMS ஐப் பயன்படுத்த வேண்டாம்" + +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "நெட்வொர்க்கில் குறைவாக கசியும் கண்ணாடியைப் பயன்படுத்தி f-droid.apk ஐப் பதிவிறக்கவும்" #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" -msgstr "" - -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "" +msgstr "சிறிய களஞ்சியங்களின் முழுமையான கண்ணாடியைப் பதிவிறக்கவும்" #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." -msgstr "" +msgstr "களஞ்சியத்தை பதிவிறக்குவது ஏற்கனவே ஒரு முறை தோல்வியடைந்தது, மீண்டும் முயற்சிக்கவில்லை." #: ../fdroidserver/verify.py #, python-brace-format msgid "Downloading {url} failed. {error}" -msgstr "" +msgstr "பதிவிறக்கம் {url} தோல்வியுற்றது. {error}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Duplicate Anti-Feature declaration at {path} was ignored!" -msgstr "" +msgstr "{path} இல் நகல்-அம்ச எதிர்ப்பு அறிவிப்பு புறக்கணிக்கப்பட்டது!" #: ../fdroidserver/index.py #, python-format msgid "Duplicate entry \"%s\" in mirrors config!" -msgstr "" +msgstr "கண்ணாடிகள் கட்டமைப்பில் நகல் நுழைவு \"%s\"!" #: ../fdroidserver/lint.py #, python-brace-format msgid "Duplicate link in '{field}': {url}" -msgstr "" +msgstr "'{field}' இல் நகல் இணைப்பு: {url}" #: ../fdroidserver/common.py #, python-format msgid "ERROR: %(message)s" -msgstr "" +msgstr "பிழை: %(message)s" #: ../fdroidserver/__main__.py msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" -msgstr "" - -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" +msgstr "பிழை: \"சேவையகம்\" துணைக்குழு அகற்றப்பட்டது, \"வரிசைப்படுத்தல்\" ஐப் பயன்படுத்தவும்!" #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" -msgstr "" +msgstr "பிழை: ஆதரிக்கப்படாத தொஒ வகை, திட்டுகள் வரவேற்கப்படுகின்றன!" #: ../fdroidserver/nightly.py #, python-format msgid "ERROR: unsupported git host \"%s\", patches welcome!" +msgstr "பிழை: ஆதரிக்கப்படாத அறிவிலி புரவலன் \"%s\", திட்டுகள் வரவேற்கப்படுகின்றன!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "பிழை: {path} இல் {key} என்பது \"காப்பகம்\" அல்லது \"ரெப்போ\" அல்ல!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "பிழை: {key}: {path} இல் {subkey} அனுமதிக்கப்பட்ட விசைகளில் இல்லை: {allowed_keys}!" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." -msgstr "" +msgstr "குறியாக்கம் '{enc}' fdroid என அமைக்கப்பட்டுள்ளது. சிறந்த முடிவுகளுக்கு அதை 'UTF-8' என அமைக்கவும்." #: ../fdroidserver/init.py #, python-format @@ -679,1024 +682,1079 @@ msgid "" "Enter the path to the Android SDK (%s) here:\n" "> " msgstr "" +"ஆண்ட்ராய்டு SDK (%s) க்கு பாதையை இங்கே உள்ளிடவும்:\n" +" > " #: ../fdroidserver/common.py #, python-brace-format msgid "Environment variable {var} from {configname} is not set!" -msgstr "" +msgstr "{configname} இருந்து இலிருந்து சுற்றுச்சூழல் மாறி {var} அமைக்கப்படவில்லை!" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "{configname} இருந்து இலிருந்து சுற்றுச்சூழல் மாறி {var} அமைக்கப்படவில்லை!" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "'Github_Releases' ஐ வரிசைப்படுத்துவதில் பிழை, {} இல்லை. (நீங்கள் முதலில் `fdroid புதுப்பிப்பை இயக்க வேண்டியிருக்கலாம்.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" -msgstr "" +msgstr "ரெப்போ முகவரியைப் பெறும்போது பிழை" #: ../fdroidserver/scanner.py msgid "Exit with a non-zero code if problems were found" -msgstr "" +msgstr "சிக்கல்கள் கண்டுபிடிக்கப்பட்டால் பூச்சியமற்ற குறியீட்டைக் கொண்டு வெளியேறவும்" #: ../fdroidserver/__main__.py msgid "Extract application metadata from a source repository" -msgstr "" +msgstr "மூல களஞ்சியத்திலிருந்து பயன்பாட்டு மெட்டாடேட்டாவை பிரித்தெடுக்கவும்" #: ../fdroidserver/__main__.py msgid "Extract signatures from APKs" -msgstr "" +msgstr "APK இலிருந்து கையொப்பத்தை பிரித்தெடுக்கவும்" + +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "அறியப்பட்ட எந்த மூலத்திலிருந்தும் f-droid.apk ஐ பதிவிறக்கம் செய்ய முடியவில்லை!" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" -msgstr "" +msgstr "தோல்வியுற்ற நகலெடுப்பதில் {path}: {error}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Failed fetching signatures for '{apkfilename}': {error}" -msgstr "" +msgstr "'{apkfilename}' க்கான கையொப்பங்களைப் பெறுவதில் தோல்வி: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed reading {path}: {error}" -msgstr "" +msgstr "தோல்வியுற்ற வாசிப்பு {path}: {error}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed resizing {path}: {error}" -msgstr "" +msgstr "மறுஅளவு தோல்வியுற்றது {path}: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Failed to create S3 bucket: {url}" -msgstr "" +msgstr "S3 வாளியை உருவாக்குவதில் தோல்வி: {url}" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, deleting {path}" -msgstr "" +msgstr "APK தகவல்களைப் பெறுவதில் தோல்வி, {path} நீக்குதல்" #: ../fdroidserver/update.py #, python-brace-format msgid "Failed to get APK information, skipping {path}" -msgstr "" +msgstr "APK தகவல்களைப் பெறுவதில் தோல்வி, {path}யைத் தவிர்ப்பது" #: ../fdroidserver/update.py msgid "Failed to get APK signing key fingerprint" -msgstr "" +msgstr "முக்கிய கைரேகை கையொப்பமிடுவதில் தோல்வி" #: ../fdroidserver/install.py #, python-brace-format msgid "Failed to install '{apkfilename}' on {dev}: {error}" -msgstr "" +msgstr "{dev} இல் '{apkfilename}' ஐ நிறுவுவதில் தோல்வி: {error}" #: ../fdroidserver/common.py msgid "Failed to sign application" -msgstr "" +msgstr "விண்ணப்பத்தில் கையெழுத்திடுவதில் தோல்வி" #: ../fdroidserver/build.py #, python-brace-format msgid "Fetched buildserverid from VM: {buildserverid}" -msgstr "" +msgstr "VM இலிருந்து சேவையக ஐடியை உருவாக்குதல்: {buildserverid}" #: ../fdroidserver/signatures.py #, python-brace-format msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'" -msgstr "" +msgstr "'{apkfilename}' -> '{sigdir}' க்கான கையொப்பங்களைப் பெற்றது" #: ../fdroidserver/update.py #, python-brace-format msgid "File disappeared while processing it: {path}" -msgstr "" +msgstr "அதை செயலாக்கும்போது கோப்பு மறைந்தது: {path}" #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py #: ../fdroidserver/update.py msgid "Finished" -msgstr "" - -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" +msgstr "முடிந்தது" #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" -msgstr "" +msgstr "தடைசெய்யப்பட்ட உஉகுமொ குறிச்சொற்கள்" #: ../fdroidserver/build.py msgid "Force build of disabled apps, and carries on regardless of scan problems. Only allowed in test mode." -msgstr "" +msgstr "ஊனமுற்ற பயன்பாடுகளை கட்டாயப்படுத்துகிறது, மேலும் ச்கேன் சிக்கல்களைப் பொருட்படுத்தாமல். சோதனை பயன்முறையில் மட்டுமே அனுமதிக்கப்படுகிறது." #: ../fdroidserver/build.py #, python-brace-format msgid "Force halting build after {0} sec timeout!" -msgstr "" +msgstr "{0} நொடி காலக்கெடுவுக்குப் பிறகு கட்டமைப்பை கட்டாயப்படுத்துதல்!" #: ../fdroidserver/scanner.py msgid "Force scan of disabled apps and builds." -msgstr "" +msgstr "ஊனமுற்ற பயன்பாடுகள் மற்றும் கட்டமைப்புகளை ச்கேன் செய்யுங்கள்." #: ../fdroidserver/update.py #, python-brace-format msgid "Found \"{path}\" graphic without metadata for app \"{name}\"!" -msgstr "" +msgstr "பயன்பாட்டிற்கான மேனிலை தரவு இல்லாமல் \"{path}\" கிராஃபிக் கிடைத்தது \"{name}\"!" #: ../fdroidserver/update.py #, python-brace-format msgid "Found bad funding file \"{path}\" for \"{name}\":" -msgstr "" +msgstr "\"{name}\" க்கு \"{path}\" மோசமான பொருள் கோப்பு கிடைத்தது:" #: ../fdroidserver/common.py msgid "Found invalid appids in arguments" -msgstr "" +msgstr "வாதங்களில் தவறான பயன்பாடுகளைக் கண்டறிந்தது" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" -msgstr "" +msgstr "சில பயன்பாடுகளுக்கான தவறான பதிப்புக் குறியீடுகளைக் கண்டறிந்தது" #: ../fdroidserver/common.py #, python-brace-format msgid "Found multiple JAR Signature Block Files in {path}" -msgstr "" +msgstr "{path} இல் பல குடுவை கையொப்பம் தொகுதி கோப்புகள் கிடைத்தன" #: ../fdroidserver/common.py msgid "Found multiple Signer Certificates!" -msgstr "" +msgstr "பல கையொப்ப சான்றிதழ்கள் கிடைத்தன!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Found multiple metadata files for {appid}" -msgstr "" +msgstr "{appid} க்கான பல மேனிலை தரவு கோப்புகள் கிடைத்தன" #: ../fdroidserver/index.py msgid "Found multiple signing certificates for repository." -msgstr "" +msgstr "களஞ்சியத்திற்கான பல கையொப்பமிடும் சான்றிதழ்கள் கண்டறியப்பட்டன." #: ../fdroidserver/index.py msgid "Found no signing certificates for repository." -msgstr "" +msgstr "களஞ்சியத்திற்கான கையொப்பமிடும் சான்றிதழ்கள் எதுவும் கிடைக்கவில்லை." #: ../fdroidserver/lint.py #, python-format msgid "Found non-file at %s" -msgstr "" +msgstr "%s இல் கோப்பு அல்லாதது" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Found {apkfilename} at {url}" -msgstr "" +msgstr "{url} இல் {apkfilename} காணப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} problems in {filename}" -msgstr "" +msgstr "{filename} இல் {count} சிக்கல்கள் காணப்பட்டன" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Found {count} warnings in {filename}" -msgstr "" +msgstr "{filename} இல் {count} எச்சரிக்கைகள் கிடைத்தன" #: ../fdroidserver/update.py #, python-brace-format msgid "Generated skeleton metadata for {appid}" -msgstr "" +msgstr "{appid} க்காக உருவாக்கப்பட்ட எலும்புக்கூடு மேனிலை தரவு" #: ../fdroidserver/common.py #, python-format msgid "Git checkout of '%s' failed" -msgstr "" +msgstr "'%s' இன் அறிவிலி புதுப்பிப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git clean failed" -msgstr "" +msgstr "அறிவிலி தூய்மையான தோல்வியுற்றது" #: ../fdroidserver/common.py msgid "Git fetch failed" -msgstr "" - -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" +msgstr "Git fetch தோல்வியுற்றது" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" -msgstr "" +msgstr "அறிவிலி ரிமோட் செட்-எட் தோல்வியடைந்தது: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" -msgstr "" +msgstr "அறிவிலி மீட்டமைப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule deinit failed" -msgstr "" +msgstr "Git சப்மோடூல் டீனிட் தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule sync failed" -msgstr "" +msgstr "Git சப்மோடூல் ஒத்திசைவு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "Git submodule update failed" -msgstr "" +msgstr "Git சப்மோடூல் புதுப்பிப்பு தோல்வியடைந்தது" #: ../fdroidserver/common.py msgid "HTTPS must be used with Subversion URLs!" -msgstr "" +msgstr "HTTP கள் சப்வர்சன் முகவரி களுடன் பயன்படுத்தப்பட வேண்டும்!" #: ../fdroidserver/deploy.py msgid "If a git mirror gets to big, allow the archive to be deleted" -msgstr "" +msgstr "ஒரு அறிவிலி கண்ணாடி பெரியதாகிவிட்டால், காப்பகத்தை நீக்க அனுமதிக்கவும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "If this upload fails, try manually uploading to {url}" -msgstr "" +msgstr "இந்த பதிவேற்றம் தோல்வியுற்றால், {url} பெறுநர் க்கு கைமுறையாக பதிவேற்ற முயற்சிக்கவும்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated." -msgstr "" +msgstr "'{field}' இல் '{metapath}' மெட்டாடேட்டாவில் புறக்கணிக்கப்படுவதால் அது நீக்கப்பட்டது." #: ../fdroidserver/update.py #, python-format msgid "Ignoring FUNDING.yml entry longer than 2048: %s" -msgstr "" +msgstr "நிதியுதவியை புறக்கணித்தல். 2048 ஐ விட நீண்ட காலமாக நுழைவு: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" -msgstr "" +msgstr "வெளிப்படையான மோசமான உறுப்பை புறக்கணித்தல்: %s" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} நீக்கப்பட்டது, {newfile} ஐப் பயன்படுத்தவும்" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " -msgstr "" +msgstr "மேனிலை தரவு இல்லாமல் தொகுப்பைப் புறக்கணித்தல்: " #: ../fdroidserver/update.py #, python-brace-format msgid "Ignoring stale cache data for {apkfilename}" -msgstr "" +msgstr "{apkfilename}க்கான பழைய கேச் தரவைப் புறக்கணித்தல்" #: ../fdroidserver/update.py msgid "Include APKs that are signed with disabled algorithms like MD5" -msgstr "" +msgstr "MD5 போன்ற ஊனமுற்ற வழிமுறைகளுடன் கையொப்பமிடப்பட்ட APK கள் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the PGP signature .asc files in the mirror" -msgstr "" +msgstr "கண்ணாடியில் பிசிபி கையொப்பம் .ஆச்க் கோப்புகளைச் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the build logs in the mirror" -msgstr "" +msgstr "கண்ணாடியில் உருவாக்க பதிவுகளைச் சேர்க்கவும்" #: ../fdroidserver/mirror.py msgid "Include the source tarballs in the mirror" -msgstr "" +msgstr "கண்ணாடியில் மூல டார்பால்சைச் சேர்க்கவும்" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" -msgstr "" +msgstr "%s@ %s இலிருந்து மேனிலை தரவு உட்பட" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" -msgstr "" +msgstr "{path} இருந்து இலிருந்து மேனிலை தரவு உட்பட" #: ../fdroidserver/common.py msgid "Initialising submodules" -msgstr "" +msgstr "துணைமோடல்களைத் தொடங்குதல்" #: ../fdroidserver/install.py msgid "Install all signed applications available" -msgstr "" +msgstr "கிடைக்கக்கூடிய அனைத்து கையொப்பமிடப்பட்ட பயன்பாடுகளையும் நிறுவவும்" #: ../fdroidserver/__main__.py msgid "Install built packages on devices" -msgstr "" +msgstr "சாதனங்களில் கட்டப்பட்ட தொகுப்புகளை நிறுவவும்" #: ../fdroidserver/install.py #, python-format msgid "Installing %s..." -msgstr "" +msgstr "%s நிறுவுதல் ..." #: ../fdroidserver/install.py #, python-brace-format msgid "Installing '{apkfilename}' on {dev}..." -msgstr "" +msgstr "{dev} இல் '{apkfilename}' ஐ நிறுவுதல் ..." #: ../fdroidserver/__main__.py msgid "Interact with the repo HTTP server" -msgstr "" +msgstr "ரெப்போ HTTP சேவையகத்துடன் தொடர்பு கொள்ளுங்கள்" #: ../fdroidserver/update.py msgid "Invalid APK" -msgstr "" +msgstr "தவறான APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" -msgstr "" +msgstr "தவறான AutoupDateMode: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" -msgstr "" +msgstr "தவறான புதுப்பிப்பு சோதனை: {mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid VercodeOperation: {field}" -msgstr "" +msgstr "தவறான VERCODEOPERATION: {field}" #: ../fdroidserver/lint.py #, python-brace-format msgid "Invalid VercodeOperation: {invalid_ops}" -msgstr "" +msgstr "தவறான VERCODEOPERATION: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" -msgstr "" - -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" +msgstr "தவறான பயன்பாட்டு ஐடி {appid}" #: ../fdroidserver/lint.py msgid "Invalid bulleted list" -msgstr "" +msgstr "தவறான புல்லட் பட்டியல்" #: ../fdroidserver/common.py #, python-format msgid "Invalid name for published file: %s" -msgstr "" +msgstr "வெளியிடப்பட்ட கோப்பிற்கான தவறான பெயர்: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" -msgstr "" +msgstr "தவறான NDK: கட்டமைப்பில் நுழைவு: \"{ndk}\"" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid redirect to non-HTTPS: {before} -> {after} " -msgstr "" +msgstr "Https அல்லாதவர்களுக்கு தவறான திருப்பி விடுங்கள்: {before} -> {after} " #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid scrlib metadata: '{file}' does not exist" -msgstr "" +msgstr "தவறான ச்க்ர்லிப் மெட்டாடேட்டா: '{file}' இல்லை" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: could not parse '{file}'" -msgstr "" +msgstr "தவறான SRCLIB மெட்டாடேட்டா: '{file}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'" -msgstr "" +msgstr "தவறான SRCLIB மெட்டாடேட்டா: அறியப்படாத விசை '{key}' இல் '{file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature failed to verify: {path}" -msgstr "" +msgstr "சார் கையொப்பம் சரிபார்க்கத் தவறிவிட்டது: {path}" #: ../fdroidserver/common.py #, python-brace-format msgid "JAR signature verified: {path}" -msgstr "" +msgstr "சார் கையொப்பம் சரிபார்க்கப்பட்டது: {path}" #: ../fdroidserver/scanner.py msgid "Java JAR file" -msgstr "" +msgstr "சாவா குடுவை கோப்பு" #: ../fdroidserver/mirror.py ../fdroidserver/publish.py #: ../fdroidserver/update.py msgid "Java JDK not found! Install in standard location or set java_paths!" -msgstr "" +msgstr "சாவா சே.டி.கே கண்டுபிடிக்கப்படவில்லை! நிலையான இடத்தில் நிறுவவும் அல்லது சாவா_பாத்களை அமைக்கவும்!" #: ../fdroidserver/scanner.py msgid "Java compiled class" -msgstr "" +msgstr "சாவா தொகுக்கப்பட்ட வகுப்பு" #: ../fdroidserver/signindex.py msgid "Java jarsigner not found! Install in standard location or set java_paths!" -msgstr "" +msgstr "சாவா சார்சிக்னர் கண்டுபிடிக்கப்படவில்லை! நிலையான இடத்தில் நிறுவவும் அல்லது சாவா_பாத்களை அமைக்கவும்!" #: ../fdroidserver/lint.py msgid "Javascript in HTML src attributes" -msgstr "" +msgstr "உஉகுமொ SRC பண்புகளில் சாவாச்கிரிப்ட்" #: ../fdroidserver/build.py #, python-brace-format msgid "Keeping failed build \"{apkfilename}\"" -msgstr "" +msgstr "தோல்வியுற்ற கட்டமைப்பை வைத்திருத்தல் \"{apkfilename}\"" #: ../fdroidserver/init.py msgid "Keystore for signing key:\t" -msgstr "" +msgstr "விசையை கையொப்பமிடுவதற்கான கீச்டோர்:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " -msgstr "" +msgstr "அறியப்பட்ட பிழைத்திருத்த விசை Lentappasigningkeys இல் பயன்படுத்தப்படுகிறது: " #: ../fdroidserver/lint.py #, python-brace-format msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'" -msgstr "" +msgstr "கடைசியாக பயன்படுத்தப்பட்ட கமிட் '{commit}' ஒரு குறிச்சொல்லாகத் தெரிகிறது, ஆனால் புதுப்பிப்பு தொழில்நுட்பம் '{ucm}'" #: ../fdroidserver/lint.py msgid "Liberapay donation methods belong in the Liberapay: field" -msgstr "" +msgstr "லிபராபே நன்கொடை முறைகள் லைபர்பே: புலம்" #: ../fdroidserver/rewritemeta.py msgid "List files that would be reformatted (dry run)" -msgstr "" +msgstr "மறுவடிவமைக்கப்படும் கோப்புகளை பட்டியலிடுங்கள் (உலர் ரன்)" #: ../fdroidserver/lint.py msgid "Locale included in f-droid.org URL" -msgstr "" +msgstr "F-droid.org முகவரி இல் சேர்க்கப்பட்டுள்ளது" #: ../fdroidserver/build.py msgid "Make the build stop on exceptions" -msgstr "" +msgstr "விதிவிலக்குகளில் கட்டமைப்பை நிறுத்துங்கள்" #: ../fdroidserver/index.py msgid "Malformed repository mirrors." -msgstr "" +msgstr "தவறாக களஞ்சிய கண்ணாடிகள்." #: ../fdroidserver/deploy.py msgid "Malformed serverwebroot line:" -msgstr "" +msgstr "தவறாக சேவையகமானது:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" +msgstr "சிப் கோப்பில் அதிகபட்ச மறுசீரமைப்பு ஆழம் எட்டப்பட்டது: %s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." -msgstr "" +msgstr "முழு ரெப்போ மற்றும் காப்பகத்தை பிரதிபலிக்கவும், அனைத்து கோப்பு வகைகளிலும்." #: ../fdroidserver/gpgsign.py msgid "Missing output directory" -msgstr "" +msgstr "வெளியீட்டு அடைவு இல்லை" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" -msgstr "" +msgstr "நற்பொருத்தம் எதிர்ப்பு அறிவிப்புகளை உள்ளூர்மயமாக்கப்பட்ட கோப்புகளுக்கு நகர்த்துவது:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" -msgstr "" +msgstr "Config.yml இல் \"REPO_PUBKEY\" அல்லது \"கீச்டோர்பாச்\" எதுவும் அமைக்கப்படவில்லை" #: ../fdroidserver/verify.py #, python-format msgid "No APK for package: %s" -msgstr "" +msgstr "தொகுப்புக்கு APK இல்லை: %s" #: ../fdroidserver/common.py msgid "No Android SDK found!" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK எதுவும் கிடைக்கவில்லை!" #: ../fdroidserver/install.py msgid "No attached devices found" -msgstr "" +msgstr "இணைக்கப்பட்ட சாதனங்கள் எதுவும் கிடைக்கவில்லை" + +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "`ADB Install` க்காக எந்த சாதனங்களும் கிடைக்கவில்லை! ஒன்றை செருகவும்." #: ../fdroidserver/index.py msgid "No fingerprint in URL." -msgstr "" +msgstr "முகவரி இல் கைரேகை இல்லை." #: ../fdroidserver/common.py msgid "No git submodules available" -msgstr "" +msgstr "அறிவிலி சப்மோடூல்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/import_subcommand.py msgid "No gradle project could be found. Specify --subdir?" -msgstr "" +msgstr "கிரேடில் திட்டத்தைக் காண முடியவில்லை. -சப்பரைக் குறிப்பிடவா?" #: ../fdroidserver/import_subcommand.py msgid "No information found." -msgstr "" +msgstr "எந்த தகவலும் கிடைக்கவில்லை." #: ../fdroidserver/checkupdates.py msgid "No matching tags found" -msgstr "" +msgstr "பொருந்தக்கூடிய குறிச்சொற்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." -msgstr "" +msgstr "இயல்புநிலை (3) ஐப் பயன்படுத்தி குறைந்தபட்ச SDK பதிப்பு {0} at இல் காணப்படவில்லை." #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" -msgstr "" +msgstr "பயன்பாடு இலவச மென்பொருள் என்பதை குறிப்பிட தேவையில்லை" #: ../fdroidserver/lint.py msgid "No need to specify that the app is for Android" -msgstr "" +msgstr "பயன்பாடு ஆண்ட்ராய்டு க்கானது என்பதை குறிப்பிட தேவையில்லை" #: ../fdroidserver/deploy.py msgid "No option set! Edit your config.yml to set at least one of these:" -msgstr "" +msgstr "விருப்பத்தேர்வு தொகுப்பு இல்லை! இவற்றில் குறைந்தபட்சம் ஒன்றை அமைக்க உங்கள் config.yml ஐத் திருத்தவும்:" #: ../fdroidserver/common.py msgid "No packages specified" -msgstr "" +msgstr "தொகுப்புகள் எதுவும் குறிப்பிடப்படவில்லை" #: ../fdroidserver/install.py #, python-format msgid "No signed APK available for %s" -msgstr "" +msgstr "%s க்கு கையொப்பமிடப்பட்ட APK கிடைக்கவில்லை" #: ../fdroidserver/install.py msgid "No signed output directory - nothing to do" -msgstr "" +msgstr "கையொப்பமிடப்பட்ட வெளியீட்டு அடைவு இல்லை - எதுவும் செய்ய எதுவும் இல்லை" #: ../fdroidserver/common.py #, python-brace-format msgid "No signing certificates found in {path}" -msgstr "" +msgstr "{path} இல் கையொப்பமிடும் சான்றிதழ்கள் இல்லை" #: ../fdroidserver/common.py #, python-format msgid "No such package: %s" -msgstr "" +msgstr "அத்தகைய தொகுப்பு இல்லை: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" -msgstr "" +msgstr "பயன்பாட்டிற்கு அத்தகைய பதிப்பு குறியீடு பதிப்பு குறியீடு {versionCode}" #: ../fdroidserver/checkupdates.py msgid "No tags found" -msgstr "" +msgstr "குறிச்சொற்கள் எதுவும் கிடைக்கவில்லை" #: ../fdroidserver/publish.py ../fdroidserver/verify.py msgid "No unsigned directory - nothing to do" -msgstr "" +msgstr "கையொப்பமிடாத அடைவு இல்லை - எதுவும் செய்ய முடியாது" #: ../fdroidserver/__main__.py msgid "No version information could be found." -msgstr "" +msgstr "பதிப்பு தகவல்களைக் காண முடியவில்லை." #: ../fdroidserver/common.py msgid "Not a valid size definition: \"{}\"" -msgstr "" +msgstr "சரியான அளவு வரையறை அல்ல: \"{}\"" #: ../fdroidserver/signindex.py msgid "Nothing to do" -msgstr "" +msgstr "செய்ய எதுவும் இல்லை" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Nothing to do for {appid}." -msgstr "" +msgstr "{appid}க்கு எதுவும் செய்ய முடியாது." #: ../fdroidserver/init.py msgid "Now set these in config.yml:" -msgstr "" +msgstr "இப்போது இவற்றை config.yml இல் அமைக்கவும்:" + +#: ../fdroidserver/update.py +#, fuzzy, python-brace-format +msgid "OBB file has newer versionCode({integer}) than any APK:" +msgstr "OBB கோப்பில் எந்த APK ஐ விட புதிய பதிப்பு குறியீடு ({முழு எண்) உள்ளது:" + +#: ../fdroidserver/update.py +msgid "OBB filename must start with \"main.\" or \"patch.\":" +msgstr "OBB கோப்பு பெயர் \"முதன்மையான\" உடன் தொடங்க வேண்டும். அல்லது \"இணைப்பு.\":" + +#: ../fdroidserver/update.py +msgid "OBB's packagename does not match a supported APK:" +msgstr "OBB இன் பேக்கசெனேம் ஆதரிக்கப்பட்ட APK உடன் பொருந்தவில்லை:" + +#: ../fdroidserver/deploy.py +msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" +msgstr "இணைப்பில்லாத இயந்திரம், அறிவிலி மிரர் தலைமுறையை `fdroid வரிசைப்படுத்தல்` வரை தவிர்க்கவும்" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'பேக்கசெனேம்ச்' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'ProjectURL' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "'Github_releases' கட்டமைப்பு உருப்படிகளில் ஒன்று 'கிள்ளாக்கு' மதிப்பைக் காணவில்லை. ச்கிப்பிங் ..." #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode -#: ../fdroidserver/update.py -#, python-brace-format -msgid "OBB file has newer versionCode({integer}) than any APK:" -msgstr "" - -#: ../fdroidserver/update.py -msgid "OBB filename must start with \"main.\" or \"patch.\":" -msgstr "" - -#: ../fdroidserver/update.py -msgid "OBB's packagename does not match a supported APK:" -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" -msgstr "" +msgstr "கிராபிக்ச் மற்றும் காணப்படும் பி.என்.சி மற்றும் சே.பி.சி மட்டுமே ஆதரிக்கப்படுகின்றன: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" -msgstr "" +msgstr "தானியங்கு புதுப்பிப்புகளுடன் பயன்பாடுகளை மட்டுமே செயலாக்கவும்" #: ../fdroidserver/lint.py msgid "OpenCollective donation methods belong in the OpenCollective: field" -msgstr "" - -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "விருப்பங்கள்" +msgstr "OpenCollective நன்கொடை முறைகள் OpenCollective: புலம்" #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." -msgstr "" +msgstr "APK இன் பெயரிடப்பட்ட தாக்கல் சாதொபொகு அறிக்கை." #: ../fdroidserver/scanner.py msgid "Output JSON to stdout." -msgstr "" +msgstr "சாதொபொகு க்கு நிலைவெளிக்கு வெளியீடு." #: ../fdroidserver/checkupdates.py ../fdroidserver/gpgsign.py #: ../fdroidserver/publish.py ../fdroidserver/signindex.py #: ../fdroidserver/update.py msgid "Outputting JSON" -msgstr "" +msgstr "சாதொபொகு ஐ வெளியிடுகிறது" #: ../fdroidserver/import_subcommand.py msgid "Overall license of the project." -msgstr "" +msgstr "திட்டத்தின் ஒட்டுமொத்த உரிமம்." #: ../fdroidserver/index.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "Overriding blank versionName in {apkfilename} from metadata: {version}" -msgstr "" +msgstr "மெட்டாடேட்டாவிலிருந்து {apkfilename} இல் வெற்று பதிப்பு பெயர்:{version}" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "Package \"{appid}\" already exists" -msgstr "" +msgstr "தொகுப்பு \"{appid}\" ஏற்கனவே உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "Parsing manifest at '{path}'" -msgstr "" +msgstr "'{path}' இல் மேனிஃபெச்டை பாகுபடுத்துதல்" #: ../fdroidserver/common.py msgid "Password required with username" -msgstr "" +msgstr "பயனர்பெயருடன் கடவுச்சொல் தேவை" #: ../fdroidserver/import_subcommand.py msgid "Path to main Android project subdirectory, if not in root." -msgstr "" +msgstr "முதன்மையான ஆண்ட்ராய்டு திட்ட துணை அடைவுக்கான பாதை, வேரில் இல்லையென்றால்." #: ../fdroidserver/init.py msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)" -msgstr "" +msgstr "ஆண்ட்ராய்டு SDK க்கான பாதை (சில நேரங்களில் Android_home இல் அமைக்கப்படுகிறது)" #: ../fdroidserver/btlog.py msgid "Path to the git repo to use as the log" -msgstr "" +msgstr "பதிவாக பயன்படுத்த அறிவிலி ரெப்போவுக்கான பாதை" #: ../fdroidserver/init.py msgid "Path to the keystore for the repo signing key" -msgstr "" +msgstr "ரெப்போ கையொப்பமிடும் விசைக்கான கீச்டோருக்கு பாதை" #: ../fdroidserver/nightly.py msgid "Print the secret variable to the terminal for easy copy/paste" -msgstr "" +msgstr "எளிதான நகல்/பேச்டுக்காக ரகசிய மாறியை முனையத்திற்கு அச்சிடுக" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "உங்கள் இருப்பிடத்தின் அடிப்படையில் தனியுரிமை பயன்முறை இயக்கப்பட்டது ({country_code})." #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" -msgstr "" +msgstr "சிப் கோப்பில் சிக்கல்: %s, பிழை %s" #: ../fdroidserver/common.py #, python-brace-format msgid "Problem with xml at '{path}'" -msgstr "" +msgstr "'{path}' இல் எக்ச்எம்எல் சிக்கல்" #: ../fdroidserver/checkupdates.py msgid "Process auto-updates" -msgstr "" +msgstr "தானாக புதுப்பிப்புகளை செயலாக்கவும்" #: ../fdroidserver/publish.py ../fdroidserver/update.py #, python-brace-format msgid "Processing {apkfilename}" -msgstr "" +msgstr "செயலாக்கம் {apkfilename}" #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py #, python-brace-format msgid "Processing {appid}" -msgstr "" +msgstr "செயலாக்கம் {appid}" #: ../fdroidserver/update.py msgid "Produce human-readable XML/JSON for index files" -msgstr "" +msgstr "குறியீட்டு கோப்புகளுக்கு மனிதனால் படிக்கக்கூடிய XML/JSON ஐ உருவாக்குங்கள்" #: ../fdroidserver/import_subcommand.py msgid "Project URL to import from." -msgstr "" +msgstr "இறக்குமதி செய்ய திட்ட முகவரி." #: ../fdroidserver/lint.py msgid "Punctuation should be avoided" -msgstr "" +msgstr "நிறுத்தற்குறி தவிர்க்கப்பட வேண்டும்" #: ../fdroidserver/btlog.py msgid "Push the log to this git remote repository" -msgstr "" +msgstr "இந்த அறிவிலி ரிமோட் களஞ்சியத்திற்கு பதிவை அழுத்தவும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing binary transparency log to {url}" -msgstr "" +msgstr "பைனரி வெளிப்படைத்தன்மை பதிவை {url}க்கு தள்ளுகிறது" #: ../fdroidserver/deploy.py msgid "Pushing to remote server failed!" -msgstr "" +msgstr "தொலை சேவையகத்திற்கு தள்ளுவது தோல்வியடைந்தது!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Pushing to {url}" -msgstr "" +msgstr "{url}க்கு தள்ளுதல்" #: ../fdroidserver/__main__.py msgid "Quickly start a new repository" -msgstr "" +msgstr "விரைவாக ஒரு புதிய களஞ்சியத்தைத் தொடங்கவும்" #: ../fdroidserver/__main__.py msgid "Read all the metadata files and exit" -msgstr "" +msgstr "அனைத்து மேனிலை தரவு கோப்புகளையும் படித்து வெளியேறவும்" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading '{config_file}'" -msgstr "" +msgstr "'{config_file}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'" -msgstr "" +msgstr "பேக்கசெனேம்/பதிப்பு குறியீடு/பதிப்பு பெயர் தோல்வியுற்றது, APK தவறானது: '{apkfilename}'" #: ../fdroidserver/common.py #, python-brace-format msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'" -msgstr "" +msgstr "பேக்கசெனேம்/பதிப்பு குறியீடு/பதிப்பு பெயர் தோல்வியுற்றது, APK தவறானது: '{apkfilename}'" #: ../fdroidserver/update.py #, python-brace-format msgid "Reading {apkfilename} from cache" -msgstr "" +msgstr "தற்காலிக சேமிப்பிலிருந்து {apkfilename} படித்தல்" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "நெட்வொர்க்கிலிருந்து ச்கேனர் விதிகள் மற்றும் கையொப்பங்களை புதுப்பித்து கேச்" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." msgstr "" +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "வெற்றிகரமாக சரிபார்க்கப்பட்டால் மூல நாடாகாப்பகபந்து மற்றும் ஏதேனும் APK களை அகற்றவும்." + #: ../fdroidserver/common.py msgid "Removing specified files" -msgstr "" +msgstr "குறிப்பிட்ட கோப்புகளை நீக்குதல்" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" -msgstr "" +msgstr "{path} \"ஐ நீக்குதல்" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" -msgstr "" +msgstr "தொகுப்புடன் பொருந்தாத APK கோப்புகளை மறுபெயரிடுங்கள். NAME_123.APK" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" -msgstr "" +msgstr "வழங்கப்பட்ட பிழைத்திருத்தத்துடன் {apkfilename} இருந்து ராசினாமா" #: ../fdroidserver/update.py msgid "Resize all the icons exceeding the max pixel size and exit" -msgstr "" +msgstr "அதிகபட்ச படப்புள்ளி அளவைத் தாண்டி அனைத்து ஐகான்களையும் மறுஅளவிடுங்கள்" #: ../fdroidserver/common.py msgid "Restrict output to warnings and errors" -msgstr "" +msgstr "எச்சரிக்கைகள் மற்றும் பிழைகளுக்கு வெளியீட்டை கட்டுப்படுத்துங்கள்" + +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "திரும்பப்பெறுவது தோல்வியுற்ற பதிவிறக்க: %s" #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" -msgstr "" +msgstr "அனைத்து மேனிலை தரவு கோப்புகளையும் மீண்டும் எழுதவும்" #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Rewriting '{appid}'" -msgstr "" +msgstr "'{appid}' ஐ மீண்டும் எழுதுதல்" #: ../fdroidserver/checkupdates.py msgid "Run on git repo that has uncommitted changes" -msgstr "" +msgstr "மாற்றப்படாத மாற்றங்களைக் கொண்ட அறிவிலி ரெப்போவில் இயக்கவும்" + +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "-Debug.apk ஐக் கண்டுபிடிக்க {cibase}க்கு மேல் இயக்கவும். மற்றும் Repo_basedir {repo_basedir} ஐத் தவிர்" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" -msgstr "" +msgstr "வடிவமைப்பை சரிசெய்ய மீண்டும் எழுதுங்கள்" #: ../fdroidserver/deploy.py msgid "Running first pass with MD5 checking disabled" -msgstr "" +msgstr "MD5 உடன் முதல் மொழி இயக்குகிறது" #: ../fdroidserver/mirror.py #, python-brace-format msgid "Running wget in {path}" -msgstr "" +msgstr "{path} இல் wget ஐ இயக்குகிறது" #: ../fdroidserver/index.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "SHA-256 of {url} does not match entry!" -msgstr "" +msgstr "{url} of இன் SHA-256 நுழைவு பொருந்தவில்லை!" #: ../fdroidserver/build.py msgid "Scan the resulting APK(s) for known non-free classes." -msgstr "" +msgstr "அறியப்படாத இலவச வகுப்புகளுக்கு இதன் விளைவாக வரும் APK (களை) ச்கேன் செய்யுங்கள்." #: ../fdroidserver/__main__.py msgid "Scan the source code of a package" -msgstr "" +msgstr "ஒரு தொகுப்பின் மூலக் குறியீட்டை ச்கேன் செய்யுங்கள்" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {apk}" -msgstr "" +msgstr "ச்கேனர் {apk} இல் {count} சிக்கல்கள் காணப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:" -msgstr "" +msgstr "ச்கேனர் {count} சிக்கல்கள் {appid}:" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Scanner found {count} problems in {appid}:{versionCode}:" -msgstr "" +msgstr "ச்கேனர் {count} சிக்கல்கள் {appid}: {versionCode}:" #: ../fdroidserver/build.py msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ச்கேனர் கண்டறிந்தது {} சிக்கல்" +msgstr[1] "ச்கேனர் கண்டறிந்தது {} சிக்கல்கள்" + +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "கூடுதல் கையொப்பமிடும் தொகுதிகளுக்கு APK ஐ ச்கேன் செய்கிறது." #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." -msgstr "" +msgstr "அறியப்படாத இல்லாத வகுப்புகளுக்கு டெக்ச்டம்புடன் APK ஐ ச்கேன் செய்கிறது." #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" -msgstr "" +msgstr "NDK {release} ({version}) மேலே அமைக்கவும்" #: ../fdroidserver/common.py msgid "Set clock to that time using:" -msgstr "" +msgstr "அந்த நேரத்தில் கடிகாரத்தை அமைக்கவும்:" #: ../fdroidserver/nightly.py msgid "Set maximum releases in repo before older ones are archived" -msgstr "" +msgstr "பழையவை காப்பகப்படுத்தப்படுவதற்கு முன்பு ரெப்போவில் அதிகபட்ச வெளியீடுகளை அமைக்கவும்" #: ../fdroidserver/build.py #, python-brace-format msgid "Set open file limit to {integer}" -msgstr "" +msgstr "திறந்த கோப்பு வரம்பை {integer} என அமைக்கவும்" #: ../fdroidserver/__main__.py msgid "Set up an app build for a nightly build repo" -msgstr "" +msgstr "ஒரு இரவு உருவாக்க ரெப்போவுக்கு ஒரு பயன்பாட்டு உருவாக்கத்தை அமைக்கவும்" #: ../fdroidserver/build.py msgid "Setting open file limit failed: " -msgstr "" +msgstr "திறந்த கோப்பு வரம்பை அமைப்பது தோல்வியடைந்தது: " #: ../fdroidserver/build.py #, python-brace-format msgid "Setting {0} sec timeout for this build" -msgstr "" +msgstr "இந்த கட்டமைப்பிற்கான {0} நொடி நேரத்தை அமைத்தல்" #: ../fdroidserver/__main__.py msgid "Sign and place packages in the repo" -msgstr "" +msgstr "ரெப்போவில் கையொப்பமிட்டு தொகுப்புகளை வைக்கவும்" #: ../fdroidserver/__main__.py msgid "Sign indexes created using update --nosign" -msgstr "" +msgstr "புதுப்பிப்பு --nosign ஐப் பயன்படுத்தி உருவாக்கப்பட்ட குறியீடுகள்" #: ../fdroidserver/build.py msgid "Skip scanning the source code for binaries and other problems" -msgstr "" +msgstr "பைனரிகள் மற்றும் பிற சிக்கல்களுக்கான மூலக் குறியீட்டை ச்கேன் செய்வதைத் தவிர்க்கவும்" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping '{apkfilename}' with invalid signature!" -msgstr "" +msgstr "தவறான கையொப்பத்துடன் '{apkfilename}' ஐத் தவிர்ப்பது!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" -msgstr "" +msgstr "ரெப்போ மிகப் பெரியதாக இருப்பதால் அறிவிலிஆய்வு பக்கங்களைத் தவிர்ப்பது (>%.2fgb)!" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping index generation for {appid}" -msgstr "" +msgstr "{appid}க்கான குறியீட்டு தலைமுறையைத் தவிர்க்கிறது" #: ../fdroidserver/update.py #, python-brace-format msgid "Skipping {apkfilename} with invalid signature!" -msgstr "" +msgstr "தவறான கையொப்பத்துடன் {apkfilename} ஐத் தவிர்ப்பது!" #: ../fdroidserver/scanner.py #, python-brace-format msgid "Skipping {appid}: disabled" -msgstr "" +msgstr "{appid}: முடக்கப்பட்டது" #: ../fdroidserver/deploy.py msgid "Specify a local folder to sync the repo to" -msgstr "" +msgstr "ரெப்போவை ஒத்திசைக்க உள்ளக கோப்புறையைக் குறிப்பிடவும்" #: ../fdroidserver/deploy.py msgid "Specify an identity file to provide to SSH for rsyncing" -msgstr "" +msgstr "RSyncing க்கு பாஓடு க்கு வழங்க அடையாளக் கோப்பைக் குறிப்பிடவும்" #: ../fdroidserver/nightly.py msgid "Specify which debug keystore file to use." -msgstr "" +msgstr "எந்த பிழைத்திருத்த கீச்டோர் கோப்பைப் பயன்படுத்த வேண்டும் என்பதைக் குறிப்பிடவும்." #: ../fdroidserver/common.py msgid "Spew out even more information than normal" -msgstr "" +msgstr "இயல்பை விட அதிகமான தகவல்களைத் தூண்டவும்" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Stripping mystery signature from {apkfilename}" -msgstr "" +msgstr "{apkfilename} இருந்து இலிருந்து மர்ம கையொப்பத்தை அகற்றுதல்" #: ../fdroidserver/lint.py #, python-format msgid "Summary '%s' is just the app's name" -msgstr "" +msgstr "சுருக்கம் '%s' என்பது பயன்பாட்டின் பெயர்" #: ../fdroidserver/lint.py #, python-brace-format msgid "Summary of length {length} is over the {limit} char limit" -msgstr "" +msgstr "நீளத்தின் சுருக்கம் {length} {limit} எழுத்து வரம்புக்கு மேல் உள்ளது" #: ../fdroidserver/common.py #, python-brace-format msgid "System clock is older than date in {path}!" -msgstr "" +msgstr "கணினி கடிகாரம் {path} இல் தேதியை விட பழையது!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" -msgstr "" +msgstr "குறிச்சொற்கள் புதுப்பிப்பு பயன்முறை தற்போது git, Hg, BZR மற்றும் GIT-SVN களஞ்சியங்களுக்கு மட்டுமே வேலை செய்கிறது" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" -msgstr "" +msgstr "குறிச்சொற்கள் git-svn இல் பயன்படுத்தப்படும் புதுப்பிப்பு பயன்முறை, ஆனால் ரெப்போ குறிச்சொற்களுடன் அமைக்கப்படவில்லை" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." +msgstr "சோதனை பயன்முறை - வெளியீடு ஏற்கனவே இருந்தாலும், வெளியீட்டை மட்டும் வைக்கவும், எப்போதும் உருவாக்குங்கள்." + +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" msgstr "" #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "The OBB version code must come after \"{name}.\":" -msgstr "" +msgstr "OBB பதிப்பு குறியீடு \"{name}\" க்குப் பிறகு வர வேண்டும்.::::" #: ../fdroidserver/btlog.py msgid "The base URL for the repo to log (default: https://f-droid.org)" -msgstr "" +msgstr "ரெப்போவுக்கான அடிப்படை முகவரி (இயல்புநிலை: https://f-droid.org)" #: ../fdroidserver/mirror.py msgid "The directory to write the mirror to" -msgstr "" +msgstr "கண்ணாடியை எழுதும் அடைவு" #: ../fdroidserver/nightly.py msgid "The file to be included in the repo (path or glob)" -msgstr "" +msgstr "ரெப்போவில் சேர்க்கப்பட வேண்டிய கோப்பு (பாதை அல்லது குளோப்)" #: ../fdroidserver/index.py msgid "The repository's fingerprint does not match." -msgstr "" +msgstr "களஞ்சியத்தின் கைரேகை பொருந்தவில்லை." #: ../fdroidserver/deploy.py #, python-brace-format msgid "The root dir for local_copy_dir \"{path}\" does not exist!" -msgstr "" +msgstr "லோக்கல்_கோபி_டிர் \"{path}\" க்கான ரூட் டிர் இல்லை!" #: ../fdroidserver/publish.py msgid "There is a keyalias collision - publishing halted" -msgstr "" +msgstr "ஒரு கீயாலியாச் மோதல் உள்ளது - வெளியீடு நிறுத்தப்பட்டது" #: ../fdroidserver/common.py msgid "These are the apps that have been archived from the main repo." -msgstr "" +msgstr "முதன்மையான ரெப்போவிலிருந்து காப்பகப்படுத்தப்பட்ட பயன்பாடுகள் இவை." #: ../fdroidserver/mirror.py msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB." -msgstr "" +msgstr "F-droid.org ஐ பிரதிபலிக்க இந்த கட்டளை ஒருபோதும் பயன்படுத்தப்படக்கூடாது! ஒரு முழு நகலுக்கு 600 சிபிக்கு மேல் தேவைப்படுகிறது." #: ../fdroidserver/common.py msgid "This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid." -msgstr "" +msgstr "இது எஃப்-டிராய்டுடன் பயன்படுத்தப்பட வேண்டிய பயன்பாடுகளின் களஞ்சியமாகும். இந்த களஞ்சியத்தில் உள்ள பயன்பாடுகள் அசல் பயன்பாட்டு உருவாக்குநர்களால் கட்டப்பட்ட உத்தியோகபூர்வ பைனரிகள், அல்லது https://gitlab.com/fdroid இல் உள்ள கருவிகளைப் பயன்படுத்தி f-droid.org இன் நிர்வாகியால் மூலத்திலிருந்து கட்டப்பட்ட பைனரிகள்." #: ../fdroidserver/import_subcommand.py #, python-format msgid "This repo already has local metadata: %s" -msgstr "" +msgstr "இந்த ரெப்போவில் ஏற்கனவே உள்ளக மேனிலை தரவு உள்ளது: %s" #: ../fdroidserver/init.py #, python-format @@ -1709,243 +1767,229 @@ msgid "" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" +"அமைப்பை முடிக்க, உங்கள் APKS ஐ \"%s\" இல் சேர்க்கவும்\n" +" பின்னர் \"fdroid புதுப்பிப்பு -c; fdroid Update\" ஐ இயக்கவும். நீங்கள் திருத்தவும் விரும்பலாம்\n" +" முகவரி, களஞ்சி பெயர் மற்றும் பலவற்றை அமைக்க \"config.yml\". நீங்கள் அமைக்க வேண்டும்\n" +" கையொப்பமிடும் விசை (தற்காலிகமானது தானாகவே உருவாக்கப்பட்டிருக்கலாம்).\n" +"\n" +" மேலும் தகவலுக்கு: https://f-droid.org/docs/setup_an_f-droid_app_repo\n" +" மற்றும் https://f-droid.org/docs/signing_process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" -msgstr "" +msgstr "AWSBUCKET, AWSSECRETKEY மற்றும் AWSACCESSKEYID ஐப் பயன்படுத்தவும் config.yml இல் அமைக்கப்பட வேண்டும்!" + +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "RCLONE ஐப் பயன்படுத்த, RCLONE_CONFIG மற்றும் AWSBUCKET ஆகியவை config.yml இல் அமைக்கப்பட வேண்டும்!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" -msgstr "" +msgstr "முகவரி https: // அல்லது http: // உடன் தொடங்க வேண்டும்" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" -msgstr "" +msgstr "முகவரி சுருக்கங்கள் பயன்படுத்தப்படக்கூடாது" #: ../fdroidserver/lint.py #, python-brace-format msgid "URL {url} in Description: {error}" -msgstr "" +msgstr "விளக்கத்தில் முகவரி {url}: {error}" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use FSF or OSI approved tags from https://spdx.org/license-list" -msgstr "" +msgstr "எதிர்பாராத உரிமக் குறிச்சொல் \"{}\"! Https://spdx.org/license-list இலிருந்து FSF அல்லது OSI அங்கீகரிக்கப்பட்ட குறிச்சொற்களை மட்டுமே பயன்படுத்தவும்" #: ../fdroidserver/lint.py msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" +msgstr "எதிர்பாராத உரிமக் குறிச்சொல் \"{}\"! உங்கள் கட்டமைப்பு கோப்பில் கட்டமைக்கப்பட்ட உரிமக் குறிச்சொற்களை மட்டுமே பயன்படுத்தவும்" #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" -msgstr "" +msgstr "{configname} இல் அறியப்படாத நுழைவு {key}" #: ../fdroidserver/__main__.py msgid "Unknown exception found!" msgstr "அறியப்படாத விதிவிலக்கு கண்டறியப்பட்டது!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" -msgstr "" +msgstr "அறியப்படாத கோப்பு '{filename}'" #: ../fdroidserver/metadata.py #, python-format msgid "Unknown metadata format: %s" -msgstr "" +msgstr "அறியப்படாத மேனிலை தரவு வடிவம்: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unknown metadata format: {path} (use: *.yml)" -msgstr "" +msgstr "அறியப்படாத மேனிலை தரவு வடிவம்: {path} (பயன்பாடு: *.yml)" #: ../fdroidserver/common.py msgid "Unknown version of aapt, might cause problems: " -msgstr "" +msgstr "AAPT இன் அறியப்படாத பதிப்பு, சிக்கல்களை ஏற்படுத்தக்கூடும்: " #: ../fdroidserver/lint.py msgid "Unnecessary leading space" -msgstr "" +msgstr "தேவையற்ற முன்னணி இடம்" #: ../fdroidserver/lint.py msgid "Unnecessary trailing space" -msgstr "" +msgstr "தேவையற்ற பின்தங்கிய இடம்" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised app field '{fieldname}' in '{path}'" -msgstr "" +msgstr "அங்கீகரிக்கப்படாத பயன்பாட்டு புலம் '{fieldname}' '{path}'" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Unrecognised build flag '{build_flag}' in '{path}'" -msgstr "" +msgstr "அங்கீகரிக்கப்படாத கட்டமைப்புக் கொடி '{build_flag}' '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" -msgstr "" +msgstr "ரெப்போ கிராஃபிக் நிறுவனத்திற்கு ஆதரிக்கப்படாத கோப்பு வகை \"{extension}\"" #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported graphics file found: {path}" -msgstr "" +msgstr "ஆதரிக்கப்படாத கிராபிக்ச் கோப்பு காணப்படுகிறது: {path}" #: ../fdroidserver/lint.py #, python-format msgid "Unused extlib at %s" -msgstr "" +msgstr "பயன்படுத்தப்படாத எக்ச்ட்லிப் %s" #: ../fdroidserver/lint.py #, python-format msgid "Unused file at %s" -msgstr "" +msgstr "%s இல் பயன்படுத்தப்படாத கோப்பு" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scandelete path: %s" -msgstr "" +msgstr "பயன்படுத்தப்படாத ச்கேண்டிலெட் பாதை: %s" #: ../fdroidserver/scanner.py #, python-format msgid "Unused scanignore path: %s" -msgstr "" - -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" +msgstr "பயன்படுத்தப்படாத ச்கேனிக்னர் பாதை: %s" #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" -msgstr "" +msgstr "புதிய தொகுப்புகளுக்கான ரெப்போ தகவல்களைப் புதுப்பிக்கவும்" #: ../fdroidserver/__main__.py msgid "Update the binary transparency log for a URL" -msgstr "" +msgstr "முகவரி க்கான பைனரி வெளிப்படைத்தன்மை பதிவைப் புதுப்பிக்கவும்" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "UpdateCheckData has invalid URL: {url}" -msgstr "" +msgstr "UpdateCheckData இல் தவறான முகவரி உள்ளது: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" -msgstr "" +msgstr "UpdateCheckData பதிப்பு குறியீட்டை முழு எண் (\\ டி அல்லது [0-9]) உடன் பொருத்த வேண்டும்: {codeex}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must use HTTPS URL: {url}" -msgstr "" +msgstr "UpdateCheckData https முகவரி ஐப் பயன்படுத்த வேண்டும்: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData not a valid URL: {url}" -msgstr "" +msgstr "புதுப்பிப்பு தொழில்நுட்பம் செல்லுபடியாகும் முகவரி அல்ல: {url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" +msgstr "UpdateCheckMode அமைக்கப்பட்டுள்ளது, ஆனால் சரிபார்ப்புகள் இன்னும் இயக்கப்படவில்லை என்று தெரிகிறது." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" -msgstr "" +msgstr "புதுப்பிப்பு சோதனை பெயர் அறியப்பட்ட பயன்பாட்டு ஐடிக்கு அமைக்கப்பட்டுள்ளது, அதை அகற்றலாம்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to androidobservatory.org" -msgstr "" +msgstr "Uploading {apkfilename} பெறுநர் androidobservatory.org" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Uploading {apkfilename} to virustotal" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "பயன்பாடு" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "பயன்பாடு: %s\n" +msgstr "Uploading {apkfilename} பெறுநர் virustotal" #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" -msgstr "" - -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" +msgstr "Use /HEAD instead of /master or /main பெறுநர் புள்ளியம் at a கோப்பு in the இயல்புநிலை branch" #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." -msgstr "" +msgstr "Use `fdroid புதுப்பிப்பு -c` பெறுநர் create it." #: ../fdroidserver/build.py msgid "Use build server" -msgstr "" +msgstr "Use உருவாக்கு சேவையகம்" #: ../fdroidserver/update.py msgid "Use date from APK instead of current time for newly added APKs" -msgstr "" +msgstr "Use திகதி இருந்து APK instead of மின்னோட்ட்ம், ஓட்டம் time க்கு newly added APKs" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using \"{path}\" for configuring s3cmd." -msgstr "" +msgstr "Using \"{path}\" க்கு configuring s3cmd." + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "Using \"{path}\" க்கு syncing with remote storage." #: ../fdroidserver/common.py msgid "Using APK Signature v2" -msgstr "" +msgstr "APK கையொப்பம் V2 ஐப் பயன்படுத்துதல்" #: ../fdroidserver/common.py msgid "Using APK Signature v3" -msgstr "" +msgstr "சாப்பிங் ஏபிசி கையொப்பம்" #: ../fdroidserver/common.py msgid "Using JAR Signature" -msgstr "" +msgstr "குடுவை கையொப்பத்தைப் பயன்படுத்துதல்" #: ../fdroidserver/common.py msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" -msgstr "" - -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" +msgstr "சாவாவின் சார்சிக்னரைப் பயன்படுத்துதல், APKS ஐ சரிபார்க்க பரிந்துரைக்கப்படவில்லை! Apksigner ஐப் பயன்படுத்தவும்" #: ../fdroidserver/metadata.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" -msgstr "" +msgstr "{பாதை of இன் உள்ளடக்கங்களுக்கு பதிலாக வெற்று அகராதியைப் பயன்படுத்துதல்!" #: ../fdroidserver/init.py #, python-brace-format msgid "Using existing keystore \"{path}\"" -msgstr "" +msgstr "இருக்கும் கீச்டோர் \"{path}\" ஐப் பயன்படுத்துதல்" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "Using rclone பெறுநர் sync with: {url}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" -msgstr "" +msgstr "Using s3cmd பெறுநர் sync with: {url}" #: ../fdroidserver/__main__.py msgid "Valid commands are:" @@ -1953,817 +1997,702 @@ msgstr "செல்லுபடியாகும் கட்டளைகள #: ../fdroidserver/verify.py msgid "Verify against locally cached copy rather than redownloading." -msgstr "" +msgstr "Verify against locally cached நகலெடு rather than redownloading." #: ../fdroidserver/__main__.py msgid "Verify the integrity of downloaded packages" -msgstr "" +msgstr "பதிவிறக்கம் செய்யப்பட்ட தொகுப்புகளின் ஒருமைப்பாட்டை சரிபார்க்கவும்" #: ../fdroidserver/index.py msgid "Verifying index signature:" -msgstr "" +msgstr "குறியீட்டு கையொப்பத்தை சரிபார்க்கிறது:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Apksigner உடன் தொகுப்பு {path} ஐ சரிபார்க்கிறது." #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." +msgstr "வைரச்டோட்டல் பநிஇ விசையை 32MB ஐ விட பெரிய கோப்புகளை பதிவேற்ற முடியாது, {path} பதிவேற்ற {url} ஐப் பயன்படுத்தவும்." + +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" msgstr "" #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" -msgstr "" +msgstr "சாத்தியமான மேனிலை தரவு பிழைகள் குறித்து எச்சரிக்கவும்" + +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "வெபாசெம்பிளி பைனரி கோப்பு" #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" -msgstr "" +msgstr "கையொப்பமிடப்பட்ட குறியீடுகளுக்கு கட்டமைக்கப்படும்போது, இந்த கட்டத்தில் கையொப்பமிடப்படாத குறியீடுகளை மட்டுமே உருவாக்கவும்" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." -msgstr "" +msgstr "முழு களஞ்சியத்தையும் யம்லின்ட் இயல்புநிலையாக முடக்கும்போது முடக்கப்படுகிறது. இந்த விருப்பம் யம்லின்ட்டைப் பொருட்படுத்தாமல் கட்டாயப்படுத்துகிறது." #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." -msgstr "" +msgstr "கையொப்பமிடும்போது அல்லது சரிபார்க்கும்போது தோல்வியுற்றால், பிழைக் குறியீட்டைக் கொண்டு வெளியேறவும்." + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "ADB வழியாக f-droid.apk ஐ பதிவிறக்கம் செய்து நிறுவ விரும்புகிறீர்களா? (ஆம்/இல்லை)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "F-droid.org இலிருந்து பயன்பாட்டை (களை) பதிவிறக்கம் செய்ய விரும்புகிறீர்களா? (ஆம்/இல்லை)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" -msgstr "" +msgstr "X.509 'விசித்திரமான பெயர்' விசைகளை உருவாக்கும் போது பயன்படுத்தப்படுகிறது" #: ../fdroidserver/common.py msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:" -msgstr "" +msgstr "உங்கள் SDK க்கான பாதையை அமைக்க நீங்கள் Android_home ஐப் பயன்படுத்தலாம், அதாவது:" #: ../fdroidserver/scanner.py msgid "ZIP file archive" -msgstr "" +msgstr "சிப் கோப்பு காப்பகம்" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "ADB அறிக்கைகள் {serial} என்பது \"{status}\"!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" -msgstr "" +msgstr "{path} க்கு அடையாள கோப்பைச் சேர்ப்பது" #: ../fdroidserver/update.py #, python-brace-format msgid "adding to {name}: {path}" -msgstr "" +msgstr "{name}: {path} உடன் சேர்க்கிறது" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" -msgstr "" +msgstr "தெளிவற்ற விருப்பம்: %(option)s %(matches)s உடன் பொருந்தக்கூடும்" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" -msgstr "" +msgstr "apksigner கண்டுபிடிக்கப்படவில்லை! நவீன APK களை கையொப்பமிடவோ சரிபார்க்கவோ முடியாது" #: ../fdroidserver/common.py msgid "apksigner not found, it's required for signing!" -msgstr "" +msgstr "apksigner கண்டுபிடிக்கப்படவில்லை, கையெழுத்திட இது தேவை!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" -msgstr "" +msgstr "இயக்க வேண்டிய கோப்பின் பயன்பாட்டு ஐடி" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py msgid "application ID with optional versionCode in the form APPID[:VERCODE]" -msgstr "" +msgstr "Appid [: VERCODE] படிவத்தில் விருப்ப பதிப்பு குறியீட்டைக் கொண்ட பயன்பாட்டு ஐடி" #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" -msgstr "" +msgstr "காப்பகம்_ஆர்ல் /காப்பகத்துடன் முடிவடைய வேண்டும்" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" -msgstr "" +msgstr "உரையாடல் \"-\" பயன்முறையுடன் %r" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" -msgstr "" +msgstr "உரையாடல் %(argument_name)s: %(message)s" #: ../fdroidserver/nightly.py msgid "attempting bare SSH connection to test deploy key:" -msgstr "" +msgstr "சோதனை வரிசைப்படுத்துவதற்கு வெற்று பாஓடு இணைப்பை முயற்சிக்கிறது:" #: ../fdroidserver/common.py msgid "can not parse scrlib spec (not a string): '{}'" -msgstr "" +msgstr "ச்க்ர்லிப் ச்பெக்கை அலச முடியாது (ஒரு சரம் அல்ல): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" -msgstr "" +msgstr "' %(error)s கள்' ஐ திறக்க முடியாது: %(filename)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" -msgstr "" +msgstr "HTTPS அல்லாத முகவரி ஐ திறக்க முடியாது: '{};" #: ../fdroidserver/build.py #, python-brace-format msgid "cannot find required srclibs: \"{path}\"" -msgstr "" +msgstr "தேவையான SRCLIBS ஐக் கண்டுபிடிக்க முடியவில்லை: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" -msgstr "" +msgstr "பல சப் பார்சர் வாதங்கள் இருக்க முடியாது" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" -msgstr "" +msgstr "செயல்களை ஒன்றிணைக்க முடியாது - இரண்டு குழுக்களுக்கு %r என்று பெயரிடப்பட்டுள்ளது" #: ../fdroidserver/nightly.py msgid "cannot publish update, did you set the deploy key?" -msgstr "" +msgstr "புதுப்பிப்பை வெளியிட முடியாது, நீங்கள் வரிசைப்படுத்தல் விசையை அமைத்தீர்களா?" #: ../fdroidserver/nightly.py #, python-brace-format msgid "cloning {url}" -msgstr "" +msgstr "குளோனிங் {url}" #: ../fdroidserver/__main__.py msgid "commands from plugin modules:" -msgstr "" +msgstr "சொருகி தொகுதிகளிலிருந்து கட்டளைகள்:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" msgid_plural "conflicting option strings: %s" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "முரண்பட்ட விருப்ப சரம்: %s" +msgstr[1] "முரண்பட்ட விருப்ப சரங்கள்: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser alias: %s" -msgstr "" +msgstr "முரண்பட்ட சப் பார்சர் மாற்றுப்பெயர்: %s" #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting subparser: %s" -msgstr "" +msgstr "முரண்பட்ட சப்சர்: %s" #: ../fdroidserver/metadata.py #, python-brace-format msgid "could not parse '{path}'" -msgstr "" +msgstr "'{path}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no name specified): '{}'" -msgstr "" +msgstr "SRCLIB ச்பெக்கை அலச முடியவில்லை (பெயர் குறிப்பிடப்படவில்லை): '{}'" #: ../fdroidserver/common.py msgid "could not parse srclib spec (no ref specified): '{}'" -msgstr "" - -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" +msgstr "SRCLIB ச்பெக்கை அலச முடியவில்லை (குறிப்பு எதுவும் குறிப்பிடப்படவில்லை): '{}'" #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" -msgstr "" +msgstr "உருவாக்கப்பட்டது {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "தற்போதைய பதிப்பு புதியது: பழைய வெர்கோட் = {old}, புதிய வெர்கோட் = {new}" #: ../fdroidserver/update.py #, python-brace-format msgid "deleting: repo/{apkfilename}" -msgstr "" +msgstr "நீக்குதல்: ரெப்போ/{apkfilename}" + +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "பூட்டு இல்லாமல் சார்பு கோப்பு" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" -msgstr "" +msgstr "பயன்படுத்தப்பட்ட செயல்முறை பதிவு {path} முதல் {dest} வரை" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" -msgstr "" +msgstr "%r போன்ற விருப்பங்களுக்கு DEST = தேவை" #: ../fdroidserver/scanner.py msgid "downloading '{}'" -msgstr "" +msgstr "'{}' பதிவிறக்குகிறது" #: ../fdroidserver/scanner.py msgid "downloading scanner signatures from '{}' failed" -msgstr "" +msgstr "'{}' இலிருந்து ச்கேனர் கையொப்பங்களைப் பதிவிறக்குவது தோல்வியடைந்தது" #: ../fdroidserver/scanner.py msgid "executable binary, possibly code" -msgstr "" +msgstr "இயங்கக்கூடிய பைனரி, ஒருவேளை குறியீடு" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "எதிர்பார்க்கப்படும் %s உரையாடல்" +msgstr[1] "எதிர்பார்க்கப்படும் %s வாதங்கள்" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" -msgstr "" +msgstr "குறைந்தது ஒரு வாதத்தை எதிர்பார்க்கலாம்" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" -msgstr "" +msgstr "பெரும்பாலான ஒரு வாதத்தில் எதிர்பார்க்கப்படுகிறது" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" -msgstr "" +msgstr "ஒரு வாதத்தை எதிர்பார்க்கலாம்" #: ../fdroidserver/__main__.py msgid "fdroid [] [-h|--help|--version|]" -msgstr "" +msgstr "fdroid [<கட்டளை>] [-h |--help | --version | ]]" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" -msgstr "" - -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" +msgstr "வலையிலிருந்து கையொப்பங்களின் அண்மைக் கால பதிப்பைப் பெறுங்கள்" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." -msgstr "" +msgstr "மேனிலை தரவு பிழைகள் (இயல்புநிலை) எச்சரிக்கைகள் அல்லது புறக்கணிக்கப்பட வேண்டும்." #: ../fdroidserver/common.py msgid "git svn clone failed" -msgstr "" +msgstr "அறிவிலி எச்.வி.என் நகலி தோல்வியடைந்தது" #: ../fdroidserver/scanner.py msgid "gzip file archive" -msgstr "" +msgstr "GZIP கோப்பு காப்பகம்" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" -msgstr "" +msgstr "புறக்கணிக்கப்பட்ட வெளிப்படையான உரையாடல் %r" #: ../fdroidserver/index.py msgid "index-v1 must have a signature, use `fdroid signindex` to create it!" -msgstr "" +msgstr "Index-V1 ஒரு கையொப்பத்தைக் கொண்டிருக்க வேண்டும், அதை உருவாக்க `fdroid சிக்னின்டெக்ச்` ஐப் பயன்படுத்தவும்!" #: ../fdroidserver/index.py msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" -msgstr "" +msgstr "Index-V2 ஒரு கையொப்பத்தைக் கொண்டிருக்க வேண்டும், அதை உருவாக்க `fdroid சிக்னின்டெக்ச்` ஐப் பயன்படுத்தவும்!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" -msgstr "" +msgstr "தவறான %(type)s மதிப்பு: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" -msgstr "" +msgstr "தவறான தேர்வு: %(value)r ஆர் ( %(choices)s இலிருந்து தேர்வு செய்யவும்)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" -msgstr "" +msgstr "தவறான மோதல்_ -ரசல் மதிப்பு: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" -msgstr "" +msgstr "தவறான விருப்பத்தேர்வு சரம் %(option)r ஆர்: ஒரு எழுத்துக்குறி %(prefix_chars)r ஆர் உடன் தொடங்க வேண்டும்" #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" -msgstr "" +msgstr "IPFS_CID கண்டுபிடிக்கப்படவில்லை, CIDV1 தலைமுறையைத் தவிர்க்கிறது" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "அண்மைக் கால உருவாக்க செய்முறை ஒருபோதும் இல்லை: பழைய வெராகோட் = {old}, புதிய வெராக்கோட் = {new}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\"" -msgstr "" +msgstr "Local_copy_dir \"fdroid\" உடன் முடிவடையாது, ஒருவேளை நீங்கள் அர்த்தம்: \"{path}\"" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be an absolute path!" -msgstr "" +msgstr "local_copy_dir ஒரு முழுமையான பாதையாக இருக்க வேண்டும்!" #: ../fdroidserver/deploy.py msgid "local_copy_dir must be directory, not a file!" -msgstr "" +msgstr "local_copy_dir கோப்பகமாக இருக்க வேண்டும், ஒரு கோப்பு அல்ல!" #: ../fdroidserver/index.py #, python-format msgid "mirror '%s' does not end with 'fdroid'!" -msgstr "" +msgstr "கண்ணாடியின் '%s' 'fdroid' உடன் முடிவடையாது!" #: ../fdroidserver/index.py #, python-brace-format msgid "mirrors set twice, in config.yml and {path}!" -msgstr "" +msgstr "கண்ணாடிகள் இரண்டு முறை அமைக்கப்பட்டன, config.yml மற்றும் {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" -msgstr "" +msgstr "பரச்பர வாதங்கள் விருப்பமாக இருக்க வேண்டும்" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" -msgstr "" +msgstr "அடுத்து {name} கேச் புதுப்பிப்பு {time}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "no \"icon\" in {appid}" -msgstr "" +msgstr "{appid} in இல் \"படவுரு\" இல்லை" #: ../fdroidserver/signatures.py msgid "no APK supplied" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" +msgstr "APK வழங்கப்படவில்லை" #: ../fdroidserver/checkupdates.py msgid "no version information found" -msgstr "" +msgstr "பதிப்பு தகவல்கள் எதுவும் கிடைக்கவில்லை" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" -msgstr "" +msgstr "உரையாடல் %s உடன் அனுமதிக்கப்படவில்லை" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" -msgstr "" +msgstr "%s வாதங்களில் ஒன்று தேவை" #: ../fdroidserver/common.py ../fdroidserver/index.py msgid "only accepts strings, lists, and tuples" -msgstr "" - -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "விருப்பம் -%s அங்கீகரிக்கப்படவில்லை" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "விருப்பம் -%s க்கு வாதம் தேவை" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" +msgstr "சரங்கள், பட்டியல்கள் மற்றும் டூப்பிள்களை மட்டுமே ஏற்றுக்கொள்கிறது" #: /usr/lib/python3.11/argparse.py -#, fuzzy msgid "options" msgstr "விருப்பங்கள்" #: ../fdroidserver/nightly.py #, python-brace-format msgid "overwriting existing {path}" -msgstr "" +msgstr "இருக்கும் {path} ஐ மேலெழுதும்" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" -msgstr "" +msgstr "நிலை வாதங்கள்" #: ../fdroidserver/common.py #, python-brace-format msgid "process log deploy {path} to {dest} failed!" -msgstr "" +msgstr "செயல்முறை பதிவு {path} முதல் {dest} தோல்வியுற்றது!" #: ../fdroidserver/build.py msgid "reference binary missing signature" -msgstr "" +msgstr "குறிப்பு பைனரி காணாமல் போன கையொப்பம்" #: ../fdroidserver/signatures.py #, python-brace-format msgid "refuse downloading via insecure HTTP connection (use HTTPS or specify --no-https-check): {apkfilename}" -msgstr "" +msgstr "பாதுகாப்பற்ற HTTP இணைப்பு வழியாக பதிவிறக்குவதை மறுக்கவும் (https ஐப் பயன்படுத்தவும் அல்லது-no-https-check ஐக் குறிப்பிடவும்): {apkfilename}" #: ../fdroidserver/index.py #, python-format msgid "repo_icon \"repo/icons/%s\" does not exist, generating placeholder." -msgstr "" +msgstr "ரெப்போ_கான் \"ரெப்போ/ஐகான்கள்/%s\" இல்லை, ஒதுக்கீட்டு ஒதுக்கிடத்தை உருவாக்குகிறது." #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" -msgstr "" +msgstr "ரெப்போ_ஆர்ல் /ரெப்போவுடன் முடிவடைய வேண்டும்" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "" +msgstr "RSYNC காணவில்லை அல்லது உடைந்தது: {error}" #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" -msgstr "" +msgstr "S3CMD ஒத்திசைவு குறியீடுகள் {path} முதல் {url} மற்றும் நீக்கு" + +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" +msgstr "S3CMD ஒத்திசைவு குறியீடுகளை {path} முதல் {url} வரை ஒத்திசைத்து நீக்கப்பட்டது" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" -msgstr "" +msgstr "ச்கேனர் கேச் தவறாக உள்ளது! நீங்கள் அதை அழிக்கலாம்: '{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" -msgstr "" +msgstr "ServerWebroot: பாதை \"fdroid\" உடன் முடிவடையாது, ஒருவேளை நீங்கள் இவற்றில் ஒன்றைக் குறிக்கிறீர்கள்:" #: ../fdroidserver/scanner.py msgid "shared library" -msgstr "" +msgstr "பகிரப்பட்ட நூலகம்" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "இந்த உதவி செய்தியை காட்டிவிட்டு வெளியேறு" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." -msgstr "" +msgstr "கையொப்பமிடப்பட்ட APK, ஒரு கோப்பு-பாதை அல்லது HTTPS முகவரி." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" -msgstr "" +msgstr "முழு உருவாக்க பதிவுகளை வரிசைப்படுத்துவதைத் தவிர்க்கவும்: பதிவு உள்ளடக்கம் காலியாக உள்ளது" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" -msgstr "" +msgstr "முழு உருவாக்க பதிவுகளை வரிசைப்படுத்துவதைத் தவிர்க்கவும்: கட்டமைப்பில் இயக்கப்படவில்லை" #: ../fdroidserver/update.py #, python-brace-format msgid "skipping source tarball: {path}" -msgstr "" +msgstr "மூல நாடாகாப்பகபந்து தவிர்த்து: {path}" #: ../fdroidserver/lint.py msgid "srclibs missing name and/or @" -msgstr "" +msgstr "Srclibs பெயர் காணவில்லை மற்றும்/அல்லது @" #: ../fdroidserver/scanner.py msgid "static library" -msgstr "" +msgstr "நிலையான நூலகம்" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" -msgstr "" +msgstr "வழங்கப்பட்ட குறிப்பு பைனரி கையொப்பத்தை அனுமதித்துள்ளது {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" -msgstr "" +msgstr "பின்வரும் வாதங்கள் தேவை: %s" + +#: ../fdroidserver/install.py +msgid "true" +msgstr "உண்மை" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" -msgstr "" +msgstr "எதிர்பாராத விருப்ப சரம்: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" -msgstr "" +msgstr "அறியப்படாத பாகுபடுத்தி %(parser_name)r (தேர்வுகள்: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" -msgstr "" +msgstr "அங்கீகரிக்கப்படாத வாதங்கள்: %s" #: ../fdroidserver/common.py #, python-brace-format msgid "unsafe permissions on '{config_file}' (should be 0600)!" -msgstr "" +msgstr "'{config_file}' இல் பாதுகாப்பற்ற அனுமதிகள் (0600 ஆக இருக்க வேண்டும்)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " -msgstr "" +msgstr "பயன்பாடு: " #: ../fdroidserver/deploy.py -#, python-brace-format +#, fuzzy, python-brace-format msgid "using Apache libcloud to sync with {url}" -msgstr "" +msgstr "{url} both உடன் ஒத்திசைக்க அப்பாச்சி லிப்குட்டைப் பயன்படுத்துதல்" #: ../fdroidserver/deploy.py msgid "virustotal.com is rate limiting, waiting to retry..." -msgstr "" +msgstr "wirustotal.com என்பது விகிதத்தைக் கட்டுப்படுத்துகிறது, மீண்டும் முயற்சிக்க காத்திருக்கிறது ..." + +#: ../fdroidserver/install.py +msgid "yes" +msgstr "ஆம்" #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{0} பயன்பாடு, {1} முக்கிய மாற்றுப்பெயர்கள்" +msgstr[1] "{0} பயன்பாடுகள், {1} முக்கிய மாற்றுப்பெயர்கள்" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" +msgstr "{apkfilename} ({appid}) மேனிலை தரவு இல்லை!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " -msgstr "" +msgstr "{apkfilename} இன் androidmanifest.xml க்கு மோசமான தேதி உள்ளது: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." -msgstr "" +msgstr "{appid} ஒரு பெயர் இல்லை! அதற்கு பதிலாக பயன்பாட்டு ஐடியைப் பயன்படுத்துதல்." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" -msgstr "" +msgstr "{path} இல் இருந்து {appid} என்பது செல்லுபடியாகும் ஆண்ட்ராய்டு பயன்பாட்டு ஐடி அல்ல!" #: ../fdroidserver/metadata.py ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Java Package Name!" -msgstr "" +msgstr "{path} இல் இருந்து {appid} என்பது செல்லுபடியாகும் சாவா தொகுப்பு பெயர் அல்ல!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" -msgstr "" +msgstr "{appid} பயன்பாடுகள் மற்றும் கோப்புகள் இரண்டையும் கொண்டுள்ளது: {files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" -msgstr "" +msgstr "{appid} காணவில்லை {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" -msgstr "" +msgstr "{appid}: அறியப்படாத எக்ச்ட்லிப் {path} உருவாக்க '{versionName}'" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" -msgstr "" +msgstr "{appid}: தற்போதைய மூல நிலையில் இயங்காத கட்டமைப்புகள் எதுவும் குறிப்பிடப்படவில்லை" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}!'" -msgstr "" +msgstr "{appid}: {field} ஒரு '{type}' ஆக இருக்க வேண்டும், ஆனால் அது ஒரு '{fieldtype}!'" #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: {field} must be a '{type}', but it is a '{fieldtype}'!" -msgstr "" +msgstr "{appid}: {field} ஒரு '{type}' ஆக இருக்க வேண்டும், ஆனால் அது ஒரு '{fieldtype}'!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" -msgstr "" +msgstr "{build_flag} ஒரு முழு எண்ணாக இருக்க வேண்டும், காணப்படுகிறது: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" -msgstr "" +msgstr "{build_flag} பட்டியல் அல்லது சரம் இருக்க வேண்டும், காணப்படுகிறது: {value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" -msgstr "" +msgstr "{file} வெற்று அல்லது ஊழல் நிறைந்தது!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." -msgstr "" +msgstr "{name} \"{section}/ஐகான்கள்/{path}\" இல்லை! \"Config.yml\" ஐ சரிபார்க்கவும்." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" -msgstr "" +msgstr "{path} ஏற்கனவே உள்ளது, இறக்குமதி முடிவுகளை புறக்கணிக்கிறது!" #: ../fdroidserver/nightly.py #, python-brace-format msgid "{path} does not exist! Create it by running:" -msgstr "" +msgstr "{path} இல்லை! இயங்குவதன் மூலம் அதை உருவாக்கவும்:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" -msgstr "" +msgstr "{path} மோசமான கோப்பு கையொப்பம் \"{pattern}\", சாத்தியமான சானச் சுரண்டல்!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "{path} வைரச்டோட்டல் {count} முறை கொடியிடப்பட்டுள்ளது:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} தவறான கைரேகை ({fingerprint}) உள்ளது!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} என்பது \"விசை: மதிப்பு\" கட்டளை அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not a standard config file!" -msgstr "" +msgstr "{path} என்பது ஒரு நிலையான கட்டமைப்பு கோப்பு அல்ல!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path} என்பது பட்டியல் அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} என்பது {expected_type} அல்ல, ஆனால் ஒரு {datatype}!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} is zero size!" -msgstr "" +msgstr "{path} என்பது சுழிய அளவு!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} more than 200MB, manually upload: {url}" -msgstr "" +msgstr "{path} 200MB க்கும் அதிகமான, கைமுறையாக பதிவேற்றுதல்: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}: \"{code}\" என்பது செல்லுபடியாகும் ஐஎச்ஓ_3166-1 ஆல்பா -2 நாட்டு குறியீடு அல்ல!" #: ../fdroidserver/update.py #, python-brace-format msgid "{path}: {error}" -msgstr "" +msgstr "{path}: {error}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{url} does not end with \"fdroid\", check the URL path!" -msgstr "" +msgstr "{url} \"fdroid\" உடன் முடிவடையாது, முகவரி பாதையை சரிபார்க்கவும்!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{url} does not start with \"http\"!" -msgstr "" +msgstr "{url} \"http\" உடன் தொடங்காது!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} கட்டிடம் தோல்வியடைந்தது" +msgstr[1] "{} கட்டமைப்புகள் தோல்வியுற்றன" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "{} உருவாக்கம் செய் பெற்றது" +msgstr[1] "{} கட்டடங்கள் செய் பெற்றன" diff --git a/locale/tr/LC_MESSAGES/fdroidserver.po b/locale/tr/LC_MESSAGES/fdroidserver.po index bb97dea9..b3bbe3d5 100644 --- a/locale/tr/LC_MESSAGES/fdroidserver.po +++ b/locale/tr/LC_MESSAGES/fdroidserver.po @@ -4,20 +4,23 @@ # Orhan , 2021. # Oğuz Ersen , 2022, 2023, 2024. # Bai , 2023. +# "M. Fatih Uluçam" , 2025. +# Nuri KÜÇÜKLER , 2025. +# Bora Atıcı , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-15 04:32+0000\n" -"Last-Translator: Oğuz Ersen \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-05-26 22:01+0000\n" +"Last-Translator: Bora Atıcı \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.12-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -41,6 +44,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" eşleşen üst veri dosyasına sahip değil!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\" anahtarı yansılara eklenmemelidir!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -51,11 +58,6 @@ msgstr "\"local_copy_dir\" {path} mevcut değil!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" zaten {dev} üzerinde kurulu." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" tarihi geçmiş {name} ({version}) içeriyor" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -81,17 +83,6 @@ msgstr "\"{path}\", izin verilmeyen bir anahtarla imzalandı:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" geçerli bir URL değil!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s seçeneği %(number)d argüman gerektirir" -msgstr[1] "%(option)s seçeneği %(number)d argüman gerektirir" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -107,14 +98,6 @@ msgstr "%d APK imzalanamadı veya doğrulanamadı!" msgid "%d problems found" msgstr "%d sorun bulundu" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [seçenekler]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -135,13 +118,6 @@ msgstr "%s bozuk SHA-256'ya sahip: %s" msgid "%s is not an accepted build field" msgstr "%s kabul edilen bir inşa alanı değil" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s seçeneği bir değer almaz" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' config.yml içinde bulunamadı!" @@ -162,8 +138,6 @@ msgstr "'keystorepass' config.yml içinde bulunamadı!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' config.yml içinde bulunamadı!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' positionals için geçersiz bir argüman" @@ -177,11 +151,6 @@ msgstr "'sdk_path' config.yml içinde ayarlı değil!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' çok eski, fdroid build-tools-{version} veya daha yenisini gerektirir!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' rastgele sırada olacak! Sıra önemliyse () veya [] parantez kullanın!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -192,7 +161,7 @@ msgstr "'{path}' yürütülemedi!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' geçersiz biçime sahip, bir sözlük olmalı!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' {appid} içinde geçerli {field} değil. Regex ifadesi: {pattern}" @@ -202,13 +171,15 @@ msgstr "'{value}' {appid} içinde geçerli {field} değil. Regex ifadesi: {patte msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' geçerli bir {field} değil, {pattern} olmalı" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request yalnızca tek bir uygulama kimliğinde çalışır!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr ".. .checkupdate {appid} için başarısız oldu: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() tanımlı değil" @@ -299,10 +270,6 @@ msgstr "Android SDK aracı {cmd} bulunamadı!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Uygulama İkili Dosyalara sahip ancak sertifikayı sabitlemek için karşılık gelen AllowedAPKSigningKeys'e sahip değil." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Uygulamanın NoSourceSince veya ArchivePolicy \"0 sürümü\" var ancak AutoUpdateMode veya UpdateCheckMode Yok değil" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Uygulamanın NoSourceSince veya ArchivePolicy \"0 sürümü\" var ya da 0 var ama AutoUpdateMode veya UpdateCheckMode Yok değil" @@ -329,6 +296,14 @@ msgstr "Geçersiz imza ile {apkfilename} arşivleme!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "UpdateCheckMode ile AutoUpdateMode: HTTP bir desene sahip olmalıdır." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Bütün sorulara otomatik olarak hayır." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Bütün sorulara otomatik olarak evet." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -338,7 +313,6 @@ msgstr "Aynalar yapılandırmasında hatalı giriş türü \"{mirrortype}\": {mi msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Yansının temel URL'si, 'şu sorgu dizgisini kullanarak indeks imzalama anahtarını içerebilir: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -389,16 +363,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" msgstr[1] "Tarama sırasında {} hata nedeniyle inşa edilemiyor" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "{path} okunamadı: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "\"{path}\" yeniden yazılamıyor" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "'%s' kategorileri geçersiz" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Kategoriler ayarlı değil" @@ -421,6 +402,10 @@ msgstr "{appid} için arşivleme denetleniyor - apks:{integer}, keepversions:{ke msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Temiz güncelleme - önbellekleri kullanmaz, tüm APKları yeniden işler" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Günlük çıktısını renklendir" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Kategorilerin virgülle ayrılmış listesi." @@ -434,6 +419,10 @@ msgstr "'%s' komutu tanınmıyor.\n" msgid "Commit changes" msgstr "Değişiklikleri işle" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Değişiklikleri uygula, yükle ve bir birleştirme isteği yap" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -443,20 +432,17 @@ msgstr ".yml ve yerelleştirilmiş dosyalar arasında çakışan \"{field}\" tan msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Çakışan argümanlar: '--verbose' ve '--quiet' aynı anda belirtilemez." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Çakışan yapılandırma dosyaları! {newfile} kullanılıyor, {oldfile} yok sayılıyor!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "'{command}' sisteminizde bulunamadı" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Son sürüm kodu bulunamadı" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Son sürüm adı bulunamadı" @@ -476,6 +462,7 @@ msgstr "İnceleme için APK {path} açılamadı: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "\"{size}\" boyutu ayrıştırılamadı, yanlış tür \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Uygulama kimliği bulunamadı" @@ -502,6 +489,11 @@ msgstr "Yeni kapsayıcı \"{name}\" oluşturuldu" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "s3cmd yapılandırması için \"{path}\" oluşturuluyor." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Boş {config_file} oluşturuluyor" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Günlük dizini oluşturuluyor" @@ -564,11 +556,6 @@ msgstr "Açıklama '%s' yalnızca uygulamanın özeti" msgid "Description has a duplicate line" msgstr "Açıklamanın yinelenen satırı var" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Açıklamanın bir listesi (%s) var fakat madde imli (*) veya numaralı(#) değil" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -617,15 +604,14 @@ msgstr "Depoyu yenileme, bir inşa internet bağlantısı olmadan sınanırken y msgid "Don't use rsync checksums" msgstr "Rsync sağlama toplamlarını kullanma" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "F-Droid.apk'yı ağa az bilgi sızdıracak şekilde indir" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Küçük depoların tam yansımasını indir" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "%s indiriliyor" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Depoyu indirmek zaten bir kez başarısız oldu, tekrar denenmiyor." @@ -659,14 +645,6 @@ msgstr "HATA: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "HATA: \"server\" alt komutu kaldırıldı, \"deploy\" kullanın!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"HATA: bu komut asla f-droid.org'u yansıtmak için kullanılmamalıdır!\n" -"f-droid.org'un tam bir yansıması 200GB'tan çok yer gerektirir." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "HATA: desteklenmeyen CI türü, yama gönderebilirsiniz!" @@ -679,12 +657,22 @@ msgstr "HATA: desteklenmeyen git ana makinesi \"%s\", yama gönderebilirsiniz!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "HATA: {path} içindeki {key} \"archive\" veya \"repo\" değil!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "HATA: {key} geçerli bir anahtar değil!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "Hata: {key} anahtarının değeri {t} tipinde olmalı!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "HATA: {path} içindeki {key}:{subkey} izin verilen anahtarlar içinde değil: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -705,9 +693,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "{configname} içinden {var} ortam değişkeni ayarlı değil!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Ortam değişkeni {{env: {var}}} ayarlanmadı!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "'github_releases' dağıtılırken hata oluştu, {} yok. (Önce `fdroid update` komutunu çalıştırmanız gerekebilir.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -725,6 +718,10 @@ msgstr "Bir kaynak depodan uygulama üst verilerini ayıkla" msgid "Extract signatures from APKs" msgstr "APK'lardan imzaları ayıkla" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk bilinen kaynakların hiç birinden indirilemedi!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -794,10 +791,6 @@ msgstr "Dosya işlenirken kayboldu: {path}" msgid "Finished" msgstr "Tamamlandı" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flattr bağış yöntemleri FlattrID: alanında olmalı" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Yasaklı HTML etiketleri" @@ -829,7 +822,6 @@ msgstr "\"{name}\" için hatalı ödeme dosyası \"{path}\" bulundu:" msgid "Found invalid appids in arguments" msgstr "Argümanda geçersiz appid'ler bulundu" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Bazı uygulamalar için geçersiz versionCodes bulundu" @@ -894,15 +886,13 @@ msgstr "Git clean başarısız" msgid "Git fetch failed" msgstr "Git fetch başarısız" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune başarısız" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head başarısız: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset başarısız" @@ -947,6 +937,11 @@ msgstr "2048'den uzun FUNDING.yml girdisi yok sayılıyor: %s" msgid "Ignoring bad element in manifest: %s" msgstr "Manifestteki hatalı öğe yok sayılıyor: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "{oldfile} kullanımdan kaldırıldı, {newfile} kullanın!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Üst verisiz paket yok sayılıyor: " @@ -1032,16 +1027,12 @@ msgstr "Geçersiz Vercode İşlemi: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Geçersiz VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Geçersiz uygulama kimliği {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Geçersiz boole '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Geçersiz madde imli liste" @@ -1154,6 +1145,11 @@ msgstr "Bozuk serverwebroot satırı:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "ZIP dosyasında azami özyineleme derinliğine ulaşıldı: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "{url} için yansı yapılandırması \"isPrimary\" anahtarını içeriyor!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Tüm dosya türlerini, tam depoyu ve arşivi yansıla." @@ -1183,6 +1179,10 @@ msgstr "Android SDK bulunamadı!" msgid "No attached devices found" msgstr "Bağlı aygıt bulunamadı" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "`adb install` için aygıt bulunamadı! Lütfen bir tane takın." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL'de parmak izi yok." @@ -1243,7 +1243,6 @@ msgstr "{path} içinde imzalama sertifikaları bulunamadı" msgid "No such package: %s" msgstr "Böyle bir paket yok: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1278,7 +1277,6 @@ msgstr "{appid} için yapılacak işlem yok." msgid "Now set these in config.yml:" msgstr "Şimdi bunları config.yml içinde ayarlayın:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1296,26 +1294,28 @@ msgstr "OBB'ın packagename değeri desteklenen APK ile eşleşmiyor:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Çevrim dışı makine, `fdroid deploy` komutuna kadar git yansı oluşturma atlanıyor" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "'github_releases' yapılandırma ögelerinden birinde 'packageNames' değeri eksik. atlanıyor..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "'github_releases' yapılandırma ögelerinden birinde 'projectUrl' değeri eksik. atlanıyor..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "'github_releases' yapılandırma ögelerinden birinde 'token' değeri eksik. atlanıyor..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Grafikler için yalnızca PNG ve JPEG desteklenir, bulunan: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Yalnızca Play Store ile olan farkları yazdır" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Sadece bir tane anahtar \"env\" kabul edilir" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1325,10 +1325,6 @@ msgstr "Yalnızca kendiliğinden güncellemesi olan uygulamaları işle" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective bağış yöntemleri OpenCollective: alanında olmalı" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Seçenekler" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "APK'den sonra adlandırılmış dosyaya JSON raporu yazdırın." @@ -1386,6 +1382,11 @@ msgstr "Depo imzalama anahtarı için anahtar deposunun konumu" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Kolay kopyala yapıştır için gizli değişkeni terminale yaz" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Yerel ayarınız ({country_code}) baz alınarak gizlilik kipi etkinleştirildi." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1472,6 +1473,15 @@ msgstr "{apkfilename} önbellekten okunuyor" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Tarayıcı kurallarını ve imzalarını ağdan yenile ve önbelleğe al" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "'{path}' imzalanması reddedildi, dosya hem {dir1} hem de {dir2} dizininde yer alıyor." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Başarıyla doğrulanmışsa, kaynak sıkıştırılmış dosyayı ve var olan bütün APK'ları kaldır." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Belirtilen dosyalar kaldırılıyor" @@ -1485,13 +1495,10 @@ msgstr "\"{path}\" kaldırılıyor" msgid "Rename APK files that do not match package.name_123.apk" msgstr "paket.adı_123.apk örüntüsüyle eşleşmeyen tüm APK dosyalarını yeniden adlandır" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "RepoTrunk güncelleme modu yalnızca git-svn depolarında anlamlıdır" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Sıfırla ve yeni bir inşa sunucusu yarat, var olan iyi görünüyor olsa bile." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1506,6 +1513,11 @@ msgstr "Piksel boyut sınırını aşan tüm simgeleri yeniden boyutlandır ve msgid "Restrict output to warnings and errors" msgstr "Çıkışı uyarılara ve hatalara kısıtla" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Başarısız indirme tekrar deneniyor: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Tüm üst veri dosyalarını yeniden yaz" @@ -1522,7 +1534,7 @@ msgstr "Değişiklikleri olmayan git repo üzerinde çalış" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "-debug.apk'yı bulmak için {cibase} üzerinden çalıştırın ve {repo_basedir} repo_basedir'i atlayın" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1571,6 +1583,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "Tarayıcı {} sorun buldu" msgstr[1] "Tarayıcı {} sorun buldu" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "APK'daki ekstra imzalama blokları taranıyor." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Bilinen özgür olmayan sınıflar için dexdump ile APK taranıyor." @@ -1691,6 +1707,10 @@ msgstr "git-svn'de etiket güncelleme modu kullanıldı, ancak depo etiketlerle msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Sınama kipi - çıkışı sadece tmp dizinine koy, ve her zaman inşa et, çıkış zaten var olsa bile." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "\"qrcode\" Python paketi kurulu değil (yüklemek için: apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1763,9 +1783,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Awsbucket kullanmak için, awssecretkey ve awsaccesskeyid de config.yml içinde ayarlanmalı!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Awsbucket kullanmak için, awssecretkey ve awsaccesskeyid de config.yml içinde ayarlanmalı!" +msgstr "rclone kullanmak için, rclone_config ve awsbucket config.yml içinde ayarlanmalı!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1788,11 +1807,6 @@ msgstr "Beklenmeyen lisans etiketi \"{}\"! Yalnızca https://spdx.org/license-li msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Beklenmeyen lisans etiketi \"{}\"! Yalnızca yapılandırma dosyanızda yapılandırılan lisans etiketlerini kullanın" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Beklenmeyen sembolik bağlantı hedefi: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1802,7 +1816,6 @@ msgstr "{configname} içinde bilinmeyen girdi {key}" msgid "Unknown exception found!" msgstr "Bilinmeyen istisna bulundu!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1840,6 +1853,7 @@ msgstr "'{path}'deki tanınmayan uygulama alanı '{fieldname}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "'{path}'de tanınmayan yapı bayrağı '{build_flag}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1870,11 +1884,6 @@ msgstr "Kullanılmayan scandelete yolu: %s" msgid "Unused scanignore path: %s" msgstr "Kullanılmayan scanignore yolu: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "%s konumuna çıkarılıyor" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Yeni paketler için depo bilgisini güncelle" @@ -1888,6 +1897,7 @@ msgstr "Bir URL için çalıştırılabilir şeffaflık günlüğünü güncelle msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData geçersiz URL'ye sahip: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1907,11 +1917,7 @@ msgstr "UpdateCheckData geçerli bir URL değil: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName bilinen uygulama kimliğine ayarlı - kaldırılabilir" @@ -1926,27 +1932,10 @@ msgstr "{apkfilename}, androidobservatory.org'a yükleniyor" msgid "Uploading {apkfilename} to virustotal" msgstr "{apkfilename} virustotal'e yükleniyor" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Kullanım" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Kullanım: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Öntanımlı daldaki bir dosyaya işaret etmek için /master veya /main yerine /HEAD kullanın" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Öntanımlı daldaki bir dosyaya işaret etmek için /master yerine /HEAD kullanın" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Onu oluşturmak için `fdroid update -c` kullanın." @@ -1965,9 +1954,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "s3cmd yapılandırması için \"{path}\" kullanılıyor." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "s3cmd yapılandırması için \"{path}\" kullanılıyor." +msgstr "Uzak depolama ile eşitlemek için \"{path}\" kullanılıyor." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1985,11 +1974,6 @@ msgstr "JAR İmza kullanılıyor" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Java'nın jarsigner'ı kullanılıyor, APK'ları doğrulamak için önerilmez! apksigner'ı kullanın" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "\"{path}\" adresinden androguard'ı kullanıyor" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2001,9 +1985,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Var olan anahtar deposu \"{path}\" kullanılıyor" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "{url} ile eşitleme için s3cmd kullanılıyor" +msgstr "{url} ile eşitleme için rclone kullanılıyor" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2026,15 +2010,28 @@ msgstr "İndirilen paketlerin bütünlüğünü doğrula" msgid "Verifying index signature:" msgstr "İndeks imzası doğrulanıyor:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "{path} paketi apksigner ile doğrulanıyor." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API anahtarı 32MB'den büyük dosyaları yükleyemiyor, {path} yüklemek için {url} kullanın." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Olası üst veri hataları hakkında uyar" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly ikilik dosyası" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "İmzalı indeksler için yapılandırıldığında, bu aşamada sadece imzasız indeksleri yarat" @@ -2047,6 +2044,14 @@ msgstr "Tüm depo denetlenirken yamllint öntanımlı olarak devre dışı bıra msgid "When signing or verifying fails, exit with an error code." msgstr "İmzalama veya doğrulama başarısız olduğunda, bir hata koduyla çık." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "F-Droid.apk'nın adb aracılığıyla indirilmesini ve yüklenmesini ister misiniz? (EVET/hayır)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Uygulamaları f-droid.org adresinden indirmek ister misiniz? (EVET/hayır)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır" @@ -2059,6 +2064,11 @@ msgstr "SDK'nızın konumunu ayarlamak için ANDROID_HOME'u kullanabilirsiniz:" msgid "ZIP file archive" msgstr "ZIP dosya arşivi" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb {serial} için {status} durumunu veriyor!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2069,19 +2079,15 @@ msgstr "IdentityFile {path} konumuna ekleniyor" msgid "adding to {name}: {path}" msgstr "{name} adına ekleniyor: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "belirsiz şeçenek: %(option)s ile %(matches)s eşleşebilir" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "belirsiz şeçenek: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2091,11 +2097,13 @@ msgstr "apksigner bulunamadı! Modern APK'lar imzalanamıyor veya doğrulanamıy msgid "apksigner not found, it's required for signing!" msgstr "apksigner bulunamadı, imzalamak için gereklidir!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "üzerinde işlem yapılacak dosyanın uygulama kimliği" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2106,8 +2114,6 @@ msgstr "UYGULAMA_KİMLİĞİ[:SÜRÜM_KODU] biçiminde isteğe bağlı versionCo msgid "archive_url needs to end with /archive" msgstr "archive_url'nin /archive ile bitmesi gerekiyor" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2126,7 +2132,7 @@ msgstr "Dağıtım anahtarını sınamak için çıplak SSH bağlantısı deneni msgid "can not parse scrlib spec (not a string): '{}'" msgstr "scrlib belirtimi ayrıştırılamıyor (bir dizge değil): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "'%(filename)s' açılamıyor: %(error)s" @@ -2140,14 +2146,10 @@ msgstr "https olmayan url açılamıyor: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "gerekli srclibs bulunamıyor: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "birden çok alt-ayrıştırıcı argümanı verilemez" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2166,14 +2168,6 @@ msgstr "{url} klonlanıyor" msgid "commands from plugin modules:" msgstr "eklenti modüllerinden komutlar:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "karmaşık" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2204,10 +2198,6 @@ msgstr "srclib belirtimi ayrıştırılamadı (ad belirtilmedi): '{}'" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "srclib belirtimi ayrıştırılamadı (çok fazla '@' işareti): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2225,15 +2215,13 @@ msgstr "siliniyor: repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "kilitsiz bağımlılık dosyası" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "{path} işlem günlüğü {dest}'e dağıtıldı" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2251,8 +2239,6 @@ msgstr "'{}' tarayıcı imzalarının indirilmesi başarısız oldu" msgid "executable binary, possibly code" msgstr "çalıştırılabilir ikili dosya, muhtemelen kod" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2260,20 +2246,14 @@ msgid_plural "expected %s arguments" msgstr[0] "beklenen %s argümandı" msgstr[1] "beklenen %s argümandı" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "beklenen en az bir argümandı" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "beklenen en çok bir argümandı" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "beklenen bir argümandı" @@ -2286,10 +2266,6 @@ msgstr "fdroid [] [-h|--help|--version|]" msgid "fetch the latest version of signatures from the web" msgstr "imzaların en son sürümünü internetten al" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "kayan nokta" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "üst veri hatalarının (öntanımlı) uyarı olmasını veya yok sayılmasını zorunlu kıl." @@ -2302,8 +2278,6 @@ msgstr "git svn clone başarısız" msgid "gzip file archive" msgstr "gzip dosya arşivi" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2317,35 +2291,21 @@ msgstr "index-v1 bir imzaya sahip olmalı, oluşturmak için `fdroid signindex` msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 bir imzaya sahip olmalı, oluşturmak için `fdroid signindex` kullanın!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "tamsayı" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "geçersiz %(type)s değeri: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "geçersiz seçim: %(value)r (%(choices)s içinden seçin)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "geçersiz conflict_resolution değeri: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2383,8 +2343,6 @@ msgstr "Yansıma '%s' 'fdroid' ile bitmiyor!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "yansı iki defa ayarlandı, config.yml ve {path} içinde!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "birbirinden bağımsız argümanlar isteğe bağlı olmalıdır" @@ -2403,30 +2361,15 @@ msgstr "{appid} içinde simge yok" msgid "no APK supplied" msgstr "APK sağlanmadı" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "böyle bir şeçenek yok: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "Sürüm bilgisi bulunamadı!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "sürüm bilgisi bulunamadı" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "argüman %s ile izin verilmez" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2436,72 +2379,6 @@ msgstr "%s argümanlarından biri gerekli" msgid "only accepts strings, lists, and tuples" msgstr "yalnızca dizgileri, listeleri ve demetleri (tuple) kabul eder" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "seçenek %s: Tüm imzalı uygulamaları gerçekten kurmak istiyorsanız, --all kullanın" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "seçenek %s: geçersiz %s değeri: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "seçenek %s: geçersiz seçim: %r (%s içinden seçin)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "-%s seçeneği tanınmıyor" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "-%s seçeneği argüman gerektirir" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "--%s seçeneğinin argümanı olmamalı" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "--%s seçeneği tekil ön ek değil" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "--%s seçeneği tanınmıyor" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "--%s seçeneği argüman gerektirir" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "isteğe bağlı argümanlar" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "seçenekler" @@ -2511,8 +2388,6 @@ msgstr "seçenekler" msgid "overwriting existing {path}" msgstr "var olan {path} üzerine yazılıyor" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "konumsal argümanlar" @@ -2545,19 +2420,15 @@ msgstr "repo_url'nin /repo ile bitmesi gerekiyor" msgid "rsync is missing or broken: {error}" msgstr "rsync eksik veya bozuk: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml kurulu değil, üst veriler yazılamıyor." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd sync {path} konumunu {url} adresine indeksler ve siler" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd sync {path} konumunu {url} adresine indeksler ve siler" +msgstr "s3cmd {path} ile {url} arasındaki dizinleri indeksler ve kaldırılanları siler" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2572,17 +2443,7 @@ msgstr "serverwebroot: yol \"fdroid\" ile sonlanmıyor, belki de bunlardan birin msgid "shared library" msgstr "paylaşımlı kütüphane" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "programın sürüm numarasını göster ve çık" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "bu yardım yazısını göster ve çık" @@ -2616,29 +2477,25 @@ msgstr "statik kütüphane" msgid "supplied reference binary has allowed signer {signer}" msgstr "sağlanan referans ikilisi {signer} imzalayana izin verdi" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "şu argümanlar gerekli: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "doğru" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "beklenmeyen seçenek satırı: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "bilinmeyen ayrıştırıcı %(parser_name)r (seçenekler: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2649,9 +2506,7 @@ msgstr "tanınmayan argümanlar: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' üzerinde güvenli olmayan izinler (0600 olmalı)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "kullanım: " @@ -2664,6 +2519,10 @@ msgstr "{url} ile eşitleme için Apache libcloud kullanılıyor" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com hızı sınırlıyor, yeniden deneme bekleniyor..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "evet" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2676,21 +2535,19 @@ msgstr[1] "{0} uygulama, {1} anahtar adı" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename}{appid} üst verisi yok!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} içinde birden çok {name} dosyası var, Master Key istisamarı gibi görünüyor!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} içindeki AndroidManifest.xml tarihi bozuk: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} bir ada sahip değil! Bunun yerine uygulama kimliği kullanılıyor." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2711,7 +2568,6 @@ msgstr "{appid} hem APK hem de dosyalara sahip: {files}" msgid "{appid} is missing {name}" msgstr "{appid} içinde {name} eksik" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2752,10 +2608,10 @@ msgstr "{file} boş veya bozuk!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" yok! config.yml içinde düzeltin." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} kullanımdan kaldırıldı, {newfile} kullanın" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1}, {path2} 'in bir kopyasıdır, birini kaldırın!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2777,6 +2633,11 @@ msgstr "{path} konumunun bozuk imzası \"{pattern}\" var, olası Janus istismar msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} virustotal tarafından {count} defa işaretlendi:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} yanlış {fingerprint} parmak izine sahip!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/tzm/LC_MESSAGES/fdroidserver.po b/locale/tzm/LC_MESSAGES/fdroidserver.po index 8654ee12..fcfc7527 100644 --- a/locale/tzm/LC_MESSAGES/fdroidserver.po +++ b/locale/tzm/LC_MESSAGES/fdroidserver.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.1-681-gc19e8952\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2020-10-29 08:32+0000\n" "Last-Translator: Hakim Oubouali \n" "Language-Team: Central Atlas Tamazight \n" @@ -34,6 +34,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -44,11 +48,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -74,17 +73,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -100,14 +88,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [tidɣrin]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -128,13 +108,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -155,8 +128,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -170,11 +141,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -185,7 +151,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -195,13 +161,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -292,10 +260,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -322,6 +286,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -331,7 +303,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -382,16 +353,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "" @@ -414,6 +392,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -427,6 +409,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -436,20 +422,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -469,6 +452,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -495,6 +479,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -557,11 +546,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -610,13 +594,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -652,12 +635,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -667,6 +644,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -684,6 +681,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -700,6 +706,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -769,10 +779,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -804,7 +810,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -869,15 +874,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -922,6 +925,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1007,16 +1015,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1129,6 +1133,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1158,6 +1167,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1218,7 +1231,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1253,7 +1265,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1271,13 +1282,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1288,10 +1313,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Tidɣrin" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1349,6 +1370,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1435,6 +1461,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1448,12 +1483,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1469,6 +1501,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1482,6 +1519,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1529,6 +1571,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1649,6 +1695,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1713,6 +1763,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1734,11 +1788,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1748,7 +1797,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1786,6 +1834,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1816,11 +1865,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1834,6 +1878,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1853,11 +1898,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1872,27 +1913,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1910,6 +1934,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1926,11 +1955,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1941,6 +1965,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1962,15 +1991,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1983,6 +2025,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1995,6 +2045,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2005,18 +2060,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2027,11 +2078,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2042,8 +2095,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2062,7 +2113,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2076,14 +2127,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2102,14 +2149,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2140,10 +2179,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2159,13 +2194,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2183,8 +2220,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2192,20 +2227,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2218,10 +2247,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2234,8 +2259,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2249,35 +2272,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2315,8 +2324,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2335,30 +2342,15 @@ msgstr "" msgid "no APK supplied" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2368,72 +2360,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2444,8 +2370,6 @@ msgstr "Tidɣrin" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2478,13 +2402,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2500,17 +2425,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "Smal taleqqemt n uhil, tffeɣd" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2544,29 +2459,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2577,9 +2488,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2592,6 +2501,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2604,21 +2517,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2639,7 +2550,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2680,9 +2590,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2705,6 +2615,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/ug/LC_MESSAGES/fdroidserver.po b/locale/ug/LC_MESSAGES/fdroidserver.po index 4d96c43c..82346c03 100644 --- a/locale/ug/LC_MESSAGES/fdroidserver.po +++ b/locale/ug/LC_MESSAGES/fdroidserver.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: fdroidserver 1.0.0-95-gd7af22b\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-05-13 13:50+0200\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" "PO-Revision-Date: 2018-06-08 03:44+0000\n" "Last-Translator: ۋولقان \n" "Language-Team: Uyghur \n" @@ -35,6 +35,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -45,11 +49,6 @@ msgstr "" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -75,17 +74,6 @@ msgstr "" msgid "\"{url}\" is not a valid URL!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "" -msgstr[1] "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -101,14 +89,6 @@ msgstr "" msgid "%d problems found" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -129,13 +109,6 @@ msgstr "" msgid "%s is not an accepted build field" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "" @@ -156,8 +129,6 @@ msgstr "" msgid "'repo_keyalias' not found in config.yml!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "" @@ -171,11 +142,6 @@ msgstr "" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -186,7 +152,7 @@ msgstr "" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "" @@ -196,13 +162,15 @@ msgstr "" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr "" @@ -293,10 +261,6 @@ msgstr "" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "" @@ -323,6 +287,14 @@ msgstr "" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -332,7 +304,6 @@ msgstr "" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -383,16 +354,23 @@ msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, fuzzy, python-format msgid "Categories '%s' is not valid" msgstr "تۈرلەر قۇرۇلمىغان '%s'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "تۈرلەر قۇرۇلمىغان" @@ -415,6 +393,10 @@ msgstr "" msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "" @@ -428,6 +410,10 @@ msgstr "" msgid "Commit changes" msgstr "" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -437,20 +423,17 @@ msgstr "" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "" @@ -470,6 +453,7 @@ msgstr "" msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "" @@ -496,6 +480,11 @@ msgstr "" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "" @@ -558,11 +547,6 @@ msgstr "" msgid "Description has a duplicate line" msgstr "" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -611,13 +595,12 @@ msgstr "" msgid "Don't use rsync checksums" msgstr "" -#: ../fdroidserver/__main__.py -msgid "Download complete mirrors of small repos" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" +#: ../fdroidserver/__main__.py +msgid "Download complete mirrors of small repos" msgstr "" #: ../fdroidserver/common.py @@ -653,12 +636,6 @@ msgstr "" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "" @@ -668,6 +645,26 @@ msgstr "" msgid "ERROR: unsupported git host \"%s\", patches welcome!" msgstr "" +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" +msgstr "" + #: ../fdroidserver/__main__.py #, python-brace-format msgid "Encoding is set to '{enc}' fdroid might run into encoding issues. Please set it to 'UTF-8' for best results." @@ -685,6 +682,15 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" msgstr "" @@ -701,6 +707,10 @@ msgstr "" msgid "Extract signatures from APKs" msgstr "" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -770,10 +780,6 @@ msgstr "" msgid "Finished" msgstr "" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "" @@ -805,7 +811,6 @@ msgstr "" msgid "Found invalid appids in arguments" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "" @@ -870,15 +875,13 @@ msgstr "" msgid "Git fetch failed" msgstr "" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "" @@ -923,6 +926,11 @@ msgstr "" msgid "Ignoring bad element in manifest: %s" msgstr "" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "" @@ -1008,16 +1016,12 @@ msgstr "" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "{appid} ئىچىدە \"سىنبەلگە\" تېپىلمىدى" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "" @@ -1130,6 +1134,11 @@ msgstr "" msgid "Max recursion depth in ZIP file reached: %s" msgstr "" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "" @@ -1159,6 +1168,10 @@ msgstr "" msgid "No attached devices found" msgstr "" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "" @@ -1219,7 +1232,6 @@ msgstr "" msgid "No such package: %s" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1255,7 +1267,6 @@ msgstr "" msgid "Now set these in config.yml:" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1273,13 +1284,27 @@ msgstr "" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." +msgstr "" + +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "" + +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" msgstr "" #: ../fdroidserver/checkupdates.py @@ -1290,10 +1315,6 @@ msgstr "" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "" @@ -1351,6 +1372,11 @@ msgstr "" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1437,6 +1463,15 @@ msgstr "" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "" @@ -1450,12 +1485,9 @@ msgstr "" msgid "Rename APK files that do not match package.name_123.apk" msgstr "" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" #: ../fdroidserver/nightly.py @@ -1471,6 +1503,11 @@ msgstr "" msgid "Restrict output to warnings and errors" msgstr "" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "" @@ -1484,6 +1521,11 @@ msgstr "" msgid "Run on git repo that has uncommitted changes" msgstr "" +#: ../fdroidserver/nightly.py +#, python-brace-format +msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" +msgstr "" + #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" msgstr "" @@ -1531,6 +1573,10 @@ msgid_plural "Scanner found {} problems" msgstr[0] "" msgstr[1] "" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "" @@ -1651,6 +1697,10 @@ msgstr "" msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1715,6 +1765,10 @@ msgstr "" msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" msgstr "" +#: ../fdroidserver/deploy.py +msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" +msgstr "" + #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" msgstr "" @@ -1736,11 +1790,6 @@ msgstr "" msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1750,7 +1799,6 @@ msgstr "" msgid "Unknown exception found!" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1788,6 +1836,7 @@ msgstr "" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1818,11 +1867,6 @@ msgstr "" msgid "Unused scanignore path: %s" msgstr "" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "" @@ -1836,6 +1880,7 @@ msgstr "" msgid "UpdateCheckData has invalid URL: {url}" msgstr "" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1855,11 +1900,7 @@ msgstr "" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "" @@ -1874,27 +1915,10 @@ msgstr "" msgid "Uploading {apkfilename} to virustotal" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "" @@ -1912,6 +1936,11 @@ msgstr "" msgid "Using \"{path}\" for configuring s3cmd." msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using \"{path}\" for syncing with remote storage." +msgstr "" + #: ../fdroidserver/common.py msgid "Using APK Signature v2" msgstr "" @@ -1928,11 +1957,6 @@ msgstr "" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -1943,6 +1967,11 @@ msgstr "" msgid "Using existing keystore \"{path}\"" msgstr "" +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "Using rclone to sync with: {url}" +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "Using s3cmd to sync with: {url}" @@ -1964,15 +1993,28 @@ msgstr "" msgid "Verifying index signature:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "" @@ -1985,6 +2027,14 @@ msgstr "" msgid "When signing or verifying fails, exit with an error code." msgstr "" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "" @@ -1997,6 +2047,11 @@ msgstr "" msgid "ZIP file archive" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2007,18 +2062,14 @@ msgstr "" msgid "adding to {name}: {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." msgstr "" #: ../fdroidserver/common.py @@ -2029,11 +2080,13 @@ msgstr "" msgid "apksigner not found, it's required for signing!" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2044,8 +2097,6 @@ msgstr "" msgid "archive_url needs to end with /archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2064,7 +2115,7 @@ msgstr "" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "" @@ -2078,14 +2129,10 @@ msgstr "" msgid "cannot find required srclibs: \"{path}\"" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2104,14 +2151,6 @@ msgstr "" msgid "commands from plugin modules:" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2142,10 +2181,6 @@ msgstr "" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2161,13 +2196,15 @@ msgstr "" msgid "deleting: repo/{apkfilename}" msgstr "" +#: ../fdroidserver/scanner.py +msgid "dependency file without lock" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2185,8 +2222,6 @@ msgstr "" msgid "executable binary, possibly code" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2194,20 +2229,14 @@ msgid_plural "expected %s arguments" msgstr[0] "" msgstr[1] "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "" @@ -2220,10 +2249,6 @@ msgstr "" msgid "fetch the latest version of signatures from the web" msgstr "" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "" @@ -2236,8 +2261,6 @@ msgstr "" msgid "gzip file archive" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2251,35 +2274,21 @@ msgstr "" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2317,8 +2326,6 @@ msgstr "" msgid "mirrors set twice, in config.yml and {path}!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "" @@ -2337,31 +2344,16 @@ msgstr "{appid} ئىچىدە \"سىنبەلگە\" تېپىلمىدى" msgid "no APK supplied" msgstr "ھېچقانداق APK تەمىنلەنمىگەن" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "نەشىر ئۇچۇرى تېپىلمىدى!" - #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "نەشىر ئۇچۇرى تېپىلمىدى!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2371,72 +2363,6 @@ msgstr "" msgid "only accepts strings, lists, and tuples" msgstr "" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "" @@ -2446,8 +2372,6 @@ msgstr "" msgid "overwriting existing {path}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "" @@ -2480,13 +2404,14 @@ msgstr "" msgid "rsync is missing or broken: {error}" msgstr "" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." +#: ../fdroidserver/deploy.py +#, python-brace-format +msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "" #: ../fdroidserver/deploy.py #, python-brace-format -msgid "s3cmd sync indexes {path} to {url} and delete" +msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" msgstr "" #: ../fdroidserver/scanner.py @@ -2502,17 +2427,7 @@ msgstr "" msgid "shared library" msgstr "" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "" @@ -2546,29 +2461,25 @@ msgstr "" msgid "supplied reference binary has allowed signer {signer}" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2579,9 +2490,7 @@ msgstr "" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "" @@ -2594,6 +2503,10 @@ msgstr "" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "" +#: ../fdroidserver/install.py +msgid "yes" +msgstr "" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2606,21 +2519,19 @@ msgstr[1] "" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2641,7 +2552,6 @@ msgstr "" msgid "{appid} is missing {name}" msgstr "" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2682,9 +2592,9 @@ msgstr "" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" msgstr "" #: ../fdroidserver/import_subcommand.py @@ -2707,6 +2617,11 @@ msgstr "" msgid "{path} has been flagged by virustotal {count} times:" msgstr "" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/uk/LC_MESSAGES/fdroidserver.po b/locale/uk/LC_MESSAGES/fdroidserver.po index 3ed4a40a..822f3358 100644 --- a/locale/uk/LC_MESSAGES/fdroidserver.po +++ b/locale/uk/LC_MESSAGES/fdroidserver.po @@ -2,7 +2,7 @@ # Copyright (C) YEAR Free Software Foundation, Inc. # Hans-Christoph Steiner , 2020. # ihor_ck , 2020. -# Ihor Hordiichuk , 2020, 2021, 2022, 2023, 2024. +# Ihor Hordiichuk , 2020, 2021, 2022, 2023, 2024, 2025. # Tymofij Lytvynenko , 2021. # DankXylese , 2021. # Dan , 2022. @@ -10,12 +10,15 @@ # Макар Разин , 2023. # Tymofii Lytvynenko , 2024. # Fqwe1 , 2024. +# Nazar , 2024. +# Максим Горпиніч , 2024. +# Максим Горпиніч , 2025. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-09-04 13:39+0000\n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-27 19:35+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -23,7 +26,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" -"X-Generator: Weblate 5.7.2-rc\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -47,6 +50,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" не має відповідного файлу метаданих!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "Ключ \"isPrimary\" не слід додавати до дзеркал!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -57,11 +64,6 @@ msgstr "\"local_copy_dir\" {path} не існує!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" вже встановлено на {dev}." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" містить застарілу {name}{version}" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -87,18 +89,6 @@ msgstr "«{path}» підписано не дозволеним ключем:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" є недійсною URL-адресою!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s параметр вимагає %(number)d аргумент" -msgstr[1] "%(option)s параметр вимагає %(number)d аргументи" -msgstr[2] "%(option)s параметр вимагає %(number)d аргументів" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -114,14 +104,6 @@ msgstr "%d APK не вдалося підписати або перевірит msgid "%d problems found" msgstr "%d знайдено проблем" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [параметри]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -142,13 +124,6 @@ msgstr "%s має неправильний SHA-256: %s" msgid "%s is not an accepted build field" msgstr "%s не є прийнятним полем для створення" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s параметр не приймає значення" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "'keypass' не знайдено в config.yml!" @@ -169,8 +144,6 @@ msgstr "'keystorepass' не знайдено в config.yml!" msgid "'repo_keyalias' not found in config.yml!" msgstr "'repo_keyalias' не знайдено в config.yml!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' недійсний аргумент для позицій" @@ -184,11 +157,6 @@ msgstr "'sdk_path' не встановлено в config.yml!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' занадто старий, fdroid вимагає build-tools-{version} або новіший!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' буде у довільному порядкові! Використовуйте () або [], якщо порядок є важливим!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -199,7 +167,7 @@ msgstr "'{path}' не вдалося виконати!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' має недійсний формат, це має бути словник!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' не є правильним {field} у {appid}. Правильний приклад: {pattern}" @@ -209,13 +177,15 @@ msgstr "'{value}' не є правильним {field} у {appid}. Правил msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' не є дійсним {field}, має бути {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request працює лише в одній програмі!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "... checkupdate не вдалося для {appid} : {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() не визначено" @@ -306,10 +276,6 @@ msgstr "Інструмент Android SDK {cmd} не знайдено!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "Програма має двійкові файли, але не має відповідних AllowedAPKSigningKeys для закріплення сертифіката." -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "Застосунок має NoSourceSince або ArchivePolicy «0 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "Застосунок має NoSourceSince або ArchivePolicy «0 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None" @@ -336,6 +302,14 @@ msgstr "Архівую {apkfilename} з неправильним підписо msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode з UpdateCheckMode: HTTP повинен мати шаблон." +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "Автоматичне ні для всіх підказок." + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "Автоматичне «так» на всі підказки." + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -345,7 +319,6 @@ msgstr "Неправильний тип запису \"{mirrortype}\" у кон msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "Базова URL-адреса для дзеркала може містити ключ підпису індексу за допомогою рядка запиту: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -397,16 +370,23 @@ msgstr[0] "Неможливо створити через {} помилку пі msgstr[1] "Неможливо створити через {} помилки під час сканування" msgstr[2] "Неможливо створити через {} помилок під час сканування" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "Не вдалося розпізнати {path}: {error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "Не вдалося перезаписати шлях \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "Категорія '%s' неприпустима" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "Категорії не встановлено" @@ -429,6 +409,10 @@ msgstr "Перевірка архівації на {appid} — apks:{integer}, k msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "Очистити оновлення - не використовує кеш, повторно обробляє всі APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "Розфарбуйте результат журналу" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "Список категорій, розділених комами." @@ -442,6 +426,10 @@ msgstr "Команда '%s' не визнана.\n" msgid "Commit changes" msgstr "Прийняти зміни" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "Зафіксуйте зміни, натисніть, а потім зробіть запит на злиття" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -451,20 +439,17 @@ msgstr "Конфлікт визначень \"{field}\" між .yml і лока msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "Конфліктні аргументи: \"---verbose\" і \"--quiet\" не можна вказати одночасно." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "Суперечливі файли налаштувань! Використання {newfile}, ігнорування {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "Не вдалося знайти '{command}' у вашій системі" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "Не вдалося знайти останню версію коду" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "Не вдалося знайти найновішу назву версії" @@ -484,6 +469,7 @@ msgstr "Не вдалося відкрити файл APK {path} для анал msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "Не вдалося проаналізувати розмір \"{size}\", неправильний тип \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "Не вдалося знайти ID застосунку" @@ -510,6 +496,11 @@ msgstr "Створено новий контейнер \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "Створення \"{path}\" для налаштування s3cmd." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "Створення порожнього {config_file}" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "Створення каталогу журналу" @@ -572,11 +563,6 @@ msgstr "Опис '%s' є лише резюме застосунку" msgid "Description has a duplicate line" msgstr "Опис містить дублікат рядка" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "Опис містить список (%s) але не маркірований (*) і не пронумерований (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -625,15 +611,14 @@ msgstr "Не оновлюйте репозиторій, корисно під ч msgid "Don't use rsync checksums" msgstr "Не використовуйте контрольні суми rsync" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "Завантажуйте F-Droid.apk за допомогою дзеркал, які менше витікають у мережу" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "Завантажувати повноцінні дзеркала невеликих репозиторіїв" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "Завантаження %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "Завантаження репозиторію вже не вдалося, не намагайтеся знову." @@ -667,14 +652,6 @@ msgstr "ПОМИЛКА: %(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "ПОМИЛКА: Підкоманду \"server\" вилучено, використовуйте \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"ПОМИЛКА: ця команда ніколи не повинна використовуватися для створення дзеркала f-droid.org!\n" -"Повне дзеркало f-droid.org вимагає понад 200GB." - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "ПОМИЛКА: непідтримуваний вид CI, виправлення вітається!" @@ -687,12 +664,22 @@ msgstr "ПОМИЛКА: непідтримуваний git-хост «%s», ви #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "Помилка: {key} в {path} це не «архів» чи «репозиторій»!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "ПОМИЛКА: {key} недійсний ключ!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "ПОМИЛКА: значення {key} має бути типу {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "Помилка: {key}:{subkey} в {path} немає серед дозволених ключів: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -713,9 +700,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "Змінну середовища {var} від {configname} не налаштованоно!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "Змінна середовища {{env: {var}}} не встановлена!" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "Помилка розгортання 'github_releases', {} відсутній. (Можливо вам потрібно спочатку виконати `fdroid update`.)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -733,6 +725,10 @@ msgstr "Витяг метаданих застосунку з вихідного msgid "Extract signatures from APKs" msgstr "Експортування підписів з APK" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "F-Droid.apk не вдалося завантажити з жодного відомого джерела!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -802,10 +798,6 @@ msgstr "Файл зник під час його обробки: {path}" msgid "Finished" msgstr "Готово" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Належний до FlattrID метод допомоги Flattr: не вдалося" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "Заборонені мітки HTML" @@ -837,7 +829,6 @@ msgstr "Знайдено пошкоджений файл фінансуванн msgid "Found invalid appids in arguments" msgstr "Знайдено недійсні прикладні програми в аргументах" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "Знайдено недійсні версії коду для деяких застосунків" @@ -902,15 +893,13 @@ msgstr "Очистити Git невдалося" msgid "Git fetch failed" msgstr "Git вибірка не вдалася" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Не вдалося виконати Git prune" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Помилка налаштування remote set-head для Git: «%s»" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Скидання Git не вдалося" @@ -955,6 +944,11 @@ msgstr "Нехтування записом FUNDING.yml з датою після msgid "Ignoring bad element in manifest: %s" msgstr "Ігнорування поганого елемента в маніфесті: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "Ігноруючи застарілий {oldfile}, використовуйте {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "Нехтування пакунком без метаданих: " @@ -1040,16 +1034,12 @@ msgstr "Недійсна VercodeOperation: {field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "Недійсна VercodeOperation: {invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "Недійсний ID застосунку {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "Недійсний логічний '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "Недійсний розмічений список" @@ -1162,6 +1152,11 @@ msgstr "Несправний шлях serverwebroot:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "Досягнуто максимальної глибини рекурсії у ZIP-файлі: %s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "Конфігурація дзеркала для {url} містить ключ \"isPrimary\"!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "Дзеркало всього репозиторію та архіву всіх типів файлів." @@ -1191,6 +1186,10 @@ msgstr "Не знайдено Android SDK!" msgid "No attached devices found" msgstr "Не знайдено приєднаних пристроїв" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "Не знайдено пристроїв для `adb install`! Будь ласка, підключіть один." + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "Немає власного цифрового відбитка в URL-адресі." @@ -1251,7 +1250,6 @@ msgstr "У {path} не знайдено сертифікатів для підп msgid "No such package: %s" msgstr "Такого пакунка немає: %s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1286,7 +1284,6 @@ msgstr "Для {appid} нічого виконувати." msgid "Now set these in config.yml:" msgstr "Тепер встановіть їх у config.yml:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1304,26 +1301,28 @@ msgstr "Назва пакунка OBB не відповідає підтриму msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "Автономна машина, пропускання генерування дзеркал git до `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'packageNames'. пропущено ..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'projectUrl'. пропущено ..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "В одному з елементів конфігурації 'github_releases' відсутнє значення 'token'. пропущено ..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "Підтримуються лише PNG та JPEG зображення, знайдено: {path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "Показувати лише ті застосунки, версія яких відрізняється від версії з Play Store" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "Приймає лише один ключ \"env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1333,10 +1332,6 @@ msgstr "Обробляти застосунки лише за допомогою msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "Належний до OpenCollective метод допомоги OpenCollective: не вдалося" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "Параметри" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "Виведіть JSON-звіт у назві файлу APK." @@ -1394,6 +1389,11 @@ msgstr "Шлях до сховища ключів для підписного к msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "Вивести таємну змінну до термінала для легкого копіювання/вставлення" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "Режим конфіденційності було ввімкнено на основі вашої мови ({country_code})." + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1480,6 +1480,15 @@ msgstr "Читання {apkfilename} з кешу" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "Оновлення та кешування правил і сигнатур сканера з мережі" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "Відмова підписати '{path}', файл існує в теках {dir1} і {dir2}." + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "Видаліть вихідний архів та будь-які файли APK, якщо успішно перевірено." + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "Вилучення вказаних файлів" @@ -1493,13 +1502,10 @@ msgstr "Вилучення {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "Перейменування файлів APK, які не відповідають package.name_123.apk" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "Режим оновлення RepoTrunk має сенс лише в репозиторіях git-svn" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "Скиньте та створіть новий сервер збирання, навіть якщо з наявним усе гаразд." +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1514,6 +1520,11 @@ msgstr "Змінити розмір усіх піктограм, що перев msgid "Restrict output to warnings and errors" msgstr "Обмеження виводу на попередження і помилки" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "Повторна спроба невдалого завантаження: %s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "Перепишіть усі файли метаданих" @@ -1530,7 +1541,7 @@ msgstr "Запустити для git-репозиторію з неподани #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "Виконайте команду {cibase}, щоб знайти -debug.apk. і пропустіть repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1580,6 +1591,10 @@ msgstr[0] "Знайдено {} проблему" msgstr[1] "Знайдено {} проблеми" msgstr[2] "Знайдено {} проблем" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "Сканування APK на наявність додаткових блоків підпису." + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "Сканування APK за допомогою dexdump на наявність відомих невільних класів." @@ -1700,6 +1715,10 @@ msgstr "Режим оновлення тегів, який використов msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "Тестовий режим - надсилайте випуск лише в каталозі tmp і завжди створюйте його, навіть якщо випуск вже існує." +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "Пакет Python \"qrcode\" не встановлено (наприклад, apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1772,9 +1791,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "Для використання awsbucket, awssecretkey та awsaccesskeyid також слід налаштувати config.yml!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "Для використання awsbucket, awssecretkey та awsaccesskeyid також слід налаштувати config.yml!" +msgstr "Для використання rclone у файлі config.yml мають бути встановлені параметри rclone_config та awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1782,7 +1800,7 @@ msgstr "URL-адреса має починатися з https:// або http://" #: ../fdroidserver/lint.py msgid "URL shorteners should not be used" -msgstr "Скорочувачі URL-адрес не варто використовувати" +msgstr "Вкорочувачі URL-адрес не варто використовувати" #: ../fdroidserver/lint.py #, python-brace-format @@ -1797,11 +1815,6 @@ msgstr "Недійсна мітка ліцензії \"{}\"! Використо msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "Неочікувана мітка ліцензії \"{}\"! Використовуйте лише мітки ліцензій, налаштовані у файлі налаштувань" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "Неочікувана ціль символічного посилання: {link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1811,7 +1824,6 @@ msgstr "Невідомий запис {key} у {configname}" msgid "Unknown exception found!" msgstr "Виявлено невідому виняткову ситуацію!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1849,6 +1861,7 @@ msgstr "Нерозпізнане поле застосунку '{fieldname}' в msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "Нерозпізнаний прапорець збірки '{build_flag}' у '{path}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1879,11 +1892,6 @@ msgstr "Невикористаний шлях scandelete: %s" msgid "Unused scanignore path: %s" msgstr "Невикористаний шлях scanignore: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "Видобути в %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "Оновіть дані репозиторію для нових пакунків" @@ -1897,6 +1905,7 @@ msgstr "Оновити бінарний журнал прозорості для msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData має недійсну URL-адресу: {url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1916,11 +1925,7 @@ msgstr "UpdateCheckData не є дійсною URL-адресою: {url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode налаштовано, але схоже, що команду checkupdates ще не запущено." -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode встановлено, але схоже, що команду checkupdates ще не було запущено" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "Назву застосунку для перевірки оновлень встановлено на відомий ID застосунку — його можна буде вилучити" @@ -1935,27 +1940,10 @@ msgstr "Завантаження {apkfilename} на androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "Завантаження {apkfilename} до virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "Використання" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "Використання: %s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "Використовуйте /HEAD замість /master або /main, щоб вказати на файл у типовій гілці" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "Використовуйте /HEAD замість /master для вказання на файл типовій гілці" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "Використовуйте `fdroid update -c`, щоб створити файли метаданих." @@ -1974,9 +1962,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "Використання \"{path}\" для налаштування s3cmd." #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "Використання \"{path}\" для налаштування s3cmd." +msgstr "\"{path}\" використовується для синхронізації з віддаленим сховищем." #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -1994,11 +1982,6 @@ msgstr "Використання JAR-підпису" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "Не варто перевіряти APK за допомогою jarsigner Java! Користуйтеся apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "Використання androguard від \"{path}\"" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2010,9 +1993,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "Застосування наявного сховища ключів \"{path}\"" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "Використовувати s3cmd для синхронізації з: {url}" +msgstr "Використовується rsync для синхронізації з: {url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2035,15 +2018,28 @@ msgstr "Перевірте цілісність завантажених пак msgid "Verifying index signature:" msgstr "Перевірка підпису індексу:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "Перевірка пакета {path} за допомогою apksigner." + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "Ключ API VirusTotal не може завантажити файли, розмір яких понад 32 МБ, використовуйте {url} для завантаження {path}." +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "Попереджати про можливі помилки метаданих" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "Бінарний файл WebAssembly" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "Коли налаштовано для підписаних індексів, на цьому етапі створюйте лише непідписані індекси" @@ -2056,6 +2052,14 @@ msgstr "Під час перевірки всього репозиторію, ya msgid "When signing or verifying fails, exit with an error code." msgstr "Якщо підписати або перевірити не вдається, виходить з кодом помилки." +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "Бажаєте завантажити та встановити F-Droid.apk через adb? (ТАК/Ні)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "Бажаєте завантажити програму(и) з f-droid.org? (ТАК/Ні)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "X.509 'Distiguished Name' використовується під час створення ключів" @@ -2068,6 +2072,11 @@ msgstr "За допомогою ANDROID_HOME можна встановити ш msgid "ZIP file archive" msgstr "ZIP-архів" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb звітує {serial} як \"{status}\"!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2078,19 +2087,15 @@ msgstr "додавання IdentityFile до {path}" msgid "adding to {name}: {path}" msgstr "додавання до {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "неоднозначний параметр: %(option)s може відповідати %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "неоднозначний параметр: %s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "apksigner в інструментах побудови; {version} передає APK із недійсними підписами v3, ігноруючи." #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2100,11 +2105,13 @@ msgstr "apksigner не знайдено! Не вдалося підписати msgid "apksigner not found, it's required for signing!" msgstr "apksigner не знайдено, це потрібно для підписання!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "application ID файлу застосунку для роботи на" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2115,8 +2122,6 @@ msgstr "ID застосунку з необов'язковим versionCode у ф msgid "archive_url needs to end with /archive" msgstr "archive_url має закінчуватися на /archive" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2135,7 +2140,7 @@ msgstr "спроба відкритого з'єднання ssh для пере msgid "can not parse scrlib spec (not a string): '{}'" msgstr "не вдається проаналізувати специфікацію scrlib (не рядок): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "не вдалося відкрити «%(filename)s»: %(error)s" @@ -2149,14 +2154,10 @@ msgstr "не вдалося відкрити не-https url: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "не вдалося знайти потрібні srclibs: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "не може мати кілька аргументів підпарсера" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2175,14 +2176,6 @@ msgstr "клонування {url}" msgid "commands from plugin modules:" msgstr "команди з модулів плагіна:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "складний" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2214,10 +2207,6 @@ msgstr "не вдалося розібрати специфікацію srclib ( msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "не вдалося проаналізувати специфікацію srclib (посилання не вказано): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "не вдалося проаналізувати специфікацію srclib (занадто багато знаків '@'): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2235,15 +2224,13 @@ msgstr "видалення: репозиторій/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "файл залежності без блокування" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "розгорнуто журнал процесів {path} до {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2261,8 +2248,6 @@ msgstr "не вдалося завантажити підписи сканера msgid "executable binary, possibly code" msgstr "виконуваний двійковий файл, можливо, код" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" @@ -2271,20 +2256,14 @@ msgstr[0] "очікується %s аргумент" msgstr[1] "очікується %s аргументи" msgstr[2] "очікується %s аргументів" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "очікується хоча б один аргумент" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "очікується не більше одного аргументу" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "очікується один аргумент" @@ -2297,10 +2276,6 @@ msgstr "fdroid [<команда>] [-h|--help|--version|<аргументи>]" msgid "fetch the latest version of signatures from the web" msgstr "отримати останню версію підписів з інтернету" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "з комою, що плаває" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "показувати помилки метаданих (типово), як попередження, або нехтувати ними." @@ -2313,8 +2288,6 @@ msgstr "Не вдалося клонувати git svn" msgid "gzip file archive" msgstr "gzip-архів" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2328,35 +2301,21 @@ msgstr "index-v1 повинен мати підпис, використовуй msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 повинен мати підпис, використовуйте `fdroid signindex`, щоб створити його!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "ціле число" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "недійсне %(type)s значення: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "неправильний вибір: %(value)r (варто обрати з %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "недійсне значення conflict_resolution: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2394,8 +2353,6 @@ msgstr "дзеркало '%s' не закінчується на 'fdroid'!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "дзеркала задано двічі, в config.yml та {path}!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "взаємозаперечні аргументи повинні бути необов'язковими" @@ -2414,30 +2371,15 @@ msgstr "не має \"icon\" у {appid}" msgid "no APK supplied" msgstr "APK не надано" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "такого параметру немає: %s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "не вдалося визначити версію!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "не знайдено відомостей про версію" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "не дозволено з аргументом %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2447,72 +2389,6 @@ msgstr "потрібен один з аргументів %s" msgid "only accepts strings, lists, and tuples" msgstr "приймає лише рядки, списки та кортежі" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "параметр %s: Якщо ви дійсно хочете встановити всі підписані застосунки, використовуйте --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "параметр %s: недійсне %s значення: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "для параметра %s: неправильний вибір: %r (вибрати з %s)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "параметр -%s не розпізнано" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "параметр -%s потрібен аргумент" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "параметр --%s не має аргументу" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "параметр --%s не унікальний префікс" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "параметр --%s не визнано" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "параметр --%s потрібен аргумент" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "необов'язкові аргументи" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "параметри" @@ -2522,8 +2398,6 @@ msgstr "параметри" msgid "overwriting existing {path}" msgstr "перезаписування наявного шляху {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "позиційні аргументи" @@ -2556,19 +2430,15 @@ msgstr "repo_url повинен закінчуватися на /repo" msgid "rsync is missing or broken: {error}" msgstr "rsync відсутній або несправний: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml не встановлено, не вдається записати метадані." - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd синхронізувати індекси з {path} до {url} та видалити" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd синхронізувати індекси з {path} до {url} та видалити" +msgstr "s3cmd синхронізує індекси з {path} до {url} і видаляє вилучені" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2583,27 +2453,17 @@ msgstr "serverwebroot: шлях не закінчується на «fdroid», msgid "shared library" msgstr "спільна бібліотека" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "показати номер версії програми та вийти" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "показати довідку та вийти" #: ../fdroidserver/signatures.py msgid "signed APK, either a file-path or HTTPS URL." -msgstr "підписаний APK файл, шлях до файлу або URL-адреса HTTPS)." +msgstr "підписаний APK файл, шлях до файлу або URL-адреса HTTPS." #: ../fdroidserver/common.py msgid "skip deploying full build logs: log content is empty" -msgstr "пропустити розгортання усіх журналів збірки: журнал порожній" +msgstr "пропустити розгортання всіх журналів збірки: журнал порожній" #: ../fdroidserver/common.py msgid "skip deploying full build logs: not enabled in config" @@ -2627,29 +2487,25 @@ msgstr "статична бібліотека" msgid "supplied reference binary has allowed signer {signer}" msgstr "наданий еталонний двійковий файл дозволив підписувачу {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "такі аргументи зобов'язані: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "правда" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "неочікуваний рядок параметрів: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "невідомий парсер %(parser_name)r (варто вибрати: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2660,9 +2516,7 @@ msgstr "нерозпізнані аргументи: %s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "небезпечні дозволи на '{config_file}' (should be 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "використання: " @@ -2675,6 +2529,10 @@ msgstr "Apache libcloud: синхронізація з {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com обмежує швидкість, очікування повторної спроби..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "так" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2688,21 +2546,19 @@ msgstr[2] "{0} застосунків, {1} alias ключів" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) не має метаданих!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} має декілька {name} файлів, схоже на використання проблеми безпеки Master Key!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "AndroidManifest.xml застосунка {apkfilename} має неправильну дату: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "{appid} не має назви! Застосовуватиметься ID застосунку." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2723,7 +2579,6 @@ msgstr "{appid} має APK і файли: {files}" msgid "{appid} is missing {name}" msgstr "У {appid} немає {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2764,10 +2619,10 @@ msgstr "{file} порожній або пошкоджений!" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" не існує! Виправте його в \"config.yml\"." -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "{oldfile} вилучено, використовується {newfile}" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} є дублікатом {path2}, видаліть один з них!" #: ../fdroidserver/import_subcommand.py #, python-brace-format @@ -2789,6 +2644,11 @@ msgstr "{path}: недійсний підпис \"{pattern}\". Виглядає msgid "{path} has been flagged by virustotal {count} times:" msgstr "{path} було позначено virustotal {count} разів:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} має неправильний відбиток пальця ({fingerprint})!" + #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" diff --git a/locale/zh_Hans/LC_MESSAGES/fdroidserver.po b/locale/zh_Hans/LC_MESSAGES/fdroidserver.po index b1858e51..6bb2b142 100644 --- a/locale/zh_Hans/LC_MESSAGES/fdroidserver.po +++ b/locale/zh_Hans/LC_MESSAGES/fdroidserver.po @@ -30,22 +30,25 @@ # zhiqi , 2023. # David Jiang , 2023. # ALoLo_527 , 2024. -# 大王叫我来巡山 , 2024. +# 大王叫我来巡山 , 2024, 2025. # chumoer , 2024. +# Wang , 2024. +# Lily Chou , 2024. +# ygsk10 , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-09-03 15:47+0000\n" -"Last-Translator: linsui \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2025-03-26 10:00+0000\n" +"Last-Translator: 大王叫我来巡山 \n" "Language-Team: Chinese (Simplified Han script) \n" "Language: zh_Hans\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.8-dev\n" +"X-Generator: Weblate 5.11-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -69,6 +72,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s/\" 没有与之匹配的元数据文件!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "\"isPrimary\" 密钥不应被添加到镜像!" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -79,11 +86,6 @@ msgstr "\"local_copy_dir\" {path} 不存在!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "'{apkfilename}' 已安装在 {dev} 上." -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" 包含过时的 {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -109,16 +111,6 @@ msgstr "\"{path}\" 由不允许的密钥所签署:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" 不是有效的链接!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s 选项需要 %(number)d 个参数" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -134,14 +126,6 @@ msgstr "%d 个 APK 无法签名或验证!" msgid "%d problems found" msgstr "发现 %d 个问题" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [选项]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -162,13 +146,6 @@ msgstr "%s 的 SHA-256 值不正确:%s" msgid "%s is not an accepted build field" msgstr "%s 不是一个被接受的构建字段" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s 选项不采用参数" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "config.yml 中找不到 'keypass'!" @@ -189,8 +166,6 @@ msgstr "config.yml 中找不到 'keystorepass'!" msgid "'repo_keyalias' not found in config.yml!" msgstr "config.yml 中找不到 'repo_keyalias'!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "'required' 是位置的无效参数" @@ -204,11 +179,6 @@ msgstr "未在 config.yml 中设置 'sdk_path'!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' 太旧, F-Droid 需要 build-tools-{version} 或更新的版本!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "{field} 将随机排列! 如果顺序很重要, 请使用 () 或 [] 括号!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -219,7 +189,7 @@ msgstr "'{path}' 执行失败!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "'{path}' 是无效格式, 它应该是字典!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "'{value}' 不是 {appid} 之有效 {field}. 正则表达式: {pattern}" @@ -229,13 +199,15 @@ msgstr "'{value}' 不是 {appid} 之有效 {field}. 正则表达式: {pattern}" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "'{value}' 不是有效 {field},应为 {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "--merge-request 只运行在单个 appid 上!" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "…为 {appid} 检查更新失败: {error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() 未定义" @@ -326,10 +298,6 @@ msgstr "没找到 Android SDK 工具 {cmd}!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "应用具有二进制文件,但没有相应的AllowedAPKSigningKeys 来固定证书。" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "应用的 NoSourceSince 或 ArchivePolicy 为 “0 versions” 但 AutoUpdateMode 或 UpdateCheckMode 不是 None" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "APK 有 NoSourceSince 或 ArchivePolicy \"0 versions\" 或 0 但 AutoUpdateMode 或 UpdateCheckMode 不是 None" @@ -356,6 +324,14 @@ msgstr "正使用无效签名归档 {apkfilename}!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode 和 UpdateCheckMode:HTTP 必须有一个模式。" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "对所有提示自动回复 no。" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "对所有提示自动回复 yes。" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -365,7 +341,6 @@ msgstr "镜像配置中的错误条目类型“{mirrortype}”:{mirror}" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "镜像的基本链接可以使用此请求参数包含索引签名键: ?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -415,16 +390,23 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "因扫描时的{}错误而无法构建" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "读取 {path} 失败:{error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "无法重写 {path}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "类别 '%s' 无效" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "没有设置类别" @@ -447,6 +429,10 @@ msgstr "正为 {appid} 检查存档: 安装包: {integer}, 保留版本数: {kee msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "干净的更新 - 不使用缓存,重新处理全部 APK 文件" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "给日志输出添加颜色" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "逗号分割的目录列表。" @@ -460,6 +446,10 @@ msgstr "无法识别命令 '%s'。\n" msgid "Commit changes" msgstr "提交更改" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "提交改动、推动,然后提出合并请求" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" @@ -469,20 +459,17 @@ msgstr ".yml 和本地化文件之间的“{field}”定义冲突:" msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "冲突的参数: '--verbose' 和 '--quiet' 不能被同时使用." -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "冲突的配置文件! 使用 {newfile}, 忽略 {oldfile}!" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "在您的系统中无法找到 '{command}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "找不到最新版本代码" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "找不到最新的版本名" @@ -502,6 +489,7 @@ msgstr "无法打开 apk 文件 {path} 用于分析: " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "无法解析大小 \"{size}\", 错误类型 \"{type}\"" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "找不到应用ID" @@ -528,6 +516,11 @@ msgstr "创建新容器 \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "创建用于配置 s3cmd 的 \"{path}\"。" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Creating empty {config_file}" +msgstr "正在创建空的 {config_file} 文件" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "创建日志目录" @@ -590,11 +583,6 @@ msgstr "简介“%s”与应用的概括文字相同" msgid "Description has a duplicate line" msgstr "简介有重复行" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "简介中带有列表(%s),但它既不是子弹(*)形列表也不是编号(#)型列表" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -643,15 +631,14 @@ msgstr "不刷新资源库,便于没有互联网时的内部版本测试" msgid "Don't use rsync checksums" msgstr "请勿使用 rsync 校验和" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "使用向网络泄露较少信息的镜像下载 F-Droid apk" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "下载小型仓库的完整镜像" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "正在下载 %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "下载仓库已经失败了一次,不再尝试。" @@ -685,14 +672,6 @@ msgstr "错误:%(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "错误:\"server\" 子命令已被删除,请使用 \"deploy\"!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"错误:请不要使用此命令来镜像 f-droid.org!\n" -"对 f-droid.org 进行完整镜像至少需要超过 200GB 的储存空间。" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "错误:不支持的 CI 类型,欢迎提交补丁添加支持!" @@ -705,12 +684,22 @@ msgstr "错误:不支持的 git 主机类型 \"%s\",欢迎提交补丁添加 #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" -msgstr "" +msgstr "错误: {path}中的{key}不是“archive”或“repo”!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "错误:{key} 不是有效的密钥!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" +msgstr "错误:{key} 的值的类型应为 {t}!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "错误: {path}中的{key}:{subkey}不再被允许的值的范围内: {allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -731,9 +720,14 @@ msgstr "" msgid "Environment variable {var} from {configname} is not set!" msgstr "没有设置 {configname} 中的环境变量 {var}!" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "没有设置环境变量 {{env: {var}}} !" + #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "部署'github_releases'错误,{}没有出现。(你可能需要先运行`fdroid update`)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -751,6 +745,10 @@ msgstr "从源存储库中提取应用元数据" msgid "Extract signatures from APKs" msgstr "从 APK 中提取签名" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "无法从任何已知的来源下载 F-Droid apk!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -820,10 +818,6 @@ msgstr "文件在处理时消失: {path}" msgid "Finished" msgstr "已完成" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flattr 捐赠方法属于 FlattrID: 字段" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "禁止的HTML标签" @@ -855,7 +849,6 @@ msgstr "为“{name}”找到了错误的资金文件“{path}”:" msgid "Found invalid appids in arguments" msgstr "在参数中发现无效的appids" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "发现某些应用的版本代码无效" @@ -920,15 +913,13 @@ msgstr "Git clean 失败" msgid "Git fetch failed" msgstr "Git fetch 失败" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git prune 失败" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git remote set-head 失败:\"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git reset 失败" @@ -973,6 +964,11 @@ msgstr "忽略超过 2048 的 FUNDING.yml 条目:%s" msgid "Ignoring bad element in manifest: %s" msgstr "忽略清单中的错误元素: %s" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "正在忽略已弃用的 {oldfile} 文件,请使用 {newfile}!" + #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " msgstr "忽略没有元数据的包: " @@ -1058,16 +1054,12 @@ msgstr "无效的 VercodeOperation:{field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "无效的 VercodeOperation:{invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid application ID {appid}" msgstr "无效的应用 ID {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "无效的布尔值'%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "无效的项目符号列表" @@ -1180,6 +1172,11 @@ msgstr "格式错误的服务器网络根行:" msgid "Max recursion depth in ZIP file reached: %s" msgstr "达到 ZIP 文件中的最大递归深度:%s" +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" +msgstr "{url} 的镜像配置包含 \"isPrimary\" 密钥!" + #: ../fdroidserver/mirror.py msgid "Mirror the full repo and archive, all file types." msgstr "镜像完整存储库和存档,所有文件类型。" @@ -1209,6 +1206,10 @@ msgstr "未找到 Android SDK!" msgid "No attached devices found" msgstr "未找到连接的设备" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "没有找到 `adb install` 设备!请插入一台设备。" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "URL 中没有指纹。" @@ -1269,7 +1270,6 @@ msgstr "在 {path} 中找不到签名证书" msgid "No such package: %s" msgstr "没有这样的包:%s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1304,7 +1304,6 @@ msgstr "对 {appid} 无任何可操作。" msgid "Now set these in config.yml:" msgstr "现在在 config.yml 中设置这些:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1322,26 +1321,28 @@ msgstr "OBB 的软件包名称与受支持的 APK 不匹配:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "脱机计算机,跳过 git 镜像生成直到 `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "其中一个 'github_releases'配置项缺失'packageNames'值。跳过..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "其中一个 'github_releases'配置项缺失'projectUrl'值。跳过..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "其中一个 'github_releases'配置项缺失'token'值。跳过..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "图形仅支持 PNG 和 JPEG,发现:{path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "仅输出与 Play Store 的差异" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "只接受单一密钥 “env\"" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1351,10 +1352,6 @@ msgstr "仅处理使用自动更新的应用" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective 捐赠方法属于 OpenCollective: 字段" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "选项" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "将 JSON 报告输出到以 APK 命名的文件。" @@ -1412,6 +1409,11 @@ msgstr "资源库签名密钥的密钥存储(keystore)路径" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "将秘密变量打印到终端以便于复制/粘贴" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "根据你的语言环境({country_code})启用了隐私模式。" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" @@ -1498,6 +1500,15 @@ msgstr "从缓存读取 {apkfilename}" msgid "Refresh and cache scanner rules and signatures from the network" msgstr "刷新和缓存来自网络的扫描程序规则和签名" +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "拒绝签署 '{path}',文件同时存在于文件夹 {dir1} 和 {dir2}。" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." +msgstr "若验证成功删除源 tarball 和任何 APK 文件。" + #: ../fdroidserver/common.py msgid "Removing specified files" msgstr "删除指定文件" @@ -1511,13 +1522,10 @@ msgstr "删除 {path}\"" msgid "Rename APK files that do not match package.name_123.apk" msgstr "重命名文件名不符合 package.name_123.apk 的 APK 文件" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" -msgstr "RepoTrunk 更新模式仅对 git-svn 存储库有意义" - -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "即使已有服务器看起来运行正常,请重置并创建一个全新的编译服务器。" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." +msgstr "" #: ../fdroidserver/nightly.py #, python-brace-format @@ -1532,6 +1540,11 @@ msgstr "对超过像素大小上限的全部图标进行尺寸调整,然后退 msgid "Restrict output to warnings and errors" msgstr "仅输出警告和出错信息" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "正在重试失败的下载:%s" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "重写所有元数据文件" @@ -1548,7 +1561,7 @@ msgstr "在具有未提交更改的 git 存储库上运行" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "在{cibase}中挨个寻找 -debug.apk,并跳过了仓库目录{repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1596,6 +1609,10 @@ msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "扫描仪发现 {} 个问题" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "正在扫描 APK 是否有额外的签名块。" + #: ../fdroidserver/scanner.py msgid "Scanning APK with dexdump for known non-free classes." msgstr "使用 dexdump 扫描 APK 以查找已知的非自由类。" @@ -1716,6 +1733,10 @@ msgstr "git-svn 中使用的标记更新模式,但未使用标记设置存储 msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "测试模式:仅将输出保存至 tmp 目录,即使输出已存在,仍然编译。" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "\"qrcode\" Python 包未安装 (如 apt-get install python3-qrcode)!" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1788,9 +1809,8 @@ msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in con msgstr "要使用 awsbucket,还必须在 config.yml 中设置 awssecretkey 和 awsaccesskeyid!" #: ../fdroidserver/deploy.py -#, fuzzy msgid "To use rclone, rclone_config and awsbucket must be set in config.yml!" -msgstr "要使用 awsbucket,还必须在 config.yml 中设置 awssecretkey 和 awsaccesskeyid!" +msgstr "要使用 rclone,必须在 config.yml 中设置 rclone_config 和 awsbucket!" #: ../fdroidserver/lint.py msgid "URL must start with https:// or http://" @@ -1813,11 +1833,6 @@ msgstr "意外的许可证标签“{}”!仅使用来自 https://spdx.org/lice msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "意外的许可证标签“{}”!仅使用配置文件中配置的许可证标记" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "意外的符号链接目标:{link} -> {target}" - #: ../fdroidserver/common.py #, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1827,7 +1842,6 @@ msgstr "{configname} 中的未知条目 {key}" msgid "Unknown exception found!" msgstr "发生未知异常!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1865,6 +1879,7 @@ msgstr "'{path}' 中存在无法识别的应用栏目 '{fieldname}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "'{path}' 中有无法识别的构建 flag '{build_flag}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1895,11 +1910,6 @@ msgstr "未使用的扫描删除路径: %s" msgid "Unused scanignore path: %s" msgstr "未使用的扫描忽略路径: %s" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "解压缩到 %s" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "更新新包的存储库信息" @@ -1913,6 +1923,7 @@ msgstr "更新 URL 的二进制透明度日志" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData 具有无效的 URL:{url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" @@ -1932,11 +1943,7 @@ msgstr "UpdateCheckData 不是有效的网址:{url}" msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." msgstr "UpdateCheckMode 已设置,但看起来尚未运行检查更新。" -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "UpdateCheckMode 已设置,但看起来尚未运行检查更新" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py msgid "UpdateCheckName is set to the known application ID, it can be removed" msgstr "UpdateCheckName 已设置为已知的应用 ID,可以将其删除" @@ -1951,27 +1958,10 @@ msgstr "上传 {apkfilename} 到 androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "上传 {apkfilename} 到 virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "使用" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "用法:%s\n" - #: ../fdroidserver/lint.py msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "使用 /HEAD 而不是 /master 或 /main 来指向默认分支中的文件" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "使用 /HEAD 而不是 /master 指向默认分支中的文件" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "使用 `fdroid update -c` 命令以创建它。" @@ -1990,9 +1980,9 @@ msgid "Using \"{path}\" for configuring s3cmd." msgstr "使用“{path}”配置 s3cmd。" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using \"{path}\" for syncing with remote storage." -msgstr "使用“{path}”配置 s3cmd。" +msgstr "使用 \"{path}\" 用于和远程存储同步。" #: ../fdroidserver/common.py msgid "Using APK Signature v2" @@ -2010,11 +2000,6 @@ msgstr "使用 JAR 签名" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "不建议使用 Java 的 jar 签名器来验证 APK!使用 apk 签名器" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "使用 {path} 中的 androguard" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" @@ -2026,9 +2011,9 @@ msgid "Using existing keystore \"{path}\"" msgstr "使用现有密钥库“{path}”" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Using rclone to sync with: {url}" -msgstr "正使用 s3cmd 与 {url} 同步" +msgstr "使用 rclone 进行同步:{url}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2051,27 +2036,48 @@ msgstr "验证已下载包的完整性" msgid "Verifying index signature:" msgstr "验证目录签名中:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "使用 apksigner 验证包 {path}。" + #: ../fdroidserver/deploy.py #, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal 的 API 密钥无法用于上传大于 32MB 的文件,请使用 {url} 上传 {path}。" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "警告元数据中可能存在的错误" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly 二进制文件" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "如果已配置为使用签名索引,该阶段仅创建未签名索引" #: ../fdroidserver/lint.py msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless." -msgstr "对整个版本库进行着色时,默认禁用 yamllint。 无论如何,该选项都会强制 yamllint。" +msgstr "对整个版本库进行 lint 时,默认禁用 yamllint。 无论如何,该选项都会强制 yamllint。" #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." msgstr "签名或验证失败时,退出并显示错误代码。" +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "你要通过 adb 下载并安装 F-Droid apk 吗?(YES/no)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "你要从 f-droid 下载应用吗?(YES/no)" + #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" msgstr "生成密钥时使用了X.509 ‘可识别名’" @@ -2084,6 +2090,11 @@ msgstr "您可以使用 ANDROID_HOME 设置 SDK 的路径,也就是说:" msgid "ZIP file archive" msgstr "ZIP 压缩包" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb 报告 {serial} 为 \"{status}\"状态!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2094,19 +2105,15 @@ msgstr "将 IdentityFile 添加到 {path}" msgid "adding to {name}: {path}" msgstr "添加到 {name}: {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "模糊的选项:%(option)s 可以相配 %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "模糊的选项:%s(%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "{version} 版本 build-tools 中的 apksigner 不处理带无效 v3 签名的 APK 文件,忽略中。" #: ../fdroidserver/common.py msgid "apksigner not found! Cannot sign or verify modern APKs" @@ -2116,11 +2123,13 @@ msgstr "找不到 APK 签名器!无法对新式 APK 进行签名或验证" msgid "apksigner not found, it's required for signing!" msgstr "找不到 APK 签名器,这是签名所必需的!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py msgid "application ID of file to operate on" msgstr "要操作的文件的应用ID" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2131,8 +2140,6 @@ msgstr "带APPID[:VERCODE]格式可选的versionCode的应用 ID" msgid "archive_url needs to end with /archive" msgstr "archive_url 需要以 /archive 结尾" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2151,7 +2158,7 @@ msgstr "尝试使用裸 SSH 连接测试部署密钥:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "无法解析 scrlib 规范(不是字符串):“{}”" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "无法打开 '%(filename)s':%(error)s" @@ -2165,14 +2172,10 @@ msgstr "无法打开非 HTTPS URL: '{};" msgid "cannot find required srclibs: \"{path}\"" msgstr "找不到所需的源库:“{path}”" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "不能有多个子解析器参数" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2191,14 +2194,6 @@ msgstr "正在克隆 {url}" msgid "commands from plugin modules:" msgstr "来自插件模块的命令:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "复杂" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2228,10 +2223,6 @@ msgstr "无法解析 srclib 规范 (未指定名称): '{}'" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "无法解析 srclib 规范 (未指定 ref): '{}'" -#: ../fdroidserver/common.py -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "无法解析 srclib 规范 (('@'符号太多): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2249,15 +2240,13 @@ msgstr "正在删除:repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "没有锁的依赖文件" #: ../fdroidserver/common.py #, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "已部署进程日志 {path} 到 {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2275,28 +2264,20 @@ msgstr "从 '{}' 下载扫描仪特征失败了" msgid "executable binary, possibly code" msgstr "可执行二进制文件,可能是代码" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "预期的 %s 个参数" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "预期至少有一个参数" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "预期最多有一个参数" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "预期的一个参数" @@ -2309,10 +2290,6 @@ msgstr "用法:fdroid [-h|--help|--version] []" msgid "fetch the latest version of signatures from the web" msgstr "从网络获取最新版本的签名" -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "浮点" - #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." msgstr "将元数据错误(默认)强制设为警告,或忽略。" @@ -2325,8 +2302,6 @@ msgstr "git svn 克隆失败" msgid "gzip file archive" msgstr "gzip 压缩包" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2340,35 +2315,21 @@ msgstr "index-v1 必须有签名,使用 `fdroid signindex` 命令创建它!" msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v2 必须有签名,使用 `fdroid signindex` 命令创建它!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "整数" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "无效 %(type)s 值: %(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" -msgstr "" +msgstr "无效选项:%(value)r (选取自 %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "冲突解决值无效: %r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2406,8 +2367,6 @@ msgstr "镜像 '%s' 不以 'fdroid'结尾!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "设置了两次镜像,分别在 config.xml 和 {path} 中!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "相互排斥的参数必须是可选的" @@ -2426,30 +2385,15 @@ msgstr "{appid} 中没有 \"图标\"" msgid "no APK supplied" msgstr "未提供 APK" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "没有此选项:%s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "没有找到版本信息!" - #: ../fdroidserver/checkupdates.py msgid "no version information found" msgstr "没有找到版本信息" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "不允许使用参数 %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2459,72 +2403,6 @@ msgstr "其中一个参数 %s 是必需的" msgid "only accepts strings, lists, and tuples" msgstr "只接受字符串、列表和元组" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "选项 %s: 如果您真的想安装所有已签名的应用,请使用 --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "选项 %s:无效 %s 值:%r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "选项 %s:无效选择:%r(从 %s 中选择)" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "未知的选项 -%s" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "选项 -%s 需要参数" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "选项 --%s 不能有参数" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "选项 --%s 不是一个唯一前缀" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "无法识别选项 -%s" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "选项 --%s 需要参数" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "可选参数" - #: /usr/lib/python3.11/argparse.py msgid "options" msgstr "选项" @@ -2534,8 +2412,6 @@ msgstr "选项" msgid "overwriting existing {path}" msgstr "正在覆盖现有{path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "位置参数" @@ -2568,19 +2444,15 @@ msgstr "repo_url 需以 /repo 结尾" msgid "rsync is missing or broken: {error}" msgstr "rsync 丢失或损坏: {error}" -#: ../fdroidserver/metadata.py -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "ruamel.yaml 未安装,无法写入元数据。" - #: ../fdroidserver/deploy.py #, python-brace-format msgid "s3cmd sync indexes {path} to {url} and delete" msgstr "s3cmd 同步索引 {path} 至 {url} 并删除" #: ../fdroidserver/deploy.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "s3cmd syncs indexes from {path} to {url} and deletes removed" -msgstr "s3cmd 同步索引 {path} 至 {url} 并删除" +msgstr "s3cmd 将索引从 {path} 同步至 {url} 并删除已下架的" #: ../fdroidserver/scanner.py #, python-brace-format @@ -2595,17 +2467,7 @@ msgstr "serverwebroot:路径没有以 \"fdroid\"结尾,可能你想表达的 msgid "shared library" msgstr "共享库" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "显示程序的版本号并退出" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "显示本帮助信息并退出" @@ -2632,36 +2494,32 @@ msgstr "srclibs 缺少名称和/或 @" #: ../fdroidserver/scanner.py msgid "static library" -msgstr "静态图书馆" +msgstr "静态库" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" msgstr "所提供的参考二进制已允许签名者 {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "需要此下参数:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "true" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "未预期的选项字符串:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "未知解析器 %(parser_name)r (选择: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2672,9 +2530,7 @@ msgstr "未识别的参数:%s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "{config_file} 的文件权限不安全 ( 应该设为0600 ) !" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "用法: " @@ -2687,32 +2543,34 @@ msgstr "正在用Apache libcloud同步{url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "virustotal.com正在限制速率,等待重试..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "yes" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" msgid_plural "{0} apps, {1} key aliases" -msgstr[0] "" +msgstr[0] "{0} 应用, {1} 主要别名" #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename} ({appid}) has no metadata!" -msgstr "" - -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "" +msgstr "{apkfilename} ({appid})没有元数据!" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " -msgstr "" +msgstr "{apkfilename}的 AndroidManifest.xml 有一个无效的日期: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} does not have a name! Using application ID instead." -msgstr "" +msgstr "{appid} 没有名字! 使用 application ID 代替." +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2726,23 +2584,22 @@ msgstr "{appid}来自{path}不是一个有效的Java安装包名称!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" -msgstr "" +msgstr "{appid}有两个apk文件:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid}缺失了{name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" -msgstr "" +msgstr "{appid}:在构建版本‘{versionName}’时在{path}中遇到了未知的extlib" #: ../fdroidserver/scanner.py #, python-brace-format msgid "{appid}: no builds specified, running on current source state" -msgstr "" +msgstr "{appid}: 没有指定构建,在当前源码状态下运行" #: ../fdroidserver/lint.py #, python-brace-format @@ -2757,32 +2614,32 @@ msgstr "{appid}:{field}必须为‘{type}’,但它是‘{fieldtype}’!" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be an integer, found: {value}" -msgstr "" +msgstr "{build_flag}变量必须为整型,但是找到了{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{build_flag} must be list or string, found: {value}" -msgstr "" +msgstr "{build_flag}变量必须为列表或字符串,但是找到了{value}" #: ../fdroidserver/metadata.py #, python-brace-format msgid "{file} is blank or corrupt!" -msgstr "" +msgstr "{file} 是空的或已损坏!" #: ../fdroidserver/update.py #, python-brace-format msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." -msgstr "" +msgstr "{name}的“{section}/icons/{path}”不存在!请检查配置文件“config.yml”。" -#: ../fdroidserver/common.py +#: ../fdroidserver/update.py #, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "" +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "{path1} 与 {path2} 重复,请删除一个!" #: ../fdroidserver/import_subcommand.py #, python-brace-format msgid "{path} already exists, ignoring import results!" -msgstr "" +msgstr "{path} 已经存在,忽略导入的结果!" #: ../fdroidserver/nightly.py #, python-brace-format @@ -2792,17 +2649,22 @@ msgstr "{path} 不存在!通过运行以下命令创建它:" #: ../fdroidserver/update.py #, python-brace-format msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!" -msgstr "" +msgstr "{path}有损坏的签名“{pattern}”,也许是Janus的漏洞!" #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "{path}被virustotal标记了{count}次:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} 有错误的指纹 ({fingerprint})!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path}不是“键:值”模式,而是一个{datatype}!" #: ../fdroidserver/common.py #, python-brace-format @@ -2812,12 +2674,12 @@ msgstr "{path} 不是标准的配置文件!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path} 不是list,而是 {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} 不是 {expected_type} 而是 {datatype}!" #: ../fdroidserver/update.py #, python-brace-format @@ -2832,7 +2694,7 @@ msgstr "{path}的大小超过200MB,请手动上传:{url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}: \"{code}\" 不是有效的ISO_3166-1 alpha-2国家代码!" #: ../fdroidserver/update.py #, python-brace-format @@ -2852,9 +2714,9 @@ msgstr "{url}不是以“http”为开头!" #: ../fdroidserver/build.py msgid "{} build failed" msgid_plural "{} builds failed" -msgstr[0] "" +msgstr[0] "{} 构建失败" #: ../fdroidserver/build.py msgid "{} build succeeded" msgid_plural "{} builds succeeded" -msgstr[0] "" +msgstr[0] "{} 构建成功" diff --git a/locale/zh_Hant/LC_MESSAGES/fdroidserver.po b/locale/zh_Hant/LC_MESSAGES/fdroidserver.po index 12446cd7..e2358e7e 100644 --- a/locale/zh_Hant/LC_MESSAGES/fdroidserver.po +++ b/locale/zh_Hant/LC_MESSAGES/fdroidserver.po @@ -6,20 +6,21 @@ # ifurther , 2021. # Stiffen , 2021. # hugoalh , 2024. +# Peter Dave Hello , 2024. msgid "" msgstr "" "Project-Id-Version: fdroidserver 0.9\n" "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n" -"POT-Creation-Date: 2024-09-10 10:50+0200\n" -"PO-Revision-Date: 2024-05-29 05:09+0000\n" -"Last-Translator: hugoalh \n" -"Language-Team: Chinese (Traditional) \n" +"POT-Creation-Date: 2025-06-25 09:52+0200\n" +"PO-Revision-Date: 2024-11-26 15:16+0000\n" +"Last-Translator: Peter Dave Hello \n" +"Language-Team: Chinese (Traditional Han script) \n" "Language: zh_Hant\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 5.6-dev\n" +"X-Generator: Weblate 5.9-dev\n" #: ../fdroidserver/nightly.py msgid "" @@ -43,6 +44,10 @@ msgstr "" msgid "\"%s/\" has no matching metadata file!" msgstr "\"%s 1/\" 沒有符合的中介資料檔案!" +#: ../fdroidserver/index.py +msgid "\"isPrimary\" key should not be added to mirrors!" +msgstr "" + #: ../fdroidserver/index.py #, python-brace-format msgid "\"local_copy_dir\" {path} does not exist!" @@ -53,11 +58,6 @@ msgstr "「local_copy_dir」{path} 不存在!" msgid "\"{apkfilename}\" is already installed on {dev}." msgstr "\"{apkfilename}\" 已經安裝在 {dev} 上了。" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "\"{path}\" contains outdated {name} ({version})" -msgstr "\"{path}\" 包含過時的 {name} ({version})" - #: ../fdroidserver/update.py #, python-brace-format msgid "\"{path}\" contains recent {name} ({version})" @@ -83,16 +83,6 @@ msgstr "「{path}」由不允許的金鑰簽署:" msgid "\"{url}\" is not a valid URL!" msgstr "\"{url}\" 不是一個有效的網址!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%(option)s option requires %(number)d argument" -msgid_plural "%(option)s option requires %(number)d arguments" -msgstr[0] "%(option)s 的選項需要 %(number)d 參數" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%(prog)s: error: %(message)s\n" @@ -108,14 +98,6 @@ msgstr "%d 個 APK 無法簽署或驗證!" msgid "%d problems found" msgstr "發現 %d 個問題" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "%prog [options]" -msgstr "%prog [選項]" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "%r is not callable" @@ -136,13 +118,6 @@ msgstr "%s 的 SHA-256 值不正確:%s" msgid "%s is not an accepted build field" msgstr "%s 為不可編譯欄位" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "%s option does not take a value" -msgstr "%s 選項不帶值" - #: ../fdroidserver/common.py msgid "'keypass' not found in config.yml!" msgstr "config.yml 找不到 'keypass'!" @@ -163,8 +138,6 @@ msgstr "config.yml 找不到 'keystorepass'!" msgid "'repo_keyalias' not found in config.yml!" msgstr "config.yml 找不到 'repo_keyalias'!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "'required' is an invalid argument for positionals" msgstr "這些地方的 '必填' 為無效引數" @@ -178,11 +151,6 @@ msgstr "未在 config.yml 中設定「sdk_path」!" msgid "'{aapt}' is too old, fdroid requires build-tools-{version} or newer!" msgstr "'{aapt}' 太過老舊,fdroid 需要 build-tools-{version} 或以上版本!" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "'{field}' will be in random order! Use () or [] brackets if order is important!" -msgstr "'{field}' 將會隨機排列!如果次序重很重要,請使用 () 或 []符號!" - #: ../fdroidserver/common.py #, python-brace-format msgid "'{path}' failed to execute!" @@ -193,7 +161,7 @@ msgstr "'{path}' 無法執行!" msgid "'{path}' has invalid format, it should be a dictionary!" msgstr "「{path}」的格式無效,它應該是一個字典!" -#: ../fdroidserver/metadata.py ../fdroidserver/lint.py +#: ../fdroidserver/lint.py ../fdroidserver/metadata.py #, python-brace-format msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}" msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}" @@ -203,13 +171,15 @@ msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}" msgid "'{value}' is not a valid {field}, should be {pattern}" msgstr "「{value}」不是有效的 {field},應該為 {pattern}" +#: ../fdroidserver/checkupdates.py +msgid "--merge-request only runs on a single appid!" +msgstr "" + #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "...checkupdate failed for {appid} : {error}" msgstr "{appid} 檢查更新失敗:{error}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid ".__call__() not defined" msgstr ".__call__() 未定義" @@ -300,10 +270,6 @@ msgstr "找不到 Android SDK 工具 {cmd}!" msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate." msgstr "應用程式具有二進位文件,但是沒有相應的 AllowedAPKSigningKeys 來固定憑證。" -#: ../fdroidserver/lint.py -msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" but AutoUpdateMode or UpdateCheckMode are not None" -msgstr "應用程式有 NoSourceSince 或 ArchivePolicy「0 versions」,但是 AutoUpdateMode 或 UpdateCheckMode 不是「None」" - #: ../fdroidserver/lint.py msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None" msgstr "應用程式有 NoSourceSince 或 ArchivePolicy「0 versions」或「0」,但是 AutoUpdateMode 或 UpdateCheckMode 不是「None」" @@ -330,6 +296,14 @@ msgstr "以無效的簽名歸檔 {apkfilename}!" msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern." msgstr "AutoUpdateMode 與 UpdateCheckMode:HTTP 必須有一個模式。" +#: ../fdroidserver/install.py +msgid "Automatic no to all prompts." +msgstr "自動拒絕所有提示。" + +#: ../fdroidserver/install.py +msgid "Automatic yes to all prompts." +msgstr "自動同意所有提示。" + #: ../fdroidserver/index.py #, python-brace-format msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}" @@ -339,7 +313,6 @@ msgstr "鏡像配置中的錯誤條目類型「{mirrortype}」:{mirror}" msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint=" msgstr "基本的 URL 到鏡像,可以包含索引簽署金鑰使用查詢字串:?fingerprint=" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Branch '{branch}' used as commit in build '{versionName}'" @@ -389,16 +362,23 @@ msgid "Can't build due to {} error while scanning" msgid_plural "Can't build due to {} errors while scanning" msgstr[0] "掃描時由於 {} 出錯,無法進行編譯" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Cannot read {path}: {error}" +msgstr "讀取 {path} 失敗:錯誤訊息{error}" + #: ../fdroidserver/rewritemeta.py #, python-brace-format msgid "Cannot rewrite \"{path}\"" msgstr "無法重寫到 \"{path}\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-format msgid "Categories '%s' is not valid" msgstr "'%s' 類別無效" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py msgid "Categories are not set" msgstr "類別未設定" @@ -421,6 +401,10 @@ msgstr "檢查 {appid} 的歸檔 - APKs:{integer},keepversions:{keep},archap msgid "Clean update - don't uses caches, reprocess all APKs" msgstr "清除更新 - 不使用快取,重新處理全部的 APK" +#: ../fdroidserver/common.py +msgid "Color the log output" +msgstr "" + #: ../fdroidserver/import_subcommand.py msgid "Comma separated list of categories." msgstr "以逗號分隔類別清單。" @@ -434,30 +418,31 @@ msgstr "無法識別指令「%s」。\n" msgid "Commit changes" msgstr "提交變更" +#: ../fdroidserver/checkupdates.py +msgid "Commit changes, push, then make a merge request" +msgstr "" + #: ../fdroidserver/metadata.py #, python-brace-format msgid "Conflicting \"{field}\" definitions between .yml and localized files:" -msgstr "" +msgstr ".yml 與本地化檔案之間的「{field}」定義衝突:" #: ../fdroidserver/__main__.py #, fuzzy msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time." msgstr "衝突的參數:無法同時使用 '--verbose' 和 '--quiet' 參數。" -#: ../fdroidserver/common.py -#, fuzzy, python-brace-format -msgid "Conflicting config files! Using {newfile}, ignoring {oldfile}!" -msgstr "衝突的配置文件! 使用新文件 {newfile}, 忽略舊文件 {oldfile} !" - #: ../fdroidserver/common.py #, python-brace-format msgid "Could not find '{command}' on your system" msgstr "在您的系統上找不到 '{command}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version code" msgstr "找不到最新版本程式碼" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/import_subcommand.py msgid "Could not find latest version name" msgstr "找不到最新版本名稱" @@ -477,6 +462,7 @@ msgstr "無法開啟 APK 檔{path}案作分析 : " msgid "Could not parse size \"{size}\", wrong type \"{type}\"" msgstr "無法解析大小「{size}」,錯誤類型「{type}」" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/import_subcommand.py msgid "Couldn't find Application ID" msgstr "找不到應用程式 ID" @@ -503,6 +489,11 @@ msgstr "建立新容器 \"{name}\"" msgid "Creating \"{path}\" for configuring s3cmd." msgstr "正在建立組態 s3cmd 的 \"{path}\"。" +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Creating empty {config_file}" +msgstr "讀取 '{config_file}' 中" + #: ../fdroidserver/publish.py msgid "Creating log directory" msgstr "建立日誌目錄" @@ -565,11 +556,6 @@ msgstr "描述 '%s' 僅為此應用的摘要" msgid "Description has a duplicate line" msgstr "描述中出現重覆行" -#: ../fdroidserver/lint.py -#, python-format -msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)" -msgstr "描述中有一個列表 (%s) 但它並未被編排 (*) 或作編號 (#)" - #: ../fdroidserver/lint.py #, python-brace-format msgid "Description of length {length} is over the {limit} char limit" @@ -618,15 +604,14 @@ msgstr "不要更新軟體庫,在沒有網路連線時測試構建很有用" msgid "Don't use rsync checksums" msgstr "不使用 rsync 檢驗和" +#: ../fdroidserver/install.py +msgid "Download F-Droid.apk using mirrors that leak less to the network" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Download complete mirrors of small repos" msgstr "下載小型軟體庫完整的鏡像" -#: ../fdroidserver/common.py -#, python-format -msgid "Downloading %s" -msgstr "正在下載 %s" - #: ../fdroidserver/common.py msgid "Downloading the repository already failed once, not trying again." msgstr "下載軟體庫已失敗過一次,尚未重試。" @@ -660,14 +645,6 @@ msgstr "錯誤:%(message)s" msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!" msgstr "錯誤:「server」子指令已經刪除,請使用「deploy」!" -#: ../fdroidserver/mirror.py -msgid "" -"ERROR: this command should never be used to mirror f-droid.org!\n" -"A full mirror of f-droid.org requires more than 200GB." -msgstr "" -"錯誤:此命令絕不該用於鏡像 f-droid.org!\n" -"完整的 f-droid.org 鏡像需要超過 200GB。" - #: ../fdroidserver/nightly.py msgid "ERROR: unsupported CI type, patches welcome!" msgstr "出錯:未支援 CI 類型,歡迎補強!" @@ -680,12 +657,22 @@ msgstr "錯誤:不支援的 git 主機「%s」,歡迎提交修補!" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key} in {path} is not \"archive\" or \"repo\"!" +msgstr "錯誤:{path} 中的 {key} 不是「archive」或「repo」!" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key} not a valid key!" +msgstr "" + +#: ../fdroidserver/lint.py +#, python-brace-format +msgid "ERROR: {key}'s value should be of type {t}!" msgstr "" #: ../fdroidserver/lint.py #, python-brace-format msgid "ERROR: {key}:{subkey} in {path} is not in allowed keys: {allowed_keys}!" -msgstr "" +msgstr "錯誤:{path} 中的 {key}:{subkey} 不在允許的鍵值清單中:{allowed_keys}!" #: ../fdroidserver/__main__.py #, python-brace-format @@ -702,13 +689,18 @@ msgstr "" "> " #: ../fdroidserver/common.py -#, fuzzy, python-brace-format +#, python-brace-format msgid "Environment variable {var} from {configname} is not set!" -msgstr "配置文件 {configname} 中的 環境變量 {var} 還沒有設置 !" +msgstr "設定檔 {configname} 的環境變數 {var} 尚未設定!" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Environment variable {{env: {var}}} is not set!" +msgstr "設定檔 {configname} 的環境變數 {var} 尚未設定!" #: ../fdroidserver/deploy.py msgid "Error deploying 'github_releases', {} not present. (You might need to run `fdroid update` first.)" -msgstr "" +msgstr "部署「github_releases」時發生錯誤,找不到 {}。(您可能需要先執行 `fdroid update`。)" #: ../fdroidserver/import_subcommand.py msgid "Error while getting repo address" @@ -726,6 +718,10 @@ msgstr "從來源儲存庫中提取應用程式元數據" msgid "Extract signatures from APKs" msgstr "自 APKs 捽取出簽名" +#: ../fdroidserver/install.py +msgid "F-Droid.apk could not be downloaded from any known source!" +msgstr "無法從任何已知來源下載 F-Droid.apk!" + #: ../fdroidserver/update.py #, python-brace-format msgid "Failed copying {path}: {error}" @@ -795,10 +791,6 @@ msgstr "檔案在處理時消失:{path}" msgid "Finished" msgstr "已完成" -#: ../fdroidserver/lint.py -msgid "Flattr donation methods belong in the FlattrID: field" -msgstr "Flattr 捐贈方法屬於 FlattrID: field" - #: ../fdroidserver/lint.py msgid "Forbidden HTML tags" msgstr "禁用 HTML 標籤" @@ -830,7 +822,6 @@ msgstr "找到了 \"{name}\" 的錯誤的籌款檔案 \"{path}\":" msgid "Found invalid appids in arguments" msgstr "引數中找到無效的 appids" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Found invalid versionCodes for some apps" msgstr "有些應用的版本代號無效" @@ -895,15 +886,13 @@ msgstr "Git 清理失敗" msgid "Git fetch failed" msgstr "Git 抓取失敗" -#: ../fdroidserver/common.py -msgid "Git prune failed" -msgstr "Git 修剪失敗" - +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-format msgid "Git remote set-head failed: \"%s\"" msgstr "Git 遠端 set-head 失敗: \"%s\"" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py msgid "Git reset failed" msgstr "Git 重置失敗" @@ -947,7 +936,12 @@ msgstr "忽略文檔 FUNDING.yml , 文檔大小超過 2048: %s" #: ../fdroidserver/update.py #, python-format msgid "Ignoring bad element in manifest: %s" -msgstr "" +msgstr "忽略資訊清單中的無效元素:%s" + +#: ../fdroidserver/common.py +#, fuzzy, python-brace-format +msgid "Ignoring deprecated {oldfile}, use {newfile}!" +msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}" #: ../fdroidserver/index.py msgid "Ignoring package without metadata: " @@ -980,12 +974,12 @@ msgstr "在鏡像中加入軟體的源代碼包" #: ../fdroidserver/metadata.py #, python-format msgid "Including metadata from %s@%s" -msgstr "" +msgstr "正在匯入來自 %s@%s 的中繼資料" #: ../fdroidserver/metadata.py #, python-brace-format msgid "Including metadata from {path}" -msgstr "" +msgstr "正在匯入來自 {path} 的中繼資料" #: ../fdroidserver/common.py msgid "Initialising submodules" @@ -1020,12 +1014,12 @@ msgstr "無效的 APK" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid AutoUpdateMode: {mode}" -msgstr "" +msgstr "無效的自動更新模式:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "Invalid UpdateCheckMode: {mode}" -msgstr "" +msgstr "無效的更新檢查模式:{mode}" #: ../fdroidserver/checkupdates.py #, python-brace-format @@ -1037,16 +1031,12 @@ msgstr "無效的 VercodeOperation:{field}" msgid "Invalid VercodeOperation: {invalid_ops}" msgstr "無效的 VercodeOperation:{invalid_ops}" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Invalid application ID {appid}" msgstr "無效的 application ID {appid}" -#: ../fdroidserver/metadata.py -#, python-format -msgid "Invalid boolean '%s'" -msgstr "無效的布林 '%s'" - #: ../fdroidserver/lint.py msgid "Invalid bulleted list" msgstr "無效的排序列表" @@ -1059,7 +1049,7 @@ msgstr "無效的已發佈檔案名稱:%s" #: ../fdroidserver/common.py #, python-brace-format msgid "Invalid ndk: entry in build: \"{ndk}\"" -msgstr "" +msgstr "建置設定中的 NDK 項目無效:「{ndk}」" #: ../fdroidserver/common.py #, python-brace-format @@ -1125,7 +1115,7 @@ msgstr "金鑰庫的簽署金鑰:\t" #: ../fdroidserver/lint.py msgid "Known debug key is used in AllowedAPKSigningKeys: " -msgstr "" +msgstr "在 AllowedAPKSigningKeys 中使用了已知的除錯金鑰: " #: ../fdroidserver/lint.py #, fuzzy, python-brace-format @@ -1161,6 +1151,11 @@ msgstr "異常的 serverwebroot 行:" #: ../fdroidserver/scanner.py #, python-format msgid "Max recursion depth in ZIP file reached: %s" +msgstr "已達到 ZIP 檔案中的最大遞迴深度:%s" + +#: ../fdroidserver/index.py +#, python-brace-format +msgid "Mirror config for {url} contains \"isPrimary\" key!" msgstr "" #: ../fdroidserver/mirror.py @@ -1174,11 +1169,11 @@ msgstr "輸出目錄消失" #: ../fdroidserver/metadata.py msgid "Moving Anti-Features declarations to localized files:" -msgstr "" +msgstr "正在將反功能宣告移至本地化檔案:" #: ../fdroidserver/index.py msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml" -msgstr "" +msgstr "在 config.yml 中未設定「repo_pubkey」或「keystorepass」" #: ../fdroidserver/verify.py #, fuzzy, python-format @@ -1193,6 +1188,10 @@ msgstr "未找到 Android SDK!" msgid "No attached devices found" msgstr "查無附加的設備" +#: ../fdroidserver/install.py +msgid "No devices found for `adb install`! Please plug one in." +msgstr "未找到可用於執行 `adb install` 的裝置!請連接一台裝置。" + #: ../fdroidserver/index.py msgid "No fingerprint in URL." msgstr "在 URL 無指紋。" @@ -1218,7 +1217,7 @@ msgstr "查無資訊" #: ../fdroidserver/update.py #, python-brace-format msgid "No minimum SDK version found in {0}, using default (3)." -msgstr "" +msgstr "在 {0} 中找不到最低 SDK 版本,使用預設值 (3)。" #: ../fdroidserver/lint.py msgid "No need to specify that the app is Free Software" @@ -1255,7 +1254,6 @@ msgstr "{path} 找不到簽署證書" msgid "No such package: %s" msgstr "無此套件包:%s" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/common.py #, python-brace-format msgid "No such versionCode {versionCode} for app {appid}" @@ -1293,7 +1291,6 @@ msgstr "{appid} 無須採取行動." msgid "Now set these in config.yml:" msgstr "現在設定這些在 config.yml 中:" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "OBB file has newer versionCode({integer}) than any APK:" @@ -1312,26 +1309,28 @@ msgstr "OBB 的套件包名稱與支援的 APK 並不相符:" msgid "Offline machine, skipping git mirror generation until `fdroid deploy`" msgstr "因為機器是離線的, 跳過 git mirror 的生成直到 `fdroid deploy`" +#: ../fdroidserver/deploy.py +msgid "One of the 'github_releases' config items is missing the 'packageNames' value. skipping ..." +msgstr "其中一個「github_releases」設定項目缺少「packageNames」值。略過..." + #: ../fdroidserver/deploy.py msgid "One of the 'github_releases' config items is missing the 'projectUrl' value. skipping ..." -msgstr "" +msgstr "其中一個「github_releases」設定項目缺少「projectUrl」值。略過..." #: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'packageNames' value. skipping ..." -msgstr "" - -#: ../fdroidserver/deploy.py -msgid "One of the 'github_releases' config itmes is missing the 'token' value. skipping ..." -msgstr "" +msgid "One of the 'github_releases' config items is missing the 'token' value. skipping ..." +msgstr "其中一個「github_releases」設定項目缺少「token」值。略過..." +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Only PNG and JPEG are supported for graphics, found: {path}" msgstr "圖像僅支援 PNG 和 JPEG,可在下方找到:{path}" -#: ../fdroidserver/checkupdates.py -msgid "Only print differences with the Play Store" -msgstr "僅印出與 Play Store 的不同處" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode +#: ../fdroidserver/common.py +msgid "Only accepts a single key \"env\"" +msgstr "" #: ../fdroidserver/checkupdates.py msgid "Only process apps with auto-updates" @@ -1342,10 +1341,6 @@ msgstr "只處理具有自動更新的應用程式" msgid "OpenCollective donation methods belong in the OpenCollective: field" msgstr "OpenCollective 的捐款方式在 OpenCollective: 的標誌下面" -#: /usr/lib/python3.11/optparse.py -msgid "Options" -msgstr "選項" - #: ../fdroidserver/verify.py msgid "Output JSON report to file named after APK." msgstr "將 json 報告輸出到以 APK 命名的檔案。" @@ -1405,10 +1400,15 @@ msgstr "給軟體庫簽署金鑰的金鑰庫路徑" msgid "Print the secret variable to the terminal for easy copy/paste" msgstr "在終端機顥示祕密變數以便於複製/貼上" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Privacy mode was enabled based on your locale ({country_code})." +msgstr "已根據您的地區({country_code})啟用了隱私模式。" + #: ../fdroidserver/scanner.py #, python-format msgid "Problem with ZIP file: %s, error %s" -msgstr "" +msgstr "ZIP 檔案出現問題:%s,錯誤 %s" #: ../fdroidserver/common.py #, python-brace-format @@ -1490,6 +1490,15 @@ msgstr "從緩存讀取 {apkfilename}" #: ../fdroidserver/build.py msgid "Refresh and cache scanner rules and signatures from the network" +msgstr "從網路重新整理並快取掃描器規則與簽章" + +#: ../fdroidserver/publish.py +#, python-brace-format +msgid "Refusing to sign '{path}', file exists in both {dir1} and {dir2} folder." +msgstr "" + +#: ../fdroidserver/verify.py +msgid "Remove source tarball and any APKs if successfully verified." msgstr "" #: ../fdroidserver/common.py @@ -1499,20 +1508,17 @@ msgstr "移除指定檔案" #: ../fdroidserver/update.py #, python-brace-format msgid "Removing {path}\"" -msgstr "" +msgstr "正在移除 {path}\"" #: ../fdroidserver/update.py msgid "Rename APK files that do not match package.name_123.apk" msgstr "為不符合 package.name_123.apk 格式的 APK 檔案更名" -#: ../fdroidserver/checkupdates.py -msgid "RepoTrunk update mode only makes sense in git-svn repositories" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "RepoType {type} is deprecated, please switch to git." msgstr "" -#: ../fdroidserver/build.py -msgid "Reset and create a brand new build server, even if the existing one appears to be ok." -msgstr "即使現有的伺服器明顯是好的,仍重置並建立一個新的構建伺服器。" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "Resigning {apkfilename} with provided debug.keystore" @@ -1526,6 +1532,11 @@ msgstr "重設超過最大像素的所有圖示之尺寸並且退出" msgid "Restrict output to warnings and errors" msgstr "將輸出限定為警告和錯誤" +#: ../fdroidserver/net.py +#, python-format +msgid "Retrying failed download: %s" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Rewrite all the metadata files" msgstr "重寫所有的中介資料檔案" @@ -1542,7 +1553,7 @@ msgstr "在有未遞交變更的 git 倉庫上執行" #: ../fdroidserver/nightly.py #, python-brace-format msgid "Run over {cibase} to find -debug.apk. and skip repo_basedir {repo_basedir}" -msgstr "" +msgstr "在 {cibase} 中尋找 -debug.apk,並略過 repo_basedir {repo_basedir}" #: ../fdroidserver/lint.py msgid "Run rewritemeta to fix formatting" @@ -1560,7 +1571,7 @@ msgstr "在 {path} 裡執行 wget" #: ../fdroidserver/index.py #, python-brace-format msgid "SHA-256 of {url} does not match entry!" -msgstr "" +msgstr "{url} 的 SHA-256 與項目不符!" #: ../fdroidserver/build.py #, fuzzy @@ -1591,6 +1602,10 @@ msgid "Scanner found {} problem" msgid_plural "Scanner found {} problems" msgstr[0] "掃瞄器發現 {} 問題" +#: ../fdroidserver/scanner.py +msgid "Scanning APK for extra signing blocks." +msgstr "正在掃描 APK 以檢查額外的簽章區塊。" + #: ../fdroidserver/scanner.py #, fuzzy msgid "Scanning APK with dexdump for known non-free classes." @@ -1599,7 +1614,7 @@ msgstr "在生成的 APK 檔案中掃描已知的閉源軟體 。" #: ../fdroidserver/common.py #, python-brace-format msgid "Set NDK {release} ({version}) up" -msgstr "" +msgstr "正在設定 NDK {release}({version})" #: ../fdroidserver/common.py msgid "Set clock to that time using:" @@ -1648,7 +1663,7 @@ msgstr "略過帶無效簽署的 '{apkfilename}'!" #: ../fdroidserver/deploy.py ../fdroidserver/index.py #, python-format msgid "Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!" -msgstr "" +msgstr "因儲存庫過大(>%.2fGB),略過 GitLab Pages 鏡像!" #: ../fdroidserver/update.py #, python-brace-format @@ -1703,16 +1718,20 @@ msgstr "在 {path} 中的系統時鐘比日期早!" #: ../fdroidserver/checkupdates.py msgid "Tags update mode only works for git, hg, bzr and git-svn repositories currently" -msgstr "" +msgstr "標籤更新模式目前僅適用於 git、hg、bzr 與 git-svn 儲存庫" #: ../fdroidserver/checkupdates.py msgid "Tags update mode used in git-svn, but the repo was not set up with tags" -msgstr "" +msgstr "在 git-svn 中使用了標籤更新模式,但儲存庫未設定標籤" #: ../fdroidserver/build.py msgid "Test mode - put output in the tmp directory only, and always build, even if the output already exists." msgstr "測試模式 - 將輸出只放在 tmp 目錄中,即使輸出已經存在,仍然構建。" +#: ../fdroidserver/index.py +msgid "The \"qrcode\" Python package is not installed (e.g. apt-get install python3-qrcode)!" +msgstr "" + #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format @@ -1777,6 +1796,13 @@ msgid "" "For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" "and https://f-droid.org/docs/Signing_Process" msgstr "" +"要完成設定,請將您的 APK 新增至「%s」\n" +"然後執行「fdroid update -c; fdroid update」。您可能也想要編輯\n" +"「config.yml」以設定網址、儲存庫名稱等。您還應該設定\n" +"簽署金鑰(可能已自動產生一個暫時性的金鑰)。\n" +"\n" +"更多資訊請參考:https://f-droid.org/docs/Setup_an_F-Droid_App_Repo\n" +"與 https://f-droid.org/docs/Signing_Process" #: ../fdroidserver/deploy.py msgid "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!" @@ -1811,11 +1837,6 @@ msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用 https://spdx msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file" msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用你的配置文檔裡面配置好的許可證標籤啦" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Unexpected symlink target: {link} -> {target}" -msgstr "" - #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "Unknown entry {key} in {configname}" @@ -1825,7 +1846,6 @@ msgstr "配置文檔 {configname} 裡面登記的密鑰 {key} 是未知的" msgid "Unknown exception found!" msgstr "發現未知的異常!" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "Unknown file '{filename}' in build '{versionName}'" @@ -1863,6 +1883,7 @@ msgstr "在 '{path}' 中無法辨識的 app 欄位 '{fieldname}'" msgid "Unrecognised build flag '{build_flag}' in '{path}'" msgstr "在 '{path}' 中無法辨識的構建旗標 '{build_flag}'" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/update.py #, python-brace-format msgid "Unsupported file type \"{extension}\" for repo graphic" @@ -1893,11 +1914,6 @@ msgstr "路徑: %s 被標記為掃描並刪除,但並未執行" msgid "Unused scanignore path: %s" msgstr "檔案路徑: %s 被標記為不掃描,但並未出現" -#: ../fdroidserver/common.py -#, python-format -msgid "Unzipping to %s" -msgstr "" - #: ../fdroidserver/__main__.py msgid "Update repo information for new packages" msgstr "為新的套件包更新軟體庫資訊" @@ -1911,10 +1927,11 @@ msgstr "為網址更新二進制的透明日誌" msgid "UpdateCheckData has invalid URL: {url}" msgstr "UpdateCheckData 有無效的 URL:{url}" +#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode #: ../fdroidserver/lint.py #, python-brace-format msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}" -msgstr "" +msgstr "UpdateCheckData 必須符合整數版本代碼(\\d 或 [0-9]):{codeex}" #: ../fdroidserver/lint.py #, python-brace-format @@ -1928,13 +1945,9 @@ msgstr "UpdateCheckData 不是有效的 URL:{url}" #: ../fdroidserver/lint.py msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet." -msgstr "" - -#. Translators: https://developer.android.com/studio/build/application-id -#: ../fdroidserver/lint.py -msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet" -msgstr "" +msgstr "已設定 UpdateCheckMode,但似乎尚未執行 checkupdates。" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/lint.py #, fuzzy msgid "UpdateCheckName is set to the known application ID, it can be removed" @@ -1950,28 +1963,11 @@ msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org" msgid "Uploading {apkfilename} to virustotal" msgstr "正在將軟體檔案 {apkfilename} 上傳到 virustotal" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "Usage" -msgstr "使用方法" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "Usage: %s\n" -msgstr "使用方法:%s\n" - #: ../fdroidserver/lint.py #, fuzzy msgid "Use /HEAD instead of /master or /main to point at a file in the default branch" msgstr "使用 /HEAD 取代 /master 來指向默認分支的一個檔案" -#: ../fdroidserver/lint.py -msgid "Use /HEAD instead of /master to point at a file in the default branch" -msgstr "使用 /HEAD 取代 /master 來指向默認分支的一個檔案" - #: ../fdroidserver/update.py msgid "Use `fdroid update -c` to create it." msgstr "利用`fdroid update -c` 指令來建立。" @@ -2013,15 +2009,10 @@ msgstr "使用 APK Signature v2" msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner" msgstr "使用 Java 的 jarsigner,這並不建議用於驗證 APK!使用 apksigner" -#: ../fdroidserver/common.py -#, python-brace-format -msgid "Using androguard from \"{path}\"" -msgstr "使用從「{path}」而來的 androguard" - #: ../fdroidserver/metadata.py #, python-brace-format msgid "Using blank dictionary instead of contents of {path}!" -msgstr "" +msgstr "使用空白字典而非 {path} 的內容!" #: ../fdroidserver/init.py #, python-brace-format @@ -2054,15 +2045,28 @@ msgstr "驗證下載套裝軟體的完整性" msgid "Verifying index signature:" msgstr "正在驗證索引簽名:" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "Verifying package {path} with apksigner." +msgstr "正在使用 apksigner 驗證套件 {path}。" + #: ../fdroidserver/deploy.py #, fuzzy, python-brace-format msgid "VirusTotal API key cannot upload files larger than 32MB, use {url} to upload {path}." msgstr "VirusTotal API key 無法上傳大於 32MB 的檔案, 選擇使用 {url} 來上傳檔案 {path} 。" +#: ../fdroidserver/nightly.py +msgid "WARNING: only public git repos are supported!" +msgstr "" + #: ../fdroidserver/__main__.py msgid "Warn about possible metadata errors" msgstr "關於中介資料可能錯誤的警告" +#: ../fdroidserver/scanner.py +msgid "WebAssembly binary file" +msgstr "WebAssembly 二進位檔案" + #: ../fdroidserver/update.py msgid "When configured for signed indexes, create only unsigned indexes at this stage" msgstr "當已組態為簽名的索引時,只能在此階段建立無簽名的索引" @@ -2074,7 +2078,15 @@ msgstr "在默認情況下, 檢查整個軟體庫中的可疑代碼時不會 #: ../fdroidserver/publish.py msgid "When signing or verifying fails, exit with an error code." -msgstr "" +msgstr "當簽署或驗證失敗時,以錯誤碼結束。" + +#: ../fdroidserver/install.py +msgid "Would you like to download and install F-Droid.apk via adb? (YES/no)" +msgstr "您是否想透過 adb 下載並安裝 F-Droid.apk?(是/否)" + +#: ../fdroidserver/install.py +msgid "Would you like to download the app(s) from f-droid.org? (YES/no)" +msgstr "您是否想從 f-droid.org 下載應用程式?(是/否)" #: ../fdroidserver/init.py msgid "X.509 'Distinguished Name' used when generating keys" @@ -2089,6 +2101,11 @@ msgstr "可以使用 ANDROID_HOME 來設定 SDK 的路徑,i.e.:" msgid "ZIP file archive" msgstr "ZIP 壓縮檔案" +#: ../fdroidserver/install.py +#, python-brace-format +msgid "adb reports {serial} is \"{status}\"!" +msgstr "adb 回報 {serial} 為「{status}」!" + #: ../fdroidserver/nightly.py #, python-brace-format msgid "adding IdentityFile to {path}" @@ -2099,19 +2116,15 @@ msgstr "添增 IdentityFile 到 {path}" msgid "adding to {name}: {path}" msgstr "添加到 {name}:{path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ambiguous option: %(option)s could match %(matches)s" msgstr "模糊選項:%(option)s 可以相配 %(matches)s" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "ambiguous option: %s (%s?)" -msgstr "不明確的選項:%s (%s?)" +#: ../fdroidserver/common.py +#, python-brace-format +msgid "apksigner in build-tools;{version} passes APKs with invalid v3 signatures, ignoring." +msgstr "" #: ../fdroidserver/common.py #, fuzzy @@ -2123,12 +2136,14 @@ msgstr "apksigner 不見了 , 我們需要用它來生成數字簽名 !" msgid "apksigner not found, it's required for signing!" msgstr "apksigner 不見了 , 我們需要用它來生成數字簽名 !" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/checkupdates.py ../fdroidserver/lint.py #: ../fdroidserver/rewritemeta.py #, fuzzy msgid "application ID of file to operate on" msgstr "從檔案的 application ID 著手" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/build.py ../fdroidserver/install.py #: ../fdroidserver/publish.py ../fdroidserver/scanner.py #: ../fdroidserver/verify.py @@ -2138,10 +2153,8 @@ msgstr "application ID 具有任選的 versionCode 在此的格式為 APPID [:VE #: ../fdroidserver/common.py msgid "archive_url needs to end with /archive" -msgstr "" +msgstr "archive_url 必須以 /archive 結尾" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument \"-\" with mode %r" @@ -2150,7 +2163,7 @@ msgstr "引數 \"-\" 為帶 %r 模式" #: /usr/lib/python3.11/argparse.py #, python-format msgid "argument %(argument_name)s: %(message)s" -msgstr "" +msgstr "引數 %(argument_name)s:%(message)s" #: ../fdroidserver/nightly.py #, fuzzy @@ -2162,28 +2175,24 @@ msgstr "試圖用裸的 ssh 連線來測試佈署金鑰:" msgid "can not parse scrlib spec (not a string): '{}'" msgstr "無法解析 scrlib spec (不是字符): '{}'" -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: /usr/lib/python3.11/argparse.py #, python-format msgid "can't open '%(filename)s': %(error)s" msgstr "無法打開 '%(filename)s':%(error)s" #: ../fdroidserver/scanner.py msgid "can't open non-https url: '{};" -msgstr "" +msgstr "無法開啟非 HTTPS 網址:'{};" #: ../fdroidserver/build.py #, fuzzy, python-brace-format msgid "cannot find required srclibs: \"{path}\"" msgstr "找不到必須的 scrlibs: \"{path}\"" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "cannot have multiple subparser arguments" msgstr "無法有多個子解析器引數" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "cannot merge actions - two groups are named %r" @@ -2203,14 +2212,6 @@ msgstr "複製 {url}" msgid "commands from plugin modules:" msgstr "來自插換式模塊的命令:" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "complex" -msgstr "複雜" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "conflicting option string: %s" @@ -2242,11 +2243,6 @@ msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'" msgid "could not parse srclib spec (no ref specified): '{}'" msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'" -#: ../fdroidserver/common.py -#, fuzzy -msgid "could not parse srclib spec (too many '@' signs): '{}'" -msgstr "無法解析 scrlib spec (符號 '@' 出現太多次了): '{}'" - #: ../fdroidserver/nightly.py #, python-brace-format msgid "created {path}" @@ -2255,7 +2251,7 @@ msgstr "已建立 {path}" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "current version is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "目前版本較新:舊版本代碼={old},新版本代碼={new}" #: ../fdroidserver/update.py #, python-brace-format @@ -2264,15 +2260,13 @@ msgstr "刪除:repo/{apkfilename}" #: ../fdroidserver/scanner.py msgid "dependency file without lock" -msgstr "" +msgstr "依存檔案未上鎖" #: ../fdroidserver/common.py #, fuzzy, python-brace-format msgid "deployed process log {path} to {dest}" msgstr "將進程日誌 {path} 部署到 {dest}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "dest= is required for options like %r" @@ -2280,7 +2274,7 @@ msgstr "dest= 如 %r 選項為必須" #: ../fdroidserver/scanner.py msgid "downloading '{}'" -msgstr "" +msgstr "正在下載「{}」" #: ../fdroidserver/scanner.py #, fuzzy @@ -2292,28 +2286,20 @@ msgstr "正從軟體 {apkfilename} 除去未知的簽名" msgid "executable binary, possibly code" msgstr "可執行二進制檔案, 估計是代碼" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "expected %s argument" msgid_plural "expected %s arguments" msgstr[0] "預期的 %s 引數" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at least one argument" msgstr "預期至少有一個引數" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected at most one argument" msgstr "最多一個引數" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "expected one argument" msgstr "預期有一個引數" @@ -2324,11 +2310,7 @@ msgstr "用法:fdroid [-h|--help|--version] <命令> []" #: ../fdroidserver/scanner.py msgid "fetch the latest version of signatures from the web" -msgstr "" - -#: /usr/lib/python3.11/optparse.py -msgid "floating-point" -msgstr "浮點" +msgstr "從網路擷取最新版本的簽章" #: ../fdroidserver/metadata.py msgid "force metadata errors (default) to be warnings, or to be ignored." @@ -2343,8 +2325,6 @@ msgstr "Git svn 複製失敗" msgid "gzip file archive" msgstr "gzip 壓縮檔案" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "ignored explicit argument %r" @@ -2359,35 +2339,21 @@ msgstr "index-v1 必須要有簽名, 使用 `fdroid signindex`來建立一組簽 msgid "index-v2 must have a signature, use `fdroid signindex` to create it!" msgstr "index-v1 必須要有簽名, 使用 `fdroid signindex`來建立一組簽名!" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "integer" -msgstr "整數" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid %(type)s value: %(value)r" msgstr "無效 %(type)s 值:%(value)r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid choice: %(value)r (choose from %(choices)s)" msgstr "無效選項:%(value)r (選取自 %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid conflict_resolution value: %r" msgstr "無效 conflict_resolution 值:%r" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "invalid option string %(option)r: must start with a character %(prefix_chars)r" @@ -2395,12 +2361,12 @@ msgstr "無效的選項字串 %(option)r:必須以字符 %(prefix_chars)r為 #: ../fdroidserver/common.py msgid "ipfs_cid not found, skipping CIDv1 generation" -msgstr "" +msgstr "找不到 ipfs_cid,略過 CIDv1 產生" #: ../fdroidserver/checkupdates.py #, python-brace-format msgid "latest build recipe is newer: old vercode={old}, new vercode={new}" -msgstr "" +msgstr "最新的建置配方較新:舊版本代碼={old},新版本代碼={new}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2425,8 +2391,6 @@ msgstr "鏡像 '%s' 並不是以 'fdroid' 作結尾!" msgid "mirrors set twice, in config.yml and {path}!" msgstr "設定了兩次鏡像,分別在 config.xml 和 {path} 中!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "mutually exclusive arguments must be optional" msgstr "相互獨佔的引數必須為可選的" @@ -2434,7 +2398,7 @@ msgstr "相互獨佔的引數必須為可選的" #: ../fdroidserver/scanner.py #, python-brace-format msgid "next {name} cache update due in {time}" -msgstr "" +msgstr "下次 {name} 快取更新將於 {time} 進行" #: ../fdroidserver/mirror.py #, python-brace-format @@ -2445,31 +2409,16 @@ msgstr "在 {appid} 中沒有 \"icon\"" msgid "no APK supplied" msgstr "無 APK 被供應" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "no such option: %s" -msgstr "沒這樣的選項:%s" - -#: ../fdroidserver/__main__.py -msgid "no version info found!" -msgstr "未發現版本資訊!" - #: ../fdroidserver/checkupdates.py #, fuzzy msgid "no version information found" msgstr "未發現版本資訊" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "not allowed with argument %s" msgstr "不許可帶引數 %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "one of the arguments %s is required" @@ -2479,72 +2428,6 @@ msgstr "引數 %s 必須要有一個" msgid "only accepts strings, lists, and tuples" msgstr "只接受字串,列表和元組" -#: ../fdroidserver/install.py -#, python-format -msgid "option %s: If you really want to install all the signed apps, use --all" -msgstr "選項 %s: 如果真要安裝全部的簽署應用, 請使用 --all" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid %s value: %r" -msgstr "選項 %s: 無效的 %s 值: %r" - -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -#, python-format -msgid "option %s: invalid choice: %r (choose from %s)" -msgstr "選項 %s: 無效選項: %r (選自 %s )" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s not recognized" -msgstr "不能識別選項 -%s" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option -%s requires argument" -msgstr "選項 -%s 需要參數" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s must not have an argument" -msgstr "選項 --%s 不能有參數" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not a unique prefix" -msgstr "選項 --%s 不是單獨的字首" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s not recognized" -msgstr "不能識別選項 --%s" - -#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py -#: /usr/lib/python3.7/getopt.py /usr/lib/python3.9/getopt.py -#: /usr/lib/python3.11/getopt.py -#, python-format -msgid "option --%s requires argument" -msgstr "選項 --%s 需要參數" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py -msgid "optional arguments" -msgstr "可選參數" - #: /usr/lib/python3.11/argparse.py #, fuzzy msgid "options" @@ -2555,8 +2438,6 @@ msgstr "選項" msgid "overwriting existing {path}" msgstr "覆寫現有的 {path}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py msgid "positional arguments" msgstr "位置參數" @@ -2568,7 +2449,7 @@ msgstr "將進程日誌 {path} 部署到 {dest} 但失敗了!" #: ../fdroidserver/build.py msgid "reference binary missing signature" -msgstr "" +msgstr "參考二進位檔缺少簽章" #: ../fdroidserver/signatures.py #, python-brace-format @@ -2582,17 +2463,12 @@ msgstr "軟體庫圖標 (repo_icon)\"repo/icons/%s\" 不存在, 正在生 #: ../fdroidserver/common.py msgid "repo_url needs to end with /repo" -msgstr "" +msgstr "repo_url 必須以 /repo 結尾" #: ../fdroidserver/deploy.py #, python-brace-format msgid "rsync is missing or broken: {error}" -msgstr "" - -#: ../fdroidserver/metadata.py -#, fuzzy -msgid "ruamel.yaml not installed, can not write metadata." -msgstr "因為沒有設置 ruamel.yaml, 無法寫入 metadata 。" +msgstr "rsync 遺失或損壞:{error}" #: ../fdroidserver/deploy.py #, python-brace-format @@ -2607,7 +2483,7 @@ msgstr "s3cmd 同步索引 {path} 到 {url} 並刪除" #: ../fdroidserver/scanner.py #, python-brace-format msgid "scanner cache is malformed! You can clear it with: '{clear}'" -msgstr "" +msgstr "掃描器快取格式錯誤!您可以使用以下指令清除它:'{clear}'" #: ../fdroidserver/deploy.py msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:" @@ -2618,17 +2494,7 @@ msgstr "serverwebroot: 路徑沒有以「fdroid」結尾,也許你想表達的 msgid "shared library" msgstr "共享庫 (shared library)" -#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/optparse.py -msgid "show program's version number and exit" -msgstr "顯示程式的版本號碼並離開" - -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py -#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.7/optparse.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.9/optparse.py -#: /usr/lib/python3.11/argparse.py /usr/lib/python3.11/optparse.py +#: /usr/lib/python3.11/argparse.py msgid "show this help message and exit" msgstr "顯示此說明訊息並離開" @@ -2661,31 +2527,27 @@ msgstr "靜態庫 (static library)" #: ../fdroidserver/build.py #, python-brace-format msgid "supplied reference binary has allowed signer {signer}" -msgstr "" +msgstr "提供的參考二進位檔具有允許的簽署者 {signer}" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "the following arguments are required: %s" msgstr "需要下列參數:%s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py +#: ../fdroidserver/install.py +msgid "true" +msgstr "" + #: /usr/lib/python3.11/argparse.py #, python-format msgid "unexpected option string: %s" msgstr "非預期選項字串: %s" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unknown parser %(parser_name)r (choices: %(choices)s)" msgstr "不明解析器 %(parser_name)r (選項: %(choices)s)" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py -#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py #: /usr/lib/python3.11/argparse.py #, python-format msgid "unrecognized arguments: %s" @@ -2696,9 +2558,7 @@ msgstr "無法辨識的引數:%s" msgid "unsafe permissions on '{config_file}' (should be 0600)!" msgstr "'{config_file}' 檔案不安全的權限(應為 0600)!" -#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid -#: /usr/lib/python3.7/argparse.py ../fdroidserver/__main__.py -#: /usr/lib/python3.9/argparse.py /usr/lib/python3.11/argparse.py +#: ../fdroidserver/__main__.py /usr/lib/python3.11/argparse.py msgid "usage: " msgstr "使用方法: " @@ -2712,6 +2572,10 @@ msgstr "使用 Apache libcloud 來同步 {url}" msgid "virustotal.com is rate limiting, waiting to retry..." msgstr "因為 virustotal.com 正在限制收到請求的頻率, 這邊正在等待中, 過一會再試 ..." +#: ../fdroidserver/install.py +msgid "yes" +msgstr "是" + #: ../fdroidserver/publish.py #, python-brace-format msgid "{0} app, {1} key aliases" @@ -2723,21 +2587,19 @@ msgstr[0] "{0} 應用, {1} 主要別名" msgid "{apkfilename} ({appid}) has no metadata!" msgstr "{apkfilename} ({appid}) 沒有中介資料!" -#: ../fdroidserver/update.py -#, python-brace-format -msgid "{apkfilename} has multiple {name} files, looks like Master Key exploit!" -msgstr "{apkfilename} 有多個 {name} 檔案,看起來可能是主金鑰洩漏了!" - +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, python-brace-format msgid "{apkfilename}'s AndroidManifest.xml has a bad date: " msgstr "{apkfilename} AndroidManifest.xml 有一個無效的日期: " +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} does not have a name! Using application ID instead." msgstr "軟體 {appid} 沒有名字! 使用 application ID 代替。" +#. Translators: https://developer.android.com/build/configure-app-module#set-application-id #: ../fdroidserver/update.py #, fuzzy, python-brace-format msgid "{appid} from {path} is not a valid Android application ID!" @@ -2751,14 +2613,13 @@ msgstr "來自 {path} 的 {appid} 並不是一個有效的 Java 套件名稱!" #: ../fdroidserver/update.py #, python-brace-format msgid "{appid} has both APKs and files: {files}" -msgstr "" +msgstr "{appid} 同時具有 APK 和檔案:{files}" #: ../fdroidserver/mirror.py #, python-brace-format msgid "{appid} is missing {name}" msgstr "{appid} 缺少 {name}" -#. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname #: ../fdroidserver/lint.py #, python-brace-format msgid "{appid}: Unknown extlib {path} in build '{versionName}'" @@ -2799,10 +2660,10 @@ msgstr "檔案 {file} 是空的或損壞的 !" msgid "{name} \"{section}/icons/{path}\" does not exist! Check \"config.yml\"." msgstr "{name} \"{section}/icons/{path}\" 不存在! 請檢查 \"config.yml\"." -#: ../fdroidserver/common.py -#, fuzzy, python-brace-format -msgid "{oldfile} is deprecated, use {newfile}" -msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}" +#: ../fdroidserver/update.py +#, python-brace-format +msgid "{path1} is a duplicate of {path2}, remove one!" +msgstr "" #: ../fdroidserver/import_subcommand.py #, fuzzy, python-brace-format @@ -2822,12 +2683,17 @@ msgstr "{path} 有不正確的檔案簽章「{pattern}」,可能是 Janus 漏 #: ../fdroidserver/deploy.py #, python-brace-format msgid "{path} has been flagged by virustotal {count} times:" -msgstr "" +msgstr "{path} 已被 VirusTotal 標記 {count} 次:" + +#: ../fdroidserver/install.py +#, python-brace-format +msgid "{path} has the wrong fingerprint ({fingerprint})!" +msgstr "{path} 的指紋({fingerprint})不正確!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not \"key: value\" dict, but a {datatype}!" -msgstr "" +msgstr "{path} 不是「鍵:值」字典,而是一個 {datatype}!" #: ../fdroidserver/common.py #, fuzzy, python-brace-format @@ -2837,12 +2703,12 @@ msgstr "'config.yml' 未設定 'sdk_path'!" #: ../fdroidserver/index.py #, python-brace-format msgid "{path} is not list, but a {datatype}!" -msgstr "" +msgstr "{path} 不是清單,而是一個 {datatype}!" #: ../fdroidserver/common.py #, python-brace-format msgid "{path} is not {expected_type}, but a {datatype}!" -msgstr "" +msgstr "{path} 不是 {expected_type},而是一個 {datatype}!" #: ../fdroidserver/update.py #, python-brace-format @@ -2857,7 +2723,7 @@ msgstr "檔案 {path} 大於 200MB , 手動上傳: {url}" #: ../fdroidserver/lint.py #, python-brace-format msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!" -msgstr "" +msgstr "{path}:「{code}」不是有效的 ISO 3166-1 alpha-2 國家代碼!" #: ../fdroidserver/update.py #, fuzzy, python-brace-format diff --git a/makebuildserver b/makebuildserver index bdeca683..34962ca7 100755 --- a/makebuildserver +++ b/makebuildserver @@ -48,17 +48,17 @@ logging.basicConfig(format=logformat, level=loglevel) tail = None BASEBOX_DEFAULT = 'debian/bookworm64' -BASEBOX_VERSION_DEFAULT = "12.20231211.1" +BASEBOX_VERSION_DEFAULT = "12.20250126.1" BASEBOX_CHECKSUMS = { - "12.20231211.1": { + "12.20250126.1": { "libvirt": { - "box.img": "80b048312c423b7fbbbac934c348f9a29bdf2f98fae96dd13b3af70ddfe7f12a", + "box.img": "64eb111ab8b0785253c7542caaa7f560d4532b8133266ec94804882d209017d3", "Vagrantfile": "f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47", - "metadata.json": "9d717678c19bb81d077e4e7eeb3602c168b6568cc38fee8fd3aa9d8f3cfe639b", + "metadata.json": "20dc0268a79410dbf01c7e544ba5138f6f695a298b53c56c87a25f68c5031173", }, "virtualbox": { - "box.ovf": "8ad49ba600fbd1027e35c8fd41d37383c04bad30fdbafa860a29911d207a3e7b", - "box.vmdk": "57602a776860805e82bd3f61cdca9711f39781011db0f8f1dee9b2a614b2c889", + "box.ovf": "d8493bdfc4c42b5f66b815efe2a90d20b639eb2ce12cc8c7c51a3039674d146a", + "box.vmdk": "6927001058f57b325544c399297c41ec9c6fbfc21cb764b58f2ff0495864a4fa", "Vagrantfile": "0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d", "metadata.json": "ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a", } @@ -262,6 +262,7 @@ def main(): # https://phoenhex.re/2018-03-25/not-a-vagrant-bug os_env = os.environ.copy() os_env['VAGRANT_DISABLE_VBOXSYMLINKCREATE'] = '1' + os_env['VAGRANT_SERVER_URL'] = 'https://vagrantcloud.com/api/v2/vagrant' v.env = os_env if options.verbosity >= 2: diff --git a/pyproject.toml b/pyproject.toml index a64bae4e..c0ae09c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,4 +1,3 @@ - # We ignore the following PEP8 warnings # * E123: closing bracket does not match indentation of opening bracket's line # - Broken if multiple indentation levels start on a single line @@ -21,7 +20,7 @@ ignore = "E123,E203,E402,E501,W503" [tool.black] skip-string-normalization = true target-version = ["py38"] -include = '(^fdroid|\.pyi?|\.TestCase)$' +include = '(^fdroid|\.pyi?)$' # These files will never be included in black runs. To run black on # one of thes files, remove it from this list. force-exclude = '''( @@ -31,31 +30,23 @@ force-exclude = '''( | examples/fdroid_exportkeystore\.py | examples/fdroid_fetchsrclibs\.py | examples/fdroid_nitrokeyimport\.py - | fdroidserver/__init__\.py | fdroidserver/__main__\.py | fdroidserver/apksigcopier\.py | fdroidserver/looseversion\.py | fdroidserver/build\.py | fdroidserver/checkupdates\.py | fdroidserver/common\.py - | fdroidserver/import_subcommand\.py | fdroidserver/index\.py | fdroidserver/metadata\.py - | fdroidserver/nightly\.py - | fdroidserver/publish\.py | fdroidserver/update\.py | fdroidserver/vmtools\.py - | locale/pick-complete-translations\.py | tests/config\.py | tests/extra/manual-vmtools-test\.py | tests/gradle-release-checksums\.py | tests/openssl-version-check-test\.py | tests/valid-package-names/test\.py - | tests/checkupdates\.TestCase - | tests/common\.TestCase - | tests/publish\.TestCase - | tests/signatures\.TestCase - | tests/update\.TestCase + | tests/test_common\.py + | tests/test_update\.py )$''' @@ -85,7 +76,7 @@ disable_error_code = "no-redef, misc, arg-type" # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the # number of processors available to use, and will cap the count on Windows to # avoid hangs. -jobs = 4 +jobs = 0 # Minimum Python version to use for version dependent checks. Will default to the # version used to run pylint. @@ -94,10 +85,6 @@ py-version = "3.9" # Files or directories to be skipped. They should be base names, not paths. ignore = ["apksigcopier.py", "looseversion.py"] -[tool.pylint.basic] -# Good variable names which should always be accepted, separated by a comma. -good-names = ["i", "j", "k", "ex", "Run", "f", "fp"] - [tool.pylint."messages control"] # Only show warnings with the listed confidence levels. Leave empty to show all. # Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, UNDEFINED. diff --git a/setup.py b/setup.py index 6b9be802..5fa1c9b4 100755 --- a/setup.py +++ b/setup.py @@ -4,8 +4,7 @@ import re import subprocess import sys -from setuptools import Command -from setuptools import setup +from setuptools import Command, setup from setuptools.command.install import install @@ -71,7 +70,7 @@ with open("README.md", "r") as fh: setup( name='fdroidserver', - version='2.3a2', + version='2.4.2', description='F-Droid Server Tools', long_description=long_description, long_description_content_type='text/markdown', @@ -94,13 +93,16 @@ setup( 'platformdirs', 'androguard >= 3.3.5', 'asn1crypto', + # TODO use biplist on all platforms once IPA support is stable + 'biplist ; sys_platform=="darwin"', 'clint', 'defusedxml', 'GitPython', 'oscrypto', 'paramiko', 'Pillow', - 'apache-libcloud >= 0.14.1', + 'puremagic', + 'pycountry ; sys_platform=="darwin"', 'python-vagrant', 'PyYAML', 'qrcode', @@ -108,13 +110,19 @@ setup( 'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0', 'sdkmanager >= 0.6.4', 'yamllint', + 'tomli >= 1.1.0; python_version < "3.11"', ], # Some requires are only needed for very limited cases: # * biplist is only used for parsing Apple .ipa files # * pycountry is only for linting config/mirrors.yml + # * python-magic is preferred when the C library libmagic is installed extras_require={ - 'optional': ['biplist', 'pycountry'], - 'test': ['pyjks', 'html5print'], + 'optional': [ + 'biplist', + 'pycountry', + 'python-magic', + ], + 'test': ['pyjks', 'html5print', 'testcontainers[minio]'], 'docs': [ 'sphinx', 'numpydoc', @@ -123,7 +131,7 @@ setup( ], }, classifiers=[ - 'Development Status :: 4 - Beta', + 'Development Status :: 5 - Production/Stable', 'Intended Audience :: Developers', 'Intended Audience :: Information Technology', 'Intended Audience :: System Administrators', @@ -132,6 +140,13 @@ setup( 'Operating System :: POSIX', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Unix', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.9', + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + 'Programming Language :: Python :: 3 :: Only', 'Topic :: Utilities', ], ) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/build/info.guardianproject.urzip/.fdroid.yml b/tests/build/info.guardianproject.urzip/.fdroid.yml index 7f2b3c1c..beea89be 100644 --- a/tests/build/info.guardianproject.urzip/.fdroid.yml +++ b/tests/build/info.guardianproject.urzip/.fdroid.yml @@ -1,4 +1,3 @@ - Summary: This should be overridden by metadata/info.guardianproject.urzip.yml Builds: - versionCode: 50 diff --git a/tests/checkupdates.TestCase b/tests/checkupdates.TestCase deleted file mode 100755 index 9ff7eb98..00000000 --- a/tests/checkupdates.TestCase +++ /dev/null @@ -1,337 +0,0 @@ -#!/usr/bin/env python3 - -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import logging -import os -import sys -import unittest -from unittest import mock -from pathlib import Path - - -localmodule = Path(__file__).resolve().parent.parent -print('localmodule: ' + str(localmodule)) -if localmodule not in sys.path: - sys.path.insert(0, str(localmodule)) - -import fdroidserver.checkupdates -import fdroidserver.metadata -from fdroidserver.exception import FDroidException - - -class CheckupdatesTest(unittest.TestCase): - '''fdroidserver/checkupdates.py''' - - def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = localmodule / 'tests' - os.chdir(self.basedir) - - def test_autoupdatemode_no_suffix(self): - fdroidserver.checkupdates.config = {} - - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersion = '1.1.8-fdroid' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'HTTP' - app.AutoUpdateMode = 'Version %v' - - build = fdroidserver.metadata.Build() - build.versionCode = app.CurrentVersionCode - build.versionName = app.CurrentVersion - app['Builds'].append(build) - - with mock.patch( - 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) - ): - with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): - with mock.patch('subprocess.call', lambda cmd: 0): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - build = app['Builds'][-1] - self.assertEqual(build.versionName, '1.1.9') - self.assertEqual(build.commit, '1.1.9') - - with mock.patch( - 'fdroidserver.checkupdates.check_http', lambda app: ('1.7.9', 10107) - ): - with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): - with mock.patch('subprocess.call', lambda cmd: 0): - with self.assertRaises(FDroidException): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - build = app['Builds'][-1] - self.assertEqual(build.versionName, '1.1.9') - self.assertEqual(build.commit, '1.1.9') - - def test_autoupdatemode_suffix(self): - fdroidserver.checkupdates.config = {} - - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersion = '1.1.8-fdroid' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'HTTP' - app.AutoUpdateMode = r'Version +.%c-fdroid v%v_%c' - - build = fdroidserver.metadata.Build() - build.versionCode = app.CurrentVersionCode - build.versionName = app.CurrentVersion - app['Builds'].append(build) - - with mock.patch( - 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) - ): - with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): - with mock.patch('subprocess.call', lambda cmd: 0): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - build = app['Builds'][-1] - self.assertEqual(build.versionName, '1.1.9.10109-fdroid') - self.assertEqual(build.commit, 'v1.1.9_10109') - - def test_autoupdate_multi_variants(self): - fdroidserver.checkupdates.config = {} - - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersion = '1.1.8' - app.CurrentVersionCode = 101083 - app.UpdateCheckMode = 'Tags' - app.AutoUpdateMode = r'Version' - app.VercodeOperation = [ - "10*%c+1", - "10*%c+3", - ] - - build = fdroidserver.metadata.Build() - build.versionCode = app.CurrentVersionCode - 2 - build.versionName = app.CurrentVersion - build.gradle = ["arm"] - app['Builds'].append(build) - - build = fdroidserver.metadata.Build() - build.versionCode = app.CurrentVersionCode - build.versionName = app.CurrentVersion - build.gradle = ["x86"] - app['Builds'].append(build) - - with mock.patch( - 'fdroidserver.checkupdates.check_tags', - lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), - ): - with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): - with mock.patch('subprocess.call', lambda cmd: 0): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - build = app['Builds'][-2] - self.assertEqual(build.versionName, '1.1.9') - self.assertEqual(build.versionCode, 101091) - self.assertEqual(build.gradle, ["arm"]) - - build = app['Builds'][-1] - self.assertEqual(build.versionName, '1.1.9') - self.assertEqual(build.versionCode, 101093) - self.assertEqual(build.gradle, ["x86"]) - - self.assertEqual(app.CurrentVersion, '1.1.9') - self.assertEqual(app.CurrentVersionCode, 101093) - - def test_checkupdates_app_http(self): - fdroidserver.checkupdates.config = {} - - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'HTTP' - app.UpdateCheckData = 'mock' - - with mock.patch( - 'fdroidserver.checkupdates.check_http', lambda app: (None, 'bla') - ): - with self.assertRaises(FDroidException): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - with mock.patch( - 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) - ): - with mock.patch( - 'fdroidserver.metadata.write_metadata', mock.Mock() - ) as wrmock: - with mock.patch('subprocess.call', lambda cmd: 0): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - wrmock.assert_called_with(app.metadatapath, app) - - def test_checkupdates_app_tags(self): - fdroidserver.checkupdates.config = {} - - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersion = '1.1.8' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'Tags' - app.AutoUpdateMode = 'Version' - - build = fdroidserver.metadata.Build() - build.versionCode = app.CurrentVersionCode - build.versionName = app.CurrentVersion - app['Builds'].append(build) - - with mock.patch( - 'fdroidserver.checkupdates.check_tags', - lambda app, pattern: (None, 'bla', None), - ): - with self.assertRaises(FDroidException): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - with mock.patch( - 'fdroidserver.checkupdates.check_tags', - lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), - ): - with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): - with mock.patch('subprocess.call', lambda cmd: 0): - fdroidserver.checkupdates.checkupdates_app(app, auto=True) - - build = app['Builds'][-1] - self.assertEqual(build.versionName, '1.1.9') - self.assertEqual(build.commit, 'v1.1.9') - - def test_check_http(self): - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'HTTP' - app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' - app.UpdateCheckIgnore = 'beta' - - respmock = mock.Mock() - respmock.read = lambda: 'v1.1.9\nc10109'.encode('utf-8') - with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): - vername, vercode = fdroidserver.checkupdates.check_http(app) - self.assertEqual(vername, '1.1.9') - self.assertEqual(vercode, 10109) - - def test_check_http_blocks_unknown_schemes(self): - app = fdroidserver.metadata.App() - for scheme in ('file', 'ssh', 'http', ';pwn'): - app.id = scheme - faked = scheme + '://fake.url/for/testing/scheme' - app.UpdateCheckData = faked + '|ignored|' + faked + '|ignored' - app.metadatapath = 'metadata/' + app.id + '.yml' - with self.assertRaises(FDroidException): - fdroidserver.checkupdates.check_http(app) - - def test_check_http_ignore(self): - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'HTTP' - app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' - app.UpdateCheckIgnore = 'beta' - - respmock = mock.Mock() - respmock.read = lambda: 'v1.1.9-beta\nc10109'.encode('utf-8') - with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): - vername, vercode = fdroidserver.checkupdates.check_http(app) - self.assertEqual(vername, None) - - def test_check_tags_data(self): - app = fdroidserver.metadata.App() - app.id = 'loop.starts.shooting' - app.metadatapath = 'metadata/' + app.id + '.yml' - app.RepoType = 'git' - app.CurrentVersionCode = 10108 - app.UpdateCheckMode = 'Tags' - app.UpdateCheckData = r'b.txt|c(.*)|e.txt|v(.*)' - - vcs = mock.Mock() - vcs.latesttags.return_value = ['1.1.9', '1.1.8'] - with mock.patch( - 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' - ) as _ignored, mock.patch.object( - Path, 'is_file' - ) as mock_path, mock.patch('fdroidserver.common.getvcs', return_value=vcs): - _ignored # silence the linters - mock_path.is_file.return_falue = True - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '1.1.9') - self.assertEqual(vercode, 10109) - - app.UpdateCheckData = r'b.txt|c(.*)|.|v(.*)' - with mock.patch( - 'pathlib.Path.read_text', lambda a: 'v1.1.0\nc10109' - ) as _ignored, mock.patch.object( - Path, 'is_file' - ) as mock_path, mock.patch('fdroidserver.common.getvcs', return_value=vcs): - _ignored # silence the linters - mock_path.is_file.return_falue = True - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '1.1.0') - self.assertEqual(vercode, 10109) - - app.UpdateCheckData = r'b.txt|c(.*)||' - with mock.patch( - 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' - ) as _ignored, mock.patch.object( - Path, 'is_file' - ) as mock_path, mock.patch('fdroidserver.common.getvcs', return_value=vcs): - _ignored # silence the linters - mock_path.is_file.return_falue = True - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '1.1.9') - self.assertEqual(vercode, 10109) - - vcs.latesttags.return_value = ['Android-1.1.0', '1.1.8'] - app.UpdateCheckData = r'b.txt|c(.*)||Android-([\d.]+)' - with mock.patch( - 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' - ) as _ignored, mock.patch.object( - Path, 'is_file' - ) as mock_path, mock.patch('fdroidserver.common.getvcs', return_value=vcs): - _ignored # silence the linters - mock_path.is_file.return_falue = True - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '1.1.0') - self.assertEqual(vercode, 10109) - - app.UpdateCheckData = r'|\+(\d+)||Android-([\d.]+)' - vcs.latesttags.return_value = ['Android-1.1.0+1'] - with mock.patch('fdroidserver.common.getvcs', return_value=vcs): - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '1.1.0') - self.assertEqual(vercode, 1) - - app.UpdateCheckData = '|||' - vcs.latesttags.return_value = ['2'] - with mock.patch('fdroidserver.common.getvcs', return_value=vcs): - vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) - self.assertEqual(vername, '2') - self.assertEqual(vercode, 2) - - -if __name__ == "__main__": - import argparse - from testcommon import parse_args_for_test - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(CheckupdatesTest)) - unittest.main(failfast=False) diff --git a/tests/config.py b/tests/config.py deleted file mode 100644 index 899ee68c..00000000 --- a/tests/config.py +++ /dev/null @@ -1,33 +0,0 @@ - -# TODO convert to config.yml! - -repo_url = "https://MyFirstFDroidRepo.org/fdroid/repo" -repo_name = "My First F-Droid Repo Demo" -repo_description = """This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid.""" - -archive_older = 3 -archive_url = "https://f-droid.org/archive" -archive_name = "My First F-Droid Archive Demo" -archive_description = """ -The repository of older versions of applications from the main demo repository. -""" - -make_current_version_link = False - -repo_keyalias = "sova" -keystore = "keystore.jks" -keystorepass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" -keypass = "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" -keydname = "CN=sova, OU=F-Droid" - -mirrors = ( - 'http://foobarfoobarfoobar.onion/fdroid', - 'https://foo.bar/fdroid', -) - -update_stats = True - -install_list = 'org.adaway' -uninstall_list = ('com.android.vending', 'com.facebook.orca', ) - -repo_key_sha256 = "f49af3f11efddf20dffd70f5e3117b9976674167adca280e6b1932a0601b26f6" diff --git a/tests/config.yml b/tests/config.yml new file mode 100644 index 00000000..75b1eadf --- /dev/null +++ b/tests/config.yml @@ -0,0 +1,29 @@ +--- + +repo_url: https://MyFirstFDroidRepo.org/fdroid/repo +repo_name: My First F-Droid Repo Demo +repo_description: This is a repository of apps to be used with F-Droid. Applications in this repository are either official binaries built by the original application developers, or are binaries built from source by the admin of f-droid.org using the tools on https://gitlab.com/fdroid. + +archive_older: 3 +archive_url: https://f-droid.org/archive +archive_name: My First F-Droid Archive Demo +archive_description: The repository of older versions of applications from the main demo repository. + +make_current_version_link: false + +repo_keyalias: sova +keystore: keystore.jks +keystorepass: "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" +keypass: "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=" +keydname: "CN=sova, OU=F-Droid" + +mirrors: + - http://foobarfoobarfoobar.onion/fdroid + - https://foo.bar/fdroid + +install_list: org.adaway +uninstall_list: ['com.android.vending', 'com.facebook.orca'] + +repo_key_sha256: f49af3f11efddf20dffd70f5e3117b9976674167adca280e6b1932a0601b26f6 + +gpgkey: F9A6B8DF7566FCAB173AAB3516D6C4D3CE71F7FB diff --git a/tests/config/antiFeatures.yml b/tests/config/antiFeatures.yml index 06d794a1..cb4dc676 100644 --- a/tests/config/antiFeatures.yml +++ b/tests/config/antiFeatures.yml @@ -39,7 +39,3 @@ Tracking: description: This app tracks and reports your activity icon: ic_antifeature_tracking.xml name: Tracking -UpstreamNonFree: - description: The upstream source code is not entirely Free - icon: ic_antifeature_upstreamnonfree.xml - name: Upstream Non-Free diff --git a/tests/config/de/antiFeatures.yml b/tests/config/de/antiFeatures.yml index 3053e41a..65111db1 100644 --- a/tests/config/de/antiFeatures.yml +++ b/tests/config/de/antiFeatures.yml @@ -38,7 +38,3 @@ Tracking: description: Diese App verfolgt und versendet Ihre Aktivitäten icon: ic_antifeature_tracking.xml name: Tracking -UpstreamNonFree: - description: Der Originalcode ist nicht völlig quelloffen - icon: ic_antifeature_upstreamnonfree.xml - name: Originalcode nicht-quelloffen diff --git a/tests/config/fa/antiFeatures.yml b/tests/config/fa/antiFeatures.yml index 554dcee9..aa8290ef 100644 --- a/tests/config/fa/antiFeatures.yml +++ b/tests/config/fa/antiFeatures.yml @@ -37,7 +37,3 @@ Tracking: description: این کاره، فعّالیتتان را ردیابی و گزارش می‌کند icon: ic_antifeature_tracking.xml name: ردیابی -UpstreamNonFree: - description: کد مبدأ بالادستی کاملاً آزاد نیست - icon: ic_antifeature_upstreamnonfree.xml - name: بالادست ناآزاد diff --git a/tests/config/ro/antiFeatures.yml b/tests/config/ro/antiFeatures.yml index 97d61172..9610b448 100644 --- a/tests/config/ro/antiFeatures.yml +++ b/tests/config/ro/antiFeatures.yml @@ -38,7 +38,3 @@ Tracking: description: Aplicația îți înregistrează și raportează activitatea undeva icon: ic_antifeature_tracking.xml name: Urmărire -UpstreamNonFree: - description: Codul sursa originar nu este în totalitatea lui software liber - icon: ic_antifeature_upstreamnonfree.xml - name: Surse ne-libere diff --git a/tests/config/zh-rCN/antiFeatures.yml b/tests/config/zh-rCN/antiFeatures.yml index a1b287b9..2c9f0819 100644 --- a/tests/config/zh-rCN/antiFeatures.yml +++ b/tests/config/zh-rCN/antiFeatures.yml @@ -37,7 +37,3 @@ Tracking: description: 此应用会记录并报告你的活动 icon: ic_antifeature_tracking.xml name: 跟踪用户 -UpstreamNonFree: - description: 上游源代码不是完全自由的 - icon: ic_antifeature_upstreamnonfree.xml - name: 上游代码非自由 diff --git a/tests/dump_internal_metadata_format.py b/tests/dump_internal_metadata_format.py index f9763ebc..ffc72059 100755 --- a/tests/dump_internal_metadata_format.py +++ b/tests/dump_internal_metadata_format.py @@ -25,7 +25,6 @@ import sys from argparse import ArgumentParser import git - import yaml localmodule = os.path.realpath( diff --git a/tests/extra/manual-vmtools-test.py b/tests/extra/manual-vmtools-test.py index 0f0c745b..2f01c9ff 100755 --- a/tests/extra/manual-vmtools-test.py +++ b/tests/extra/manual-vmtools-test.py @@ -4,12 +4,12 @@ # that run in the buildserver setup. It is not really maintained, but # is still here as a kind of reference. +import inspect +import logging import os import sys -import logging -import textwrap import tempfile -import inspect +import textwrap from argparse import ArgumentParser localmodule = os.path.realpath( diff --git a/tests/funding-usernames.yaml b/tests/funding-usernames.yaml index 04c08a13..ccc8d8a2 100644 --- a/tests/funding-usernames.yaml +++ b/tests/funding-usernames.yaml @@ -17,7 +17,6 @@ custom: - https://email.faircode.eu/donate/ - https://etchdroid.depau.eu/donate/ - https://f-droid.org/about/ - - https://flattr.com/github/bk138 - https://gultsch.de/donate.html - https://jahir.dev/donate - https://kodi.tv/contribute/donate diff --git a/tests/get-country-region-data.py b/tests/get-country-region-data.py index f0f52e4b..240d70b2 100755 --- a/tests/get-country-region-data.py +++ b/tests/get-country-region-data.py @@ -5,11 +5,12 @@ import collections import os import re -import requests -import requests_cache import sys import tempfile +import requests +import requests_cache + def main(): # we want all the data diff --git a/tests/gradle-release-checksums.py b/tests/gradle-release-checksums.py index 0c190ebf..53ceb1a5 100755 --- a/tests/gradle-release-checksums.py +++ b/tests/gradle-release-checksums.py @@ -1,16 +1,14 @@ #!/usr/bin/env python3 -import git -import gitlab import os import re -import requests import subprocess import sys + +import requests from colorama import Fore, Style from packaging.version import Version - checksums = None versions = dict() @@ -64,88 +62,6 @@ for version in sorted(versions.keys()): with open('makebuildserver', 'w') as fp: fp.write(makebuildserver_current) -# write out update to gradlew-fdroid -with open('gradlew-fdroid') as fp: - gradlew_fdroid = fp.read() -current = '' -get_sha_pat = re.compile(r""" +'([0-9][0-9.]+[0-9])'\)\s+echo '([0-9a-f]{64})' ;;\n""") -for m in get_sha_pat.finditer(gradlew_fdroid): - current += m.group() - checksum = m.group(2) - if checksum != versions[m.group(1)]: - print(Fore.RED - + 'ERROR: checksum mismatch:', checksum, versions[m.group(1)] - + Style.RESET_ALL) - errors += 1 -new = '' -for version in sorted(versions.keys(), key=Version): - sha256 = versions[version] - spaces = '' - for i in range(6 - len(version)): - spaces += ' ' - new += """ '%s')%s echo '%s' ;;\n""" % (version, spaces, sha256) -gradlew_fdroid = gradlew_fdroid.replace(current, new) -plugin_v = ' '.join(sorted(versions.keys(), key=Version, reverse=True)) -plugin_v_pat = re.compile(r'\nplugin_v=\(([0-9. ]+)\)') -with open('gradlew-fdroid', 'w') as fp: - fp.write(plugin_v_pat.sub('\nplugin_v=(%s)' % plugin_v, gradlew_fdroid)) - -if os.getenv('CI_PROJECT_NAMESPACE') != 'fdroid': - p = subprocess.run(['git', '--no-pager', 'diff']) - print(p.stdout) - sys.exit(errors) - -# This only runs after commits are pushed to fdroid/fdroidserver -git_repo = git.repo.Repo('.') -modified = git_repo.git().ls_files(modified=True).split() -if git_repo.is_dirty() and ('gradlew-fdroid' in modified or 'makebuildserver' in modified): - private_token = os.getenv('PERSONAL_ACCESS_TOKEN') - if not private_token: - print(Fore.RED - + 'ERROR: GitLab Token not found in PERSONAL_ACCESS_TOKEN!' - + Style.RESET_ALL) - sys.exit(1) - - branch = git_repo.create_head(os.path.basename(__file__), force=True) - branch.checkout() - git_repo.index.add(['gradlew-fdroid', 'makebuildserver']) - author = git.Actor('fdroid-bot', 'fdroid-bot@f-droid.org') - git_repo.index.commit('gradle v' + version, author=author) - project_path = 'fdroid-bot/' + os.getenv('CI_PROJECT_NAME') - url = ('https://gitlab-ci-token:%s@%s/%s.git' - % (os.getenv('PERSONAL_ACCESS_TOKEN'), os.getenv('CI_SERVER_HOST'), project_path)) - remote_name = 'fdroid-bot' - try: - remote = git_repo.create_remote(remote_name, url) - # See https://github.com/PyCQA/pylint/issues/2856 . - # pylint: disable-next=no-member - except git.exc.GitCommandError: - remote = git.remote.Remote(git_repo, remote_name) - remote.set_url(url) - remote.push(force=True) - git.remote.Remote.rm(git_repo, remote_name) - - gl = gitlab.Gitlab(os.getenv('CI_SERVER_URL'), api_version=4, - private_token=private_token) - project = gl.projects.get(project_path, lazy=True) - description = ( - 'see ' - '\n\n

generated by GitLab CI Job #%s

' - % (os.getenv('CI_PROJECT_URL'), os.getenv('CI_JOB_ID'), os.getenv('CI_JOB_ID')) - ) - try: - mr = project.mergerequests.create({ - 'source_branch': branch.name, - 'target_project_id': 36527, # fdroid/fdroidserver - 'target_branch': 'master', - 'title': 'update to gradle v' + version, - 'description': description, - 'labels': ['fdroid-bot', 'gradle'], - 'remove_source_branch': True, - }) - mr.save() - except gitlab.exceptions.GitlabCreateError as e: - if e.response_code == 409: # Another open merge request already exists for this source branch - print(e.error_message) - else: - raise e +p = subprocess.run(['git', '--no-pager', 'diff']) +errors += p.returncode +sys.exit(errors) diff --git a/tests/init.TestCase b/tests/init.TestCase deleted file mode 100755 index 7e674cb5..00000000 --- a/tests/init.TestCase +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/env python3 - -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import inspect -import logging -import os -import shutil -import sys -import unittest - - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.init -from testcommon import mkdtemp, parse_args_for_test - - -class InitTest(unittest.TestCase): - '''fdroidserver/init.py''' - - def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = os.path.join(localmodule, 'tests') - fdroidserver.common.config = None - fdroidserver.init.config = None - self._td = mkdtemp() - self.testdir = self._td.name - - def tearDown(self): - self._td.cleanup() - os.chdir(self.basedir) - - def test_disable_in_config(self): - os.chdir(self.testdir) - with open('config.yml', 'w') as fp: - fp.write('keystore: NONE\n') - fp.write('keypass: mysupersecrets\n') - os.chmod('config.yml', 0o600) - config = fdroidserver.common.read_config() - self.assertEqual('NONE', config['keystore']) - self.assertEqual('mysupersecrets', config['keypass']) - fdroidserver.init.disable_in_config('keypass', 'comment') - with open(fp.name) as fp: - self.assertTrue('#keypass:' in fp.read()) - fdroidserver.common.config = None - config = fdroidserver.common.read_config() - self.assertIsNone(config.get('keypass')) - - @unittest.skipIf(os.name == 'nt', "calling main() like this hangs on Windows") - def test_main_in_empty_dir(self): - """Test that `fdroid init` will find apksigner and add it to the config""" - os.chdir(self.testdir) - - shutil.copy(os.path.join(self.basedir, 'keystore.jks'), self.testdir) - - bindir = os.path.join(os.getcwd(), 'bin') - os.mkdir(bindir) - apksigner = os.path.join(bindir, 'apksigner') - open(apksigner, 'w').close() - os.chmod(apksigner, 0o755) - os.environ['PATH'] = bindir - - sys.argv = ['fdroid init', '--keystore', 'keystore.jks', '--repo-keyalias=sova'] - fdroidserver.init.main() - self.assertEqual(apksigner, fdroidserver.init.config.get('apksigner')) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - fdroidserver.init.options = parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(InitTest)) - unittest.main(failfast=False) diff --git a/tests/install.TestCase b/tests/install.TestCase deleted file mode 100755 index cef5c022..00000000 --- a/tests/install.TestCase +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env python3 - -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import inspect -import os -import sys -import unittest - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.common -import fdroidserver.install - - -class InstallTest(unittest.TestCase): - '''fdroidserver/install.py''' - - def test_devices(self): - config = dict() - fdroidserver.common.fill_config_defaults(config) - fdroidserver.common.config = config - config['adb'] = fdroidserver.common.find_sdk_tools_cmd('adb') - self.assertTrue(os.path.exists(config['adb'])) - self.assertTrue(os.path.isfile(config['adb'])) - devices = fdroidserver.install.devices() - self.assertIsInstance(devices, list, 'install.devices() did not return a list!') - for device in devices: - self.assertIsInstance(device, str) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - from testcommon import parse_args_for_test - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - fdroidserver.install.options = parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(InstallTest)) - unittest.main(failfast=False) diff --git a/tests/key-tricks.py b/tests/key-tricks.py index 7fc0f3ea..a01bf0bf 100755 --- a/tests/key-tricks.py +++ b/tests/key-tricks.py @@ -1,9 +1,10 @@ #!/usr/bin/env python3 import os -import fdroidserver import shutil import sys + +import fdroidserver from fdroidserver import common, nightly if os.getenv('CI') is None: diff --git a/tests/metadata-rewrite-yml/app.with.special.build.params.yml b/tests/metadata-rewrite-yml/app.with.special.build.params.yml index 0fc97b65..95c1695c 100644 --- a/tests/metadata-rewrite-yml/app.with.special.build.params.yml +++ b/tests/metadata-rewrite-yml/app.with.special.build.params.yml @@ -1,5 +1,5 @@ AntiFeatures: - - UpstreamNonFree + - Tracking Categories: - System License: GPL-3.0-only diff --git a/tests/metadata-rewrite-yml/org.fdroid.fdroid.yml b/tests/metadata-rewrite-yml/org.fdroid.fdroid.yml index ed59f61b..fdda453f 100644 --- a/tests/metadata-rewrite-yml/org.fdroid.fdroid.yml +++ b/tests/metadata-rewrite-yml/org.fdroid.fdroid.yml @@ -7,7 +7,6 @@ IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues Translation: https://hosted.weblate.org/projects/f-droid/f-droid Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md Donate: https://f-droid.org/about -FlattrID: '343053' Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 AutoName: F-Droid diff --git a/tests/metadata/app.with.special.build.params.yml b/tests/metadata/app.with.special.build.params.yml index d12c713c..c58cadf1 100644 --- a/tests/metadata/app.with.special.build.params.yml +++ b/tests/metadata/app.with.special.build.params.yml @@ -1,5 +1,5 @@ AntiFeatures: - - UpstreamNonFree + - Tracking Categories: - System License: GPL-3.0-only diff --git a/tests/metadata/com.politedroid.yml b/tests/metadata/com.politedroid.yml index cd474d6c..87d13bcb 100644 --- a/tests/metadata/com.politedroid.yml +++ b/tests/metadata/com.politedroid.yml @@ -22,7 +22,6 @@ Builds: target: android-10 antifeatures: - KnownVuln - - UpstreamNonFree - NonFreeAssets - versionName: '1.3' @@ -43,7 +42,6 @@ Builds: - yes antifeatures: - KnownVuln - - UpstreamNonFree - NonFreeAssets ArchivePolicy: 4 versions diff --git a/tests/metadata/dump/app.with.special.build.params.yaml b/tests/metadata/dump/app.with.special.build.params.yaml index 9698b639..fae6c9ae 100644 --- a/tests/metadata/dump/app.with.special.build.params.yaml +++ b/tests/metadata/dump/app.with.special.build.params.yaml @@ -1,6 +1,8 @@ +%YAML 1.2 +--- AllowedAPKSigningKeys: [] AntiFeatures: - UpstreamNonFree: {} + Tracking: {} ArchivePolicy: 0 AuthorEmail: null AuthorName: null @@ -345,7 +347,6 @@ Description: 'To configure, go to "Settings => Accounts & Sync => Add Account". Appbrain SDK was removed before building.' Disabled: null Donate: null -FlattrID: null IssueTracker: https://github.com/loadrunner/Facebook-Contact-Sync/issues Liberapay: null License: GPL-3.0-only diff --git a/tests/metadata/dump/com.politedroid.yaml b/tests/metadata/dump/com.politedroid.yaml index 57cce841..01d55b82 100644 --- a/tests/metadata/dump/com.politedroid.yaml +++ b/tests/metadata/dump/com.politedroid.yaml @@ -1,3 +1,5 @@ +%YAML 1.2 +--- AllowedAPKSigningKeys: [] AntiFeatures: NoSourceSince: @@ -17,7 +19,6 @@ Builds: antifeatures: KnownVuln: {} NonFreeAssets: {} - UpstreamNonFree: {} binary: null build: '' buildjni: [] @@ -125,7 +126,6 @@ Builds: antifeatures: KnownVuln: {} NonFreeAssets: {} - UpstreamNonFree: {} binary: null build: '' buildjni: [] @@ -170,7 +170,6 @@ CurrentVersionCode: 6 Description: Activates silent mode during calendar events. Disabled: null Donate: null -FlattrID: null IssueTracker: https://github.com/miguelvps/PoliteDroid/issues Liberapay: null License: GPL-3.0-only diff --git a/tests/metadata/dump/org.adaway.yaml b/tests/metadata/dump/org.adaway.yaml index cf448af3..98a249d6 100644 --- a/tests/metadata/dump/org.adaway.yaml +++ b/tests/metadata/dump/org.adaway.yaml @@ -1,3 +1,5 @@ +%YAML 1.2 +--- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: null @@ -1113,7 +1115,6 @@ Description: 'An ad blocker that uses the hosts file. The hosts file read-only.' Disabled: null Donate: http://sufficientlysecure.org/index.php/adaway -FlattrID: '369138' IssueTracker: https://github.com/dschuermann/ad-away/issues Liberapay: null License: GPL-3.0-only diff --git a/tests/metadata/dump/org.smssecure.smssecure.yaml b/tests/metadata/dump/org.smssecure.smssecure.yaml index b363b736..7410aa68 100644 --- a/tests/metadata/dump/org.smssecure.smssecure.yaml +++ b/tests/metadata/dump/org.smssecure.smssecure.yaml @@ -1,3 +1,5 @@ +%YAML 1.2 +--- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: null @@ -383,7 +385,6 @@ Description: 'SMSSecure is an SMS/MMS application that allows you to protect you security by auditing the code.' Disabled: null Donate: null -FlattrID: null IssueTracker: https://github.com/SMSSecure/SMSSecure/issues Liberapay: null License: GPL-3.0-only diff --git a/tests/metadata/dump/org.videolan.vlc.yaml b/tests/metadata/dump/org.videolan.vlc.yaml index 7bcb7dc4..5ecb108b 100644 --- a/tests/metadata/dump/org.videolan.vlc.yaml +++ b/tests/metadata/dump/org.videolan.vlc.yaml @@ -1,3 +1,5 @@ +%YAML 1.2 +--- AllowedAPKSigningKeys: [] AntiFeatures: {} ArchivePolicy: 9 @@ -2604,7 +2606,6 @@ Description: 'Video and audio player that supports a wide range of formats, ' Disabled: null Donate: http://www.videolan.org/contribute.html#money -FlattrID: null IssueTracker: http://www.videolan.org/support/index.html#bugs Liberapay: null License: GPL-3.0-only diff --git a/tests/metadata/duplicate.permisssions.yml b/tests/metadata/duplicate.permisssions.yml index 3401c235..1b721fdb 100644 --- a/tests/metadata/duplicate.permisssions.yml +++ b/tests/metadata/duplicate.permisssions.yml @@ -1,4 +1,4 @@ Categories: -- tests + - tests Name: Duplicate Permisssions Summary: 'Test app for all possible ' diff --git a/tests/metadata/info.guardianproject.urzip.yml b/tests/metadata/info.guardianproject.urzip.yml index d35f7887..cf783f89 100644 --- a/tests/metadata/info.guardianproject.urzip.yml +++ b/tests/metadata/info.guardianproject.urzip.yml @@ -3,10 +3,10 @@ AutoUpdateMode: None Bitcoin: 1Fi5xUHiAPRKxHvyUGVFGt9extBe8Srdbk OpenCollective: f-droid-just-testing Categories: -- Development -- GuardianProject -- 1 -- 2.0 + - Development + - GuardianProject + - 1 + - 2.0 CurrentVersionCode: 2147483647 AuthorWebSite: https://guardianproject.info Description: | diff --git a/tests/metadata/info.zwanenburg.caffeinetile.yml b/tests/metadata/info.zwanenburg.caffeinetile.yml index a1c0b284..50321a81 100644 --- a/tests/metadata/info.zwanenburg.caffeinetile.yml +++ b/tests/metadata/info.zwanenburg.caffeinetile.yml @@ -1,4 +1,4 @@ Categories: -- Development + - Development Name: Caffeine Tile Summary: Test app for extracting icons when an XML one is default diff --git a/tests/metadata/org.adaway.yml b/tests/metadata/org.adaway.yml index 41bdb083..55afc876 100644 --- a/tests/metadata/org.adaway.yml +++ b/tests/metadata/org.adaway.yml @@ -7,7 +7,6 @@ SourceCode: https://github.com/dschuermann/ad-away IssueTracker: https://github.com/dschuermann/ad-away/issues Translation: https://www.transifex.com/dominikschuermann/adaway Donate: http://sufficientlysecure.org/index.php/adaway -FlattrID: '369138' AutoName: AdAway Summary: Block advertisements diff --git a/tests/metadata/org.fdroid.fdroid.yml b/tests/metadata/org.fdroid.fdroid.yml index 9471f9a6..949c4b0f 100644 --- a/tests/metadata/org.fdroid.fdroid.yml +++ b/tests/metadata/org.fdroid.fdroid.yml @@ -7,7 +7,6 @@ IssueTracker: https://gitlab.com/fdroid/fdroidclient/issues Translation: https://hosted.weblate.org/projects/f-droid/f-droid Changelog: https://gitlab.com/fdroid/fdroidclient/raw/HEAD/CHANGELOG.md Donate: https://f-droid.org/about -FlattrID: '343053' Bitcoin: 15u8aAPK4jJ5N8wpWJ5gutAyyeHtKX5i18 AutoName: F-Droid diff --git a/tests/metadata/org.maxsdkversion.yml b/tests/metadata/org.maxsdkversion.yml new file mode 100644 index 00000000..08eab4db --- /dev/null +++ b/tests/metadata/org.maxsdkversion.yml @@ -0,0 +1,2 @@ +Name: maxSdkVersion +Summary: Test setting maxSdkVersion in an APK diff --git a/tests/metadata/org.videolan.vlc.yml b/tests/metadata/org.videolan.vlc.yml index 266f517d..3d40e9e9 100644 --- a/tests/metadata/org.videolan.vlc.yml +++ b/tests/metadata/org.videolan.vlc.yml @@ -317,7 +317,7 @@ Builds: prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi-v7a ./compile.sh release -#0.9.10 vercodes were off + # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10006 disable: doesn't build @@ -328,7 +328,7 @@ Builds: prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=x86 ./compile.sh release -#0.9.10 vercodes were off + # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10007 disable: doesn't build @@ -339,7 +339,7 @@ Builds: prebuild: sed -i '/ant/d' ../Makefile && ln -s vlc-android/$$VLC-2.2$$ ../vlc build: cd ../ && ANDROID_ABI=armeabi ./compile.sh release -#0.9.10 vercodes were off + # 0.9.10 vercodes were off - versionName: 1.0.0 versionCode: 10008 disable: doesn't build diff --git a/tests/metadata/souch.smsbypass.yml b/tests/metadata/souch.smsbypass.yml index 5733673a..ddc8edb7 100644 --- a/tests/metadata/souch.smsbypass.yml +++ b/tests/metadata/souch.smsbypass.yml @@ -5,7 +5,6 @@ WebSite: https://gitlab.com/souch/SMSbypass SourceCode: https://gitlab.com/souch/SMSbypass/tree/HEAD IssueTracker: https://gitlab.com/souch/SMSbypass/issues Donate: http://rodolphe.souchaud.free.fr/donate -FlattrID: cad90e036b975ed129a3ce80a0750466 AutoName: Battery level Summary: Filter SMS and show them in a fake app diff --git a/tests/openssl-version-check-test.py b/tests/openssl-version-check-test.py index d4022126..69a1ff59 100755 --- a/tests/openssl-version-check-test.py +++ b/tests/openssl-version-check-test.py @@ -6,6 +6,7 @@ # This is used in update.has_known_vulnerability() import re + import requests # this list was generated using: diff --git a/tests/org.fdroid.fdroid_1019051.apk.json b/tests/org.fdroid.fdroid_1019051.apk.json new file mode 100644 index 00000000..e71c1704 --- /dev/null +++ b/tests/org.fdroid.fdroid_1019051.apk.json @@ -0,0 +1,43 @@ +{ + "1708238023.6572325": { + "diffoscope": { + "Available-in-Debian-packages": [ + "coreboot-utils", + "ghc", + "libxmlb-dev", + "radare2" + ], + "External-Tools-Required": [ + "cbfstool", + "ghc", + "lipo", + "otool", + "radare2", + "xb-tool" + ], + "Missing-Python-Modules": [ + "pypdf", + "r2pipe" + ], + "VERSION": "240" + }, + "local": { + "file": "unsigned/org.fdroid.fdroid_1019051.apk", + "packageName": "org.fdroid.fdroid", + "sha256": "0eec78236ec5ebb8f416c611717bd659b75d2b6600ef71a50c922efc99dbdca2", + "timestamp": 1708238023.6572325, + "versionCode": 1019051, + "versionName": "1.19.1" + }, + "remote": { + "file": "tmp/org.fdroid.fdroid_1019051.apk", + "packageName": "org.fdroid.fdroid", + "sha256": "162cb14b93bd9b665fff4256b4fc91cfe75fb72335a02b1d0febe606220b50f4", + "timestamp": 1715356428.522411, + "versionCode": 1019051, + "versionName": "1.19.1" + }, + "url": "https://f-droid.org/repo/org.fdroid.fdroid_1019051.apk", + "verified": true + } +} diff --git a/tests/parse-fdroiddata-mirror-config.py b/tests/parse-fdroiddata-mirror-config.py deleted file mode 100644 index f909e910..00000000 --- a/tests/parse-fdroiddata-mirror-config.py +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env python3 - -import ruamel.yaml - -from pathlib import Path - -mirrors_yml = Path('/home/hans/code/fdroid/fdroiddata/config/mirrors.yml') -with mirrors_yml.open() as fp: - mirrors_config = ruamel.yaml.YAML(typ='safe').load(fp) - -for d in mirrors_config: - d['url'] += '/repo' - print(d, end=',\n') diff --git a/tests/repo/entry.json b/tests/repo/entry.json index bf6a2e76..85b6b14f 100644 --- a/tests/repo/entry.json +++ b/tests/repo/entry.json @@ -3,9 +3,9 @@ "version": 20002, "index": { "name": "/index-v2.json", - "sha256": "4a36d8cdb5b7a9e59d8c2e9e2a81b968db975901ff7dac12ca15449acf07cf35", - "size": 53527, - "numPackages": 10 + "sha256": "94dca5f4398d2a0167bbe69c790cdd66f1bc305ca5e362ee5e3f793e9f88e3cf", + "size": 53355, + "numPackages": 11 }, "diffs": {} } \ No newline at end of file diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index 33d0f9ce..03f8f060 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -29,7 +29,6 @@ "suggestedVersionCode": "9", "description": "In order to keep away curious eyes, SMS-bypass filters incoming SMS messages\nbefore they reach your inbox. Based on bughunter2.smsfilter.\n\nFeatures:\n\n* Discrete fake app \"Battery level\": Long tap on Battery percentage will show SMS.\n* Filter incoming SMS specified address: redirect the SMS to SMS-bypass messages list; remove SMS arrival sound or vibration; show a discreet notification icon (battery level); vibrate if checked in settings\n* Add contact from contact list\n* Export messages to a text file", "donate": "http://rodolphe.souchaud.free.fr/donate", - "flattrID": "cad90e036b975ed129a3ce80a0750466", "issueTracker": "https://gitlab.com/souch/SMSbypass/issues", "license": "GPL-3.0-only", "sourceCode": "https://gitlab.com/souch/SMSbypass/tree/HEAD", @@ -92,6 +91,16 @@ } } }, + { + "suggestedVersionCode": "4", + "license": "Unknown", + "name": "maxSdkVersion", + "summary": "Test setting maxSdkVersion in an APK", + "added": 1739805810000, + "icon": "org.maxsdkversion.4.png", + "packageName": "org.maxsdkversion", + "lastUpdated": 1739805810000 + }, { "categories": [ "Development" @@ -235,8 +244,7 @@ "added": 1498176000000, "antiFeatures": [ "KnownVuln", - "NonFreeAssets", - "UpstreamNonFree" + "NonFreeAssets" ], "apkName": "com.politedroid_6.apk", "hash": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", @@ -323,8 +331,7 @@ "added": 1498176000000, "antiFeatures": [ "KnownVuln", - "NonFreeAssets", - "UpstreamNonFree" + "NonFreeAssets" ], "apkName": "com.politedroid_3.apk", "hash": "665d03d61ebc642289fda697f71a59305b0202b16cafc5ffdae91cbe91f0b25d", @@ -653,6 +660,32 @@ "versionName": "0.1" } ], + "org.maxsdkversion": [ + { + "added": 1739805810000, + "apkName": "org.maxsdkversion_4.apk", + "features": [ + "android.hardware.camera.front" + ], + "hash": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", + "hashType": "sha256", + "maxSdkVersion": 25, + "minSdkVersion": 14, + "packageName": "org.maxsdkversion", + "sig": "1a5e67bcef6b2d6242f2d36982b54589", + "signer": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e", + "size": 12768, + "targetSdkVersion": 19, + "uses-permission": [ + [ + "android.permission.CAMERA", + null + ] + ], + "versionCode": 4, + "versionName": "1.0.3" + } + ], "souch.smsbypass": [ { "added": 1524700800000, diff --git a/tests/repo/index-v2.json b/tests/repo/index-v2.json index 3f55f038..263dffd2 100644 --- a/tests/repo/index-v2.json +++ b/tests/repo/index-v2.json @@ -453,49 +453,6 @@ "ro": "Urmărire", "zh-rCN": "跟踪用户" } - }, - "UpstreamNonFree": { - "description": { - "de": "Der Originalcode ist nicht völlig quelloffen", - "en-US": "The upstream source code is not entirely Free", - "fa": "کد مبدأ بالادستی کاملاً آزاد نیست", - "ro": "Codul sursa originar nu este în totalitatea lui software liber", - "zh-rCN": "上游源代码不是完全自由的" - }, - "icon": { - "de": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "en-US": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "fa": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "ro": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - }, - "zh-rCN": { - "name": "/icons/ic_antifeature_upstreamnonfree.xml", - "sha256": "06a9af843ff56ecd7a270f98c0b19b3154edf3ffa854e6d50a84ef00d0ce1a86", - "size": 1442 - } - }, - "name": { - "de": "Originalcode nicht-quelloffen", - "en-US": "Upstream Non-Free", - "fa": "بالادست ناآزاد", - "ro": "Surse ne-libere", - "zh-rCN": "上游代码非自由" - } } }, "categories": { @@ -627,8 +584,7 @@ "en-US": "1.5" }, "NonFreeAssets": {}, - "NonFreeNet": {}, - "UpstreamNonFree": {} + "NonFreeNet": {} } }, "5bdbfa071cca4b8d05ced41d6b28763595d6e8096cca5bbf0f9253c9a2622e5d": { @@ -756,8 +712,7 @@ "en-US": "1.5" }, "NonFreeAssets": {}, - "NonFreeNet": {}, - "UpstreamNonFree": {} + "NonFreeNet": {} } } } @@ -1381,6 +1336,61 @@ } } }, + "org.maxsdkversion": { + "metadata": { + "added": 1739805810000, + "lastUpdated": 1739805810000, + "name": { + "en-US": "maxSdkVersion" + }, + "summary": { + "en-US": "Test setting maxSdkVersion in an APK" + }, + "icon": { + "en-US": { + "name": "/icons/org.maxsdkversion.4.png", + "sha256": "428442a0b75be04af3191a066041341f8a0b289972f99868687f43e02055a348", + "size": 91 + } + }, + "preferredSigner": "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" + }, + "versions": { + "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d": { + "added": 1739805810000, + "file": { + "name": "/org.maxsdkversion_4.apk", + "sha256": "877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d", + "size": 12768, + "ipfsCIDv1": "bafybeibdls2h4mpfw5gks3iirsne2qaez6uefwb5xmqkhahqbakvdszk6y" + }, + "manifest": { + "versionName": "1.0.3", + "maxSdkVersion": 25, + "versionCode": 4, + "features": [ + { + "name": "android.hardware.camera.front" + } + ], + "usesSdk": { + "minSdkVersion": 14, + "targetSdkVersion": 19 + }, + "signer": { + "sha256": [ + "401a3a5843a3d5cebc22e6de5cb76d08eaa6797122d7fe1283df1d192e132f5e" + ] + }, + "usesPermission": [ + { + "name": "android.permission.CAMERA" + } + ] + } + } + } + }, "souch.smsbypass": { "metadata": { "added": 1524700800000, @@ -1392,7 +1402,6 @@ "license": "GPL-3.0-only", "sourceCode": "https://gitlab.com/souch/SMSbypass/tree/HEAD", "webSite": "https://gitlab.com/souch/SMSbypass", - "flattrID": "cad90e036b975ed129a3ce80a0750466", "name": { "en-US": "Battery level" }, diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 24ebea24..04e8f87d 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -31,7 +31,6 @@ Features: https://gitlab.com/souch/SMSbypass/tree/HEAD https://gitlab.com/souch/SMSbypass/issues http://rodolphe.souchaud.free.fr/donate - cad90e036b975ed129a3ce80a0750466 0.9 9 @@ -148,6 +147,35 @@ APK is called F-Droid Privileged Extension. 2016-03-10
+ + org.maxsdkversion + 2025-02-17 + 2025-02-17 + maxSdkVersion + Test setting maxSdkVersion in an APK + org.maxsdkversion.4.png + No description available + Unknown + + + + + 4 + + 1.0.3 + 4 + org.maxsdkversion_4.apk + 877d582369d2840fc0d6892e44feaaad21419b0e35af42f22b3e127bcd08274d + 12768 + 14 + 19 + 25 + 2025-02-17 + 1a5e67bcef6b2d6242f2d36982b54589 + CAMERA + android.hardware.camera.front + + no.min.target.sdk 2018-10-10 @@ -318,7 +346,7 @@ APK is called F-Droid Privileged Extension. https://github.com/miguelvps/PoliteDroid/issues 1.5 6 - KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet,UpstreamNonFree + KnownVuln,NoSourceSince,NonFreeAssets,NonFreeNet 1.5 6 diff --git a/tests/repo/org.maxsdkversion_4.apk b/tests/repo/org.maxsdkversion_4.apk new file mode 100644 index 00000000..39578861 Binary files /dev/null and b/tests/repo/org.maxsdkversion_4.apk differ diff --git a/tests/run-tests b/tests/run-tests index 31cb4939..a790d4c7 100755 --- a/tests/run-tests +++ b/tests/run-tests @@ -6,156 +6,10 @@ echo_header() { { echo -e "==============================================================================\n$1"; } 2>/dev/null } -get_fdroid_apk_filename() { - if [ -z $aapt ]; then - appid=$(androguard apkid "$1" | sed -En 's/ +"([a-z][^"]+)",$/\1/ip') - versionCode=$(androguard apkid "$1" | sed -En 's/ +"([0-9]+)",$/\1/p') - echo "${appid}_${versionCode}.apk" - else - $aapt dump badging "$1" | sed -n "s,^package: name='\(.*\)' versionCode='\([0-9][0-9]*\)' .*,\1_\2.apk,p" - fi -} - -copy_apks_into_repo() { - set +x - find $APKDIR -type f -name '*.apk' -print0 | while IFS= read -r -d '' f; do - echo $f | grep -F -v -e unaligned -e unsigned -e badsig -e badcert -e bad-unicode -e janus.apk || continue - apk=`get_fdroid_apk_filename "$f"` - test "$f" -nt repo/$apk && rm -f repo/$apk # delete existing if $f is newer - if [ ! -e repo/$apk ] && [ ! -e archive/$apk ]; then - echo "$f --> repo/$apk" - ln "$f" $1/repo/$apk || \ - rsync -axv "$f" $1/repo/$apk # rsync if hard link is not possible - touch $1/.found-apks - fi - done - if [ ! -e $1/.found-apks ]; then - echo "ERROR: The dir APKDIR must have APKs in it! $APKDIR does not." - exit 1 - fi - set -x -} - -# keep this as an old version to test the automatic parsing of build-tools -# verion numbers in `fdroid init` -create_fake_android_home() { - mkdir $1/tools - mkdir $1/platform-tools - mkdir $1/build-tools - mkdir $1/build-tools/19.0.2 - touch $1/build-tools/19.0.2/aapt -} - -create_test_dir() { - test -e $WORKSPACE/.testfiles || mkdir $WORKSPACE/.testfiles - mktemp -d $WORKSPACE/.testfiles/run-tests.XXXX -} - -create_test_file() { - test -e $WORKSPACE/.testfiles || mkdir $WORKSPACE/.testfiles - TMPDIR=$WORKSPACE/.testfiles mktemp -} - -fdroid_init_with_prebuilt_keystore() { - if [ -z "$1" ]; then - keystore=$WORKSPACE/tests/keystore.jks - else - keystore="$1" - fi - $fdroid init --keystore $keystore --repo-keyalias=sova - echo 'keystorepass: r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' >> config.yml - echo 'keypass: r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' >> config.yml -} - -is_MD5_disabled() { - javac $WORKSPACE/tests/IsMD5Disabled.java && java -cp $WORKSPACE/tests IsMD5Disabled -} - -use_apksigner() { - python3 -c " -import sys -sys.path.insert(0, '$WORKSPACE') -from fdroidserver import common -c = {'sdk_path': '$ANDROID_HOME'} -common.find_apksigner(c) -exit(c.get('apksigner') is None) -" -} - -err_handler() { -# remove this to prevent git conflicts and complaining - set +x - rm -rf "$WORKSPACE"/fdroidserver.egg-info/ - rm -rf "$WORKSPACE"/.testfiles/run-tests.* - rm -rf "$WORKSPACE"/.testfiles/test_* - rm -f "$WORKSPACE"/.testfiles/tmp.* - test -d "$WORKSPACE"/.testfiles && \ - (rmdir "$WORKSPACE"/.testfiles 2> /dev/null || \ - rmdir --ignore-fail-on-non-empty "$WORKSPACE"/.testfiles 2> /dev/null) -} - -trap err_handler INT EXIT - #------------------------------------------------------------------------------# -# "main" -if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then - set +x - echo "Usage: $0 '/path/to/folder/with/apks'" - exit 1 -fi - -if [ -z "$ANDROID_HOME" ]; then - if python3 -c "import androguard"; then - echo "ANDROID_HOME is not set, using androguard" - else - echo "ERROR: ANDROID_HOME is not set, androguard is not available!" - exit 1 - fi -else - echo "Using ANDROID_HOME=$ANDROID_HOME" -fi - -if [ -d tests ]; then - cd tests -fi - -if [ -z "$1" ]; then - APKDIR=`pwd` -else - APKDIR=$1 -fi -if [ ! -d "$APKDIR" ]; then - echo "ERROR: '$APKDIR' does not exist!" - exit 1 -fi - -if [ -z "$WORKSPACE" ]; then - WORKSPACE="$(dirname "$(pwd)")" - echo "Setting Workspace to $WORKSPACE" -fi - -# allow the location of the script to be overridden -if [ -z "$fdroid" ]; then - fdroid="$WORKSPACE/fdroid" -fi - -# allow the location of aapt to be overridden -if [ -z "$aapt" ]; then - aapt=`ls -1 $ANDROID_HOME/build-tools/*/aapt 2> /dev/null | sort | tail -1` -fi - -# try to use GNU sed on OSX/BSD cuz BSD sed sucks -if which gsed; then - sed="gsed" -else - sed="sed" -fi - -# allow the location of git to be overridden -if [ -z "$git" ]; then - # shellcheck disable=SC2089 - git="env HOME= GIT_AUTHOR_NAME='Test' GIT_AUTHOR_EMAIL='no@mail' GIT_COMMITTER_NAME='Test' GIT_COMMITTER_EMAIL='no@mail' git" +if [ ! -d tests ]; then + cd .. fi set -x # show each command as it is executed @@ -163,1300 +17,11 @@ set -x # show each command as it is executed #------------------------------------------------------------------------------# echo_header "run commit hooks" -cd $WORKSPACE test -x ./hooks/pre-commit && ./hooks/pre-commit - #------------------------------------------------------------------------------# echo_header "run unit tests" -cd $WORKSPACE/tests -for testcase in $WORKSPACE/tests/*.TestCase; do - if [ $testcase == $WORKSPACE/tests/install.TestCase ]; then - echo "skipping install.TestCase, its too troublesome in CI builds" - continue - fi - if [ $(uname) != "Linux" ] && [ $testcase == $WORKSPACE/tests/nightly.TestCase ]; then - echo "skipping nightly.TestCase, it currently only works GNU/Linux" - continue - fi - $testcase -done - - -#------------------------------------------------------------------------------# -echo_header "print fdroid version" - -$fdroid --version - - -#------------------------------------------------------------------------------# -echo_header 'run process when building and signing are on separate machines' - -if use_apksigner; then - REPOROOT=`create_test_dir` - cd $REPOROOT - cp $WORKSPACE/tests/keystore.jks $REPOROOT/ - $fdroid init --keystore keystore.jks --repo-keyalias=sova - echo 'make_current_version_link: true' >> config.yml - echo 'keystorepass: r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' >> config.yml - echo 'keypass: r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' >> config.yml - echo 'keydname: "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US"' >> config.yml - test -d archive || mkdir archive - test -d metadata || mkdir metadata - cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.yml metadata/ - test -d repo || mkdir repo - test -d unsigned || mkdir unsigned - cp $WORKSPACE/tests/urzip-release-unsigned.apk unsigned/info.guardianproject.urzip_100.apk - $fdroid publish --verbose - $fdroid update --verbose --nosign - $fdroid signindex --verbose - test -e repo/index.xml - test -e repo/index.jar - test -e repo/index-v1.jar - test -e tmp/apkcache.json - ! test -z tmp/apkcache.json - test -L urzip.apk - grep -F '> config.yml -mkdir metadata -cp $WORKSPACE/tests/urzip.apk $WORKSPACE/tests/bad-unicode*.apk repo/ -cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.yml metadata/ - -$fdroid readmeta -$fdroid update - - -#------------------------------------------------------------------------------# -echo_header 'copy git import and run "fdroid scanner" on it' - -REPOROOT=`create_test_dir` -cd $REPOROOT -mkdir metadata -echo "AutoName: Just A Test" > metadata/org.fdroid.ci.test.app.yml -echo "WebSite: " >> metadata/org.fdroid.ci.test.app.yml -echo "Builds:" >> metadata/org.fdroid.ci.test.app.yml -echo " - versionName: 0.3" >> metadata/org.fdroid.ci.test.app.yml -echo " versionCode: 300" >> metadata/org.fdroid.ci.test.app.yml -echo " commit: 0.3" >> metadata/org.fdroid.ci.test.app.yml -echo " subdir: app" >> metadata/org.fdroid.ci.test.app.yml -echo " gradle:" >> metadata/org.fdroid.ci.test.app.yml -echo " - yes" >> metadata/org.fdroid.ci.test.app.yml -echo "" >> metadata/org.fdroid.ci.test.app.yml -echo "Repo: https://gitlab.com/fdroid/ci-test-app.git" >> metadata/org.fdroid.ci.test.app.yml -echo "RepoType: git" >> metadata/org.fdroid.ci.test.app.yml -mkdir build -git clone https://gitlab.com/fdroid/ci-test-app.git build/org.fdroid.ci.test.app -ls -l build/org.fdroid.ci.test.app -$fdroid scanner org.fdroid.ci.test.app --verbose - - -#------------------------------------------------------------------------------# -echo_header "copy tests/repo, generate java/gpg keys, update, and gpgsign" - -REPOROOT=`create_test_dir` -GNUPGHOME=$REPOROOT/gnupghome -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -cp -a \ - $WORKSPACE/tests/config \ - $WORKSPACE/tests/metadata \ - $WORKSPACE/tests/repo \ - $WORKSPACE/tests/stats \ - $REPOROOT/ -cp -a $WORKSPACE/tests/gnupghome $GNUPGHOME -chmod 0700 $GNUPGHOME -echo "install_list: org.adaway" >> config.yml -echo "uninstall_list: [com.android.vending, com.facebook.orca]" >> config.yml -echo "gpghome: $GNUPGHOME" >> config.yml -echo "gpgkey: CE71F7FB" >> config.yml -echo "mirrors: ['http://foobarfoobarfoobar.onion/fdroid', 'https://foo.bar/fdroid']" >> config.yml -$fdroid update --verbose --pretty -test -e repo/index.xml -test -e repo/index.jar -test -e repo/index-v1.jar -grep -F ' repo/index-v2.org.json -$sed -z 's/,\s*"ipfsCIDv1": *"[a-z0-9]*"//g' repo/index-v2.json > repo/index-v2.mod.json -$sed -i --expression='s,"timestamp": [0-9]*,"timestamp": 1676634233000,' repo/index-v2.mod.json -diff -uw repo/index-v2.org.json repo/index-v2.mod.json - - -#------------------------------------------------------------------------------# -echo_header 'test moving lots of APKs to the archive' - -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -$sed -i.tmp '/allow_disabled_algorithms/d' config.yml -test -d metadata || mkdir metadata -cp $WORKSPACE/tests/metadata/*.yml metadata/ -echo 'Summary: good test version of urzip' > metadata/info.guardianproject.urzip.yml -echo 'Summary: good MD5 sig, which is disabled algorithm' > metadata/org.bitbucket.tickytacky.mirrormirror.yml -$sed -i.tmp '/ArchivePolicy:/d' metadata/*.yml -test -d repo || mkdir repo -cp $WORKSPACE/tests/urzip.apk \ - $WORKSPACE/tests/org.bitbucket.tickytacky.mirrormirror_[0-9].apk \ - $WORKSPACE/tests/repo/com.politedroid_[0-9].apk \ - $WORKSPACE/tests/repo/obb.main.twoversions_110161[357].apk \ - repo/ -printf '\narchive_older: 3\n' >> config.yml - -$fdroid update --pretty --nosign -if use_apksigner; then - test `grep '' archive/index.xml | wc -l` -eq 2 - test `grep '' repo/index.xml | wc -l` -eq 10 -else - echo "This will fail when jarsigner allows MD5 for APK signatures" - test `grep '' archive/index.xml | wc -l` -eq 5 - test `grep '' repo/index.xml | wc -l` -eq 7 -fi - - -#------------------------------------------------------------------------------# -if ! use_apksigner; then - echo_header 'test per-app "Archive Policy"' - - REPOROOT=`create_test_dir` - cd $REPOROOT - fdroid_init_with_prebuilt_keystore - test -d metadata || mkdir metadata - cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata/ - test -d repo || mkdir repo - cp $WORKSPACE/tests/repo/com.politedroid_[0-9].apk repo/ - printf '\narchive_older: 3\n' >> config.yml - - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 0 - test `grep '' repo/index.xml | wc -l` -eq 4 - grep -F com.politedroid_3.apk repo/index.xml - grep -F com.politedroid_4.apk repo/index.xml - grep -F com.politedroid_5.apk repo/index.xml - grep -F com.politedroid_6.apk repo/index.xml - test -e repo/com.politedroid_3.apk - test -e repo/com.politedroid_4.apk - test -e repo/com.politedroid_5.apk - test -e repo/com.politedroid_6.apk - - echo "enable one app in the repo" - $sed -i.tmp 's,^ArchivePolicy: 4,ArchivePolicy: 1,' metadata/com.politedroid.yml - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 3 - test `grep '' repo/index.xml | wc -l` -eq 1 - grep -F com.politedroid_3.apk archive/index.xml - grep -F com.politedroid_4.apk archive/index.xml - grep -F com.politedroid_5.apk archive/index.xml - grep -F com.politedroid_6.apk repo/index.xml - test -e archive/com.politedroid_3.apk - test -e archive/com.politedroid_4.apk - test -e archive/com.politedroid_5.apk - test -e repo/com.politedroid_6.apk - - echo "remove all apps from the repo" - $sed -i.tmp 's,^ArchivePolicy: 1,ArchivePolicy: 0,' metadata/com.politedroid.yml - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 4 - test `grep '' repo/index.xml | wc -l` -eq 0 - grep -F com.politedroid_3.apk archive/index.xml - grep -F com.politedroid_4.apk archive/index.xml - grep -F com.politedroid_5.apk archive/index.xml - grep -F com.politedroid_6.apk archive/index.xml - test -e archive/com.politedroid_3.apk - test -e archive/com.politedroid_4.apk - test -e archive/com.politedroid_5.apk - test -e archive/com.politedroid_6.apk - ! test -e repo/com.politedroid_6.apk - - echo "move back one from archive to the repo" - $sed -i.tmp 's,^ArchivePolicy: 0,ArchivePolicy: 1,' metadata/com.politedroid.yml - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 3 - test `grep '' repo/index.xml | wc -l` -eq 1 - grep -F com.politedroid_3.apk archive/index.xml - grep -F com.politedroid_4.apk archive/index.xml - grep -F com.politedroid_5.apk archive/index.xml - grep -F com.politedroid_6.apk repo/index.xml - test -e archive/com.politedroid_3.apk - test -e archive/com.politedroid_4.apk - test -e archive/com.politedroid_5.apk - ! test -e archive/com.politedroid_6.apk - test -e repo/com.politedroid_6.apk - - echo "set an earlier version as CVC and test that it's the only one not archived" - $sed -i.tmp 's,^CurrentVersionCode: 6,CurrentVersionCode: 5,' metadata/com.politedroid.yml - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 3 - test `grep '' repo/index.xml | wc -l` -eq 1 - grep -F com.politedroid_3.apk archive/index.xml - grep -F com.politedroid_4.apk archive/index.xml - grep -F com.politedroid_5.apk repo/index.xml - grep -F com.politedroid_6.apk archive/index.xml - test -e archive/com.politedroid_3.apk - test -e archive/com.politedroid_4.apk - test -e repo/com.politedroid_5.apk - ! test -e repo/com.politedroid_6.apk - test -e archive/com.politedroid_6.apk -fi - - -#------------------------------------------------------------------------------# -echo_header 'test moving old APKs to and from the archive' - -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -test -d metadata || mkdir metadata -cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata/ -$sed -i.tmp '/ArchivePolicy:/d' metadata/com.politedroid.yml -test -d repo || mkdir repo -cp $WORKSPACE/tests/repo/com.politedroid_[0-9].apk repo/ -printf '\narchive_older: 3\n' >> config.yml - -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 1 -test `grep '' repo/index.xml | wc -l` -eq 3 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk repo/index.xml -grep -F com.politedroid_5.apk repo/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -test -e repo/com.politedroid_4.apk -test -e repo/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk - -$sed -i.tmp 's,archive_older: 3,archive_older: 1,' config.yml -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 3 -test `grep '' repo/index.xml | wc -l` -eq 1 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk archive/index.xml -grep -F com.politedroid_5.apk archive/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -test -e archive/com.politedroid_4.apk -test -e archive/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk - -# disabling deletes from the archive -$sed -i.tmp 's/\(versionCode: 4\)/\1\n disable: testing deletion/' metadata/com.politedroid.yml -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 2 -test `grep '' repo/index.xml | wc -l` -eq 1 -grep -F com.politedroid_3.apk archive/index.xml -! grep -F com.politedroid_4.apk archive/index.xml -grep -F com.politedroid_5.apk archive/index.xml -grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -! test -e archive/com.politedroid_4.apk -test -e archive/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk - -# disabling deletes from the repo, and promotes one from the archive -$sed -i.tmp 's/\(versionCode: 6\)/\1\n disable: testing deletion/' metadata/com.politedroid.yml -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 1 -test `grep '' repo/index.xml | wc -l` -eq 1 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_5.apk repo/index.xml -! grep -F com.politedroid_6.apk repo/index.xml -test -e archive/com.politedroid_3.apk -test -e repo/com.politedroid_5.apk -! test -e repo/com.politedroid_6.apk - - -#------------------------------------------------------------------------------# -echo_header 'test that verify can succeed and fail' - -REPOROOT=`create_test_dir` -cd $REPOROOT -test -d tmp || mkdir tmp -test -d unsigned || mkdir unsigned -cp $WORKSPACE/tests/repo/com.politedroid_6.apk tmp/ -cp $WORKSPACE/tests/repo/com.politedroid_6.apk unsigned/ -$fdroid verify --reuse-remote-apk --verbose com.politedroid -# force a fail -cp $WORKSPACE/tests/repo/com.politedroid_5.apk unsigned/com.politedroid_6.apk -! $fdroid verify --reuse-remote-apk --verbose com.politedroid - - -#------------------------------------------------------------------------------# -echo_header 'test allowing disabled signatures in repo and archive' - -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -echo 'allow_disabled_algorithms: true' >> config.yml -printf '\narchive_older: 3\n' >> config.yml -test -d metadata || mkdir metadata -cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata/ -echo 'Summary: good test version of urzip' > metadata/info.guardianproject.urzip.yml -echo 'Summary: good MD5 sig, disabled algorithm' > metadata/org.bitbucket.tickytacky.mirrormirror.yml -$sed -i.tmp '/ArchivePolicy:/d' metadata/*.yml -test -d repo || mkdir repo -cp $WORKSPACE/tests/repo/com.politedroid_[0-9].apk \ - $WORKSPACE/tests/org.bitbucket.tickytacky.mirrormirror_[0-9].apk \ - $WORKSPACE/tests/urzip-badsig.apk \ - repo/ - -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 2 -test `grep '' repo/index.xml | wc -l` -eq 6 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk repo/index.xml -grep -F com.politedroid_5.apk repo/index.xml -grep -F com.politedroid_6.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_1.apk archive/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_2.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_3.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_4.apk repo/index.xml -! grep -F urzip-badsig.apk repo/index.xml -! grep -F urzip-badsig.apk archive/index.xml -test -e archive/com.politedroid_3.apk -test -e repo/com.politedroid_4.apk -test -e repo/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk -test -e archive/org.bitbucket.tickytacky.mirrormirror_1.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_2.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_3.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_4.apk -test -e archive/urzip-badsig.apk - -sed -i.tmp '/apksigner:/d' config.yml -if ! use_apksigner; then - $sed -i.tmp '/allow_disabled_algorithms/d' config.yml - $fdroid update --pretty --nosign - test `grep '' archive/index.xml | wc -l` -eq 5 - test `grep '' repo/index.xml | wc -l` -eq 3 - grep -F org.bitbucket.tickytacky.mirrormirror_1.apk archive/index.xml - grep -F org.bitbucket.tickytacky.mirrormirror_2.apk archive/index.xml - grep -F org.bitbucket.tickytacky.mirrormirror_3.apk archive/index.xml - grep -F org.bitbucket.tickytacky.mirrormirror_4.apk archive/index.xml - grep -F com.politedroid_3.apk archive/index.xml - grep -F com.politedroid_4.apk repo/index.xml - grep -F com.politedroid_5.apk repo/index.xml - grep -F com.politedroid_6.apk repo/index.xml - ! grep -F urzip-badsig.apk repo/index.xml - ! grep -F urzip-badsig.apk archive/index.xml - test -e archive/org.bitbucket.tickytacky.mirrormirror_1.apk - test -e archive/org.bitbucket.tickytacky.mirrormirror_2.apk - test -e archive/org.bitbucket.tickytacky.mirrormirror_3.apk - test -e archive/org.bitbucket.tickytacky.mirrormirror_4.apk - test -e archive/com.politedroid_3.apk - test -e archive/urzip-badsig.apk - test -e repo/com.politedroid_4.apk - test -e repo/com.politedroid_5.apk - test -e repo/com.politedroid_6.apk -fi - -# test unarchiving when disabled_algorithms are allowed again -echo 'allow_disabled_algorithms: true' >> config.yml -$fdroid update --pretty --nosign -test `grep '' archive/index.xml | wc -l` -eq 2 -test `grep '' repo/index.xml | wc -l` -eq 6 -grep -F com.politedroid_3.apk archive/index.xml -grep -F com.politedroid_4.apk repo/index.xml -grep -F com.politedroid_5.apk repo/index.xml -grep -F com.politedroid_6.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_1.apk archive/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_2.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_3.apk repo/index.xml -grep -F org.bitbucket.tickytacky.mirrormirror_4.apk repo/index.xml -! grep -F urzip-badsig.apk repo/index.xml -! grep -F urzip-badsig.apk archive/index.xml -test -e archive/com.politedroid_3.apk -test -e repo/com.politedroid_4.apk -test -e repo/com.politedroid_5.apk -test -e repo/com.politedroid_6.apk -test -e archive/org.bitbucket.tickytacky.mirrormirror_1.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_2.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_3.apk -test -e repo/org.bitbucket.tickytacky.mirrormirror_4.apk -test -e archive/urzip-badsig.apk - -#------------------------------------------------------------------------------# -echo_header 'rename apks with `fdroid update --rename-apks`, --nosign for speed' - -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -echo 'keydname: "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US"' >> config.yml -test -d metadata || mkdir metadata -cp $WORKSPACE/tests/metadata/info.guardianproject.urzip.yml metadata/ -test -d repo || mkdir repo -cp $WORKSPACE/tests/urzip.apk "repo/asdfiuhk urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234 ö.apk" -$fdroid update --rename-apks --pretty --nosign -test -e repo/info.guardianproject.urzip_100.apk -grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml -cp $WORKSPACE/tests/urzip-release.apk repo/ -$fdroid update --rename-apks --pretty --nosign -test -e repo/info.guardianproject.urzip_100.apk -test -e repo/info.guardianproject.urzip_100_b4964fd.apk -grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml -grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index-v1.json -! grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index.xml -cp $WORKSPACE/tests/urzip-release.apk repo/ -$fdroid update --rename-apks --pretty --nosign -test -e repo/info.guardianproject.urzip_100.apk -test -e repo/info.guardianproject.urzip_100_b4964fd.apk -test -e duplicates/repo/info.guardianproject.urzip_100_b4964fd.apk -grep -F 'info.guardianproject.urzip_100.apk' repo/index-v1.json repo/index.xml -grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index-v1.json -! grep -F 'info.guardianproject.urzip_100_b4964fd.apk' repo/index.xml - -#------------------------------------------------------------------------------# -echo_header "test for added date being set correctly for repo and archive" -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -printf '\narchive_older: 3\n' >> config.yml -mkdir -p {repo,archive,metadata,stats} -cp $WORKSPACE/tests/repo/com.politedroid_5.apk archive -cp $WORKSPACE/tests/repo/com.politedroid_6.apk repo -cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata -#TODO: the timestamp of the oldest apk in the file should be used, even if that -# doesn't exist anymore -echo "com.politedroid_4.apk com.politedroid 2016-01-01" > stats/known_apks.txt -echo "com.politedroid_5.apk com.politedroid 2017-01-01" >> stats/known_apks.txt -echo "com.politedroid_6.apk com.politedroid 2018-01-01" >> stats/known_apks.txt -$sed -i -e 's/ArchivePolicy:.*/ArchivePolicy: 1 versions/' metadata/com.politedroid.yml -timestamp=1483228800 # $(date -u --date=2017-01-01 +%s)000 - -$fdroid update --pretty --nosign -grep -F "\"added\": $timestamp" repo/index-v1.json -# the archive will have the added timestamp for the app and for the apk, both need to be there -if [ $(grep -F "\"added\": $timestamp" archive/index-v1.json | wc -l) == 2 ]; then true; else false;fi - -#------------------------------------------------------------------------------# -echo_header "test whatsnew from fastlane without CVC set" -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -mkdir -p metadata/com.politedroid/en-US/changelogs/ -cp $WORKSPACE/tests/repo/com.politedroid_6.apk repo -cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata -echo "whatsnew test" > metadata/com.politedroid/en-US/changelogs/6.txt -$sed -i -e '/CurrentVersion/d' metadata/com.politedroid.yml -$fdroid update --pretty --nosign -grep -F 'whatsnew' repo/index-v1.json - -#------------------------------------------------------------------------------# -echo_header "test metadata checks" - -REPOROOT=`create_test_dir` -cd $REPOROOT - -mkdir repo -cp $WORKSPACE/tests/urzip.apk $REPOROOT/repo/ - -set +e -$fdroid build -if [ $? -eq 0 ]; then - echo "This should have failed because there is no metadata!" - exit 1 -else - echo "testing metadata checks passed" -fi -set -e - -mkdir $REPOROOT/metadata/ -cp $WORKSPACE/tests/metadata/org.smssecure.smssecure.yml $REPOROOT/metadata/ -$fdroid readmeta - - -#------------------------------------------------------------------------------# -echo_header "ensure commands that don't need the JDK work without a JDK configed" - -REPOROOT=`create_test_dir` -cd $REPOROOT -mkdir repo -mkdir metadata -echo "License: GPL-2.0-only" >> metadata/fake.yml -echo "Summary: Yup still fake" >> metadata/fake.yml -echo "Categories: [Internet]" >> metadata/fake.yml -echo "Description: |" >> metadata/fake.yml -echo " this is fake" >> metadata/fake.yml - -# fake that no JDKs are available -cat > config.yml <> config.yml - -$fdroid checkupdates --allow-dirty || true -which gpg && $fdroid gpgsign -$fdroid lint -$fdroid readmeta -$fdroid rewritemeta fake -$fdroid deploy -$fdroid deploy -$fdroid scanner - -# run these to get their output, but the are not setup, so don't fail -$fdroid build || true -$fdroid import || true -$fdroid install || true - - -#------------------------------------------------------------------------------# -# only run this test if running from a git repo, not all files are in the tarball -if [ -e .git/config ]; then - echo_header "create a source tarball" - - cd $WORKSPACE - ./setup.py compile_catalog sdist - - REPOROOT=`create_test_dir` - cd $REPOROOT - tar xzf `ls -1 $WORKSPACE/dist/fdroidserver-*.tar.gz | sort -n | tail -1` - cd $REPOROOT - # shellcheck disable=SC2211 - ./fdroidserver-*/fdroid init - copy_apks_into_repo $REPOROOT - # shellcheck disable=SC2211 - ./fdroidserver-*/fdroid update --create-metadata --verbose -fi - -#------------------------------------------------------------------------------# -echo_header "test config checks of local_copy_dir" - -REPOROOT=`create_test_dir` -cd $REPOROOT -$fdroid init -$fdroid update --create-metadata --verbose -$fdroid readmeta -LOCAL_COPY_DIR=`create_test_dir`/fdroid -$fdroid deploy --local-copy-dir=$LOCAL_COPY_DIR -$fdroid deploy --local-copy-dir=$LOCAL_COPY_DIR --verbose - -# now test the errors work -set +e -$fdroid deploy --local-copy-dir=thisisnotanabsolutepath -if [ $? -eq 0 ]; then - echo "This should have failed because thisisnotanabsolutepath is not an absolute path!" - exit 1 -else - echo "testing absolute path checker passed" -fi -$fdroid deploy --local-copy-dir=/tmp/IReallyDoubtThisPathExistsasdfasdf -if [ $? -eq 0 ]; then - echo "This should have failed because the path does not end with 'fdroid'!" - exit 1 -else - echo "testing dirname exists checker passed" -fi -$fdroid deploy --local-copy-dir=/tmp/IReallyDoubtThisPathExistsasdfasdf/fdroid -if [ $? -eq 0 ]; then - echo "This should have failed because the dirname path does not exist!" - exit 1 -else - echo "testing dirname exists checker passed" -fi -set -e - - -#------------------------------------------------------------------------------# -echo_header "setup a new repo from scratch using ANDROID_HOME and do a local sync" - -REPOROOT=`create_test_dir` -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -copy_apks_into_repo $REPOROOT -$fdroid update --create-metadata --verbose -$fdroid readmeta -grep -F '> config.yml -echo 'repo_keyalias: foo' >> config.yml -echo 'keystorepass: foo' >> config.yml -echo 'keypass: foo' >> config.yml -set +e -$fdroid update --create-metadata --verbose -if [ $? -eq 0 ]; then - echo "This should have failed because this repo has a bad/fake keystore!" - exit 1 -else - echo '`fdroid update` prompted to add keystore' -fi -set -e - - -#------------------------------------------------------------------------------# -echo_header "copy tests/repo, update with binary transparency log" - -REPOROOT=`create_test_dir` -GIT_REMOTE=`create_test_dir` -GNUPGHOME=$REPOROOT/gnupghome -cd $REPOROOT -fdroid_init_with_prebuilt_keystore -cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $WORKSPACE/tests/stats $REPOROOT/ -echo "binary_transparency_remote: $GIT_REMOTE" >> config.yml -$fdroid update --verbose -$fdroid deploy --verbose -test -e repo/index.xml -test -e repo/index.jar -test -e repo/index-v1.jar -grep -F '> config.yml -printf "servergitmirrors: $SERVER_GIT_MIRROR\n" >> config.yml - -cp $WORKSPACE/tests/repo/com.politedroid_[345].apk repo/ -$fdroid update --create-metadata -$fdroid deploy -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_3.apk -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_4.apk -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_5.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_3.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_4.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_5.apk -date > $GIT_MIRROR/.git/test-stamp - -# add one more APK to trigger archiving -cp $WORKSPACE/tests/repo/com.politedroid_6.apk repo/ -$fdroid update -$fdroid deploy -test -e $REPOROOT/archive/com.politedroid_3.apk -! test -e $GIT_MIRROR/fdroid/archive/com.politedroid_3.apk -! test -e $SERVER_GIT_MIRROR/fdroid/archive/com.politedroid_3.apk -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_4.apk -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_5.apk -test -e $GIT_MIRROR/fdroid/repo/com.politedroid_6.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_4.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_5.apk -test -e $SERVER_GIT_MIRROR/fdroid/repo/com.politedroid_6.apk -before=`du -s --bytes $GIT_MIRROR/.git/ | awk '{print $1}'` - -echo "git_mirror_size_limit: 60kb" >> config.yml -$fdroid update -$fdroid deploy -test -e $REPOROOT/archive/com.politedroid_3.apk -! test -e $SERVER_GIT_MIRROR/fdroid/archive/com.politedroid_3.apk -after=`du -s --bytes $GIT_MIRROR/.git/ | awk '{print $1}'` -! test -e $GIT_MIRROR/.git/test-stamp -$git -C "$GIT_MIRROR" gc -$git -C "$SERVER_GIT_MIRROR" gc -test $before -gt $after - - -#------------------------------------------------------------------------------# -echo_header "sign binary repo in offline box, then publishing from online box" - -OFFLINE_ROOT=`create_test_dir` -KEYSTORE=$WORKSPACE/tests/keystore.p12 -LOCAL_COPY_DIR=`create_test_dir`/fdroid -mkdir $LOCAL_COPY_DIR -ONLINE_ROOT=`create_test_dir` -SERVERWEBROOT=`create_test_dir`/fdroid - -# create offline binary transparency log -cd $OFFLINE_ROOT -mkdir binary_transparency -cd binary_transparency -$git init --initial-branch=master - -# fake git remote server for binary transparency log -BINARY_TRANSPARENCY_REMOTE=`create_test_dir` - -# fake git remote server for repo mirror -SERVER_GIT_MIRROR=`create_test_dir` -cd $SERVER_GIT_MIRROR -$git init --initial-branch=master -$git config receive.denyCurrentBranch updateInstead - -cd $OFFLINE_ROOT -fdroid_init_with_prebuilt_keystore -printf '\narchive_older: 3\n' >> config.yml -cp -a $WORKSPACE/tests/metadata $WORKSPACE/tests/repo $WORKSPACE/tests/stats $OFFLINE_ROOT/ -mkdir $OFFLINE_ROOT/unsigned -cp $WORKSPACE/tests/urzip-release-unsigned.apk $OFFLINE_ROOT/unsigned - -echo "mirrors: ['http://foo.bar/fdroid', 'http://asdflkdsfjafdsdfhkjh.onion/fdroid']" >> config.yml -echo "servergitmirrors: $SERVER_GIT_MIRROR" >> config.yml -echo "local_copy_dir: $LOCAL_COPY_DIR" >> config.yml -$fdroid update --pretty -grep -F '' repo/index.xml -grep -F '/fdroid/archive' archive/index.xml -test `grep '' repo/index.xml | wc -l` -eq 2 -test `grep '' archive/index.xml | wc -l` -eq 2 -cd binary_transparency -[ "$($git rev-list --count HEAD)" == "1" ] -cd .. -$fdroid deploy --verbose -test -e $LOCAL_COPY_DIR/unsigned/urzip-release-unsigned.apk -grep -F '> config.yml - test -d metadata || mkdir metadata - cp $WORKSPACE/tests/metadata/com.politedroid.yml metadata/ - test -d repo || mkdir repo - test -d unsigned || mkdir unsigned - cp $WORKSPACE/tests/repo/com.politedroid_6.apk unsigned/ - $fdroid signatures unsigned/com.politedroid_6.apk - test -d metadata/com.politedroid/signatures/6 - test -f metadata/com.politedroid/signatures/6/MANIFEST.MF - test -f metadata/com.politedroid/signatures/6/RELEASE.RSA - test -f metadata/com.politedroid/signatures/6/RELEASE.SF - ! test -f repo/com.politedroid_6.apk - $fdroid publish - test -f repo/com.politedroid_6.apk - if which apksigner; then - apksigner verify repo/com.politedroid_6.apk - fi - if which jarsigner; then - jarsigner -verify repo/com.politedroid_6.apk - fi -fi - - -#------------------------------------------------------------------------------# -echo_header 'test mirroring a repo' - -if which wget; then - TESTROOT=`create_test_dir` - REPOROOT=`create_test_dir` - cp -r "$WORKSPACE/tests" "$TESTROOT" - cd "$TESTROOT/tests" - test -d archive || mkdir archive - cp repo/index-v1.json $REPOROOT/ - $fdroid update - $fdroid signindex - mv $REPOROOT/index-v1.json repo/index-v1.json - - port=321${RANDOM:3} - test $(printf $port | wc -m) -le 3 && port=52734 # when $RANDOM doesn't work - timeout 5m python3 -m http.server $port --bind 127.0.0.1 > $REPOROOT/http.server.log 2>&1 & - http_server_pid=$! - - cd $REPOROOT - # shellcheck disable=SC1007 - http_proxy= HTTP_PROXY= $fdroid mirror http://127.0.0.1:${port}/ - test -e 127.0.0.1\:${port}/repo/souch.smsbypass_9.apk - test -e 127.0.0.1\:${port}/repo/icons-640/souch.smsbypass.9.png - # the index shouldn't be saved unless it was verified - ! test -e 127.0.0.1\:${port}/repo/index-v1.jar - # shellcheck disable=SC1007 - ! http_proxy= HTTP_PROXY= $fdroid mirror "http://127.0.0.1:${port}/?fingerprint=asdfasdf" - ! test -e 127.0.0.1\:${port}/repo/index-v1.jar - # shellcheck disable=SC1007 - http_proxy= HTTP_PROXY= $fdroid mirror "http://127.0.0.1:${port}/?fingerprint=F49AF3F11EFDDF20DFFD70F5E3117B9976674167ADCA280E6B1932A0601B26F6" - test -e 127.0.0.1\:${port}/repo/index-v1.jar - - # clean up - kill -9 $http_server_pid - rm -f 127.0.0.1\:${port}/repo/*.apk 127.0.0.1\:${port}/repo/*/*/*/*.png - sleep 1 # wait for webserver thread to quit -else - echo "WARNING: wget not installed, skipping" -fi - -#------------------------------------------------------------------------------# -echo_header "Test recovering from from broken git submodules" - -# On some platforms, checkupdates submodule tests need explicit perms to use file:/// -export GIT_ALLOW_PROTOCOL=file - -ROOT=$(create_test_dir) -cd "$ROOT" -mkdir foo bar -cd foo -$git init -echo a > a -$git add a -$git commit -m "a" - -cd ../bar -$git init -$git submodule add "file://$(pwd)/../foo" baz -rm .gitmodules -$git commit -am "a" -rm -rf baz -$git checkout baz -$git tag 2 - -cd .. -mkdir repo -mkdir metadata -echo "RepoType: git" >> metadata/fake.yml -echo "Repo: file://$(pwd)/bar" >> metadata/fake.yml -echo "AutoUpdateMode: Version" >> metadata/fake.yml -echo "UpdateCheckMode: Tags" >> metadata/fake.yml -echo "UpdateCheckData: '|||'" >> metadata/fake.yml -echo "CurrentVersion: 1" >> metadata/fake.yml -echo "CurrentVersionCode: 1" >> metadata/fake.yml - -$fdroid checkupdates --allow-dirty -grep "CurrentVersionCode: 2" metadata/fake.yml - -#------------------------------------------------------------------------------# -echo_header "checkupdates ignore broken submodule" - -ROOT=$(create_test_dir) -cd "$ROOT" -mkdir foo bar -cd foo -$git init -echo a > a -$git add a -$git commit -m a - -cd ../bar -$git init -$git submodule add "file://$(pwd)/../foo" baz -$git commit -am a -$git tag 2 - -cd ../foo -# delete the commit referenced in bar -$git commit --amend -m aa -$git reflog expire --expire=now --all -$git gc --aggressive --prune=now - -cd .. -mkdir repo -mkdir metadata -echo "RepoType: git" >> metadata/fake.yml -echo "Repo: file://$(pwd)/bar" >> metadata/fake.yml -echo "Builds:" >> metadata/fake.yml -echo " - versionName: 1" >> metadata/fake.yml -echo " versionCode: 1" >> metadata/fake.yml -echo " submodules: true" >> metadata/fake.yml -echo "AutoUpdateMode: Version" >> metadata/fake.yml -echo "UpdateCheckMode: Tags" >> metadata/fake.yml -echo "UpdateCheckData: '|||'" >> metadata/fake.yml -echo "CurrentVersion: 1" >> metadata/fake.yml -echo "CurrentVersionCode: 1" >> metadata/fake.yml - -$fdroid checkupdates --allow-dirty -grep "CurrentVersionCode: 2" metadata/fake.yml - - -#------------------------------------------------------------------------------# -echo_header "checkupdates check version in submodule" - -ROOT=$(create_test_dir) -cd "$ROOT" -mkdir app sub -cd sub -$git init -echo 1 > ver -$git add ver -$git commit -m 1 - -cd ../app -$git init -$git submodule add "file://$(pwd)/../sub" -$git commit -am 1 -$git tag 1 - -cd ../sub -echo 2 > ver -$git commit -am 2 - -cd ../app -$git init -$git submodule update --remote -$git commit -am 2 - -cd .. -mkdir repo -mkdir metadata -cat > metadata/fake.yml </dev/null || true) | grep -Fo "$2"; then - printf "${green}passed: $1\n" - else - printf "${red}ERROR: $2 not found in $1\n" - ((exit_value++)) - fi - printf $nocolor -} - -download_cache_test() { - if $basedir/gradlew-fdroid helloWorld 2>/dev/null | grep -F "$TEST_VALUE"; then - printf "${green}passed: $1\n" - else - printf "${red}ERROR: \n" - $basedir/gradlew-fdroid helloWorld - ((exit_value++)) - fi - printf $nocolor -} - -exit_value=0 -basedir=$(cd $(dirname $0)/..; pwd) -source_files=$basedir/tests/source-files -export https_proxy=127.7.7.7:7 # fake proxy to block downloading - -run_test osmandapp/osmand 2.2.1 -run_test com.integreight.onesheeld 3.3 -run_test se.manyver/android 5.5 -run_test yuriykulikov/AlarmClock 5.1.1 - -printf "\n\nforce test files to have Windows linefeeds:\n" -tmpdir=`mktemp -d` -cp -a $source_files/osmandapp $source_files/yuriykulikov $tmpdir/ -awk 'sub("$", "\r")' \ - $source_files/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties \ - > $tmpdir/yuriykulikov/AlarmClock/gradle/wrapper/gradle-wrapper.properties -awk 'sub("$", "\r")' \ - $source_files/osmandapp/osmand/build.gradle \ - > $tmpdir/osmandapp/osmand/build.gradle -source_files=$tmpdir - -run_test yuriykulikov/AlarmClock 5.1.1 -run_test osmandapp/osmand 2.2.1 - -cd $tmpdir -mkdir -p download_cache_test/gradle/wrapper -cd download_cache_test -echo 'distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip' \ - > gradle/wrapper/gradle-wrapper.properties -printf "task helloWorld {\n\tdoLast {\n\t\tprintln '$TEST_VALUE'\n\t}\n}" > build.gradle - -export GRADLE_VERSION_DIR=$tmpdir/gradle/versions -mkdir -p $GRADLE_VERSION_DIR - -unset https_proxy -printf "download, unpack, and run: " -download_cache_test 7.3 -printf "unpack and run: " -rm -rf $GRADLE_VERSION_DIR/7.3/ -download_cache_test 7.3 -printf "just run: " -download_cache_test 7.3 - -exit $exit_value diff --git a/tests/api.TestCase b/tests/test_api.py similarity index 53% rename from tests/api.TestCase rename to tests/test_api.py index 0dbaefd8..ba18caa6 100755 --- a/tests/api.TestCase +++ b/tests/test_api.py @@ -1,19 +1,17 @@ #!/usr/bin/env python3 -import inspect import os -import sys +import shutil import unittest +from pathlib import Path from unittest import mock -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - import fdroidserver +from fdroidserver import common, signindex + +from .shared_test_code import GP_FINGERPRINT, mkdtemp + +basedir = Path(__file__).parent class ApiTest(unittest.TestCase): @@ -26,8 +24,19 @@ class ApiTest(unittest.TestCase): """ def setUp(self): - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) + os.chdir(basedir) + + self._td = mkdtemp() + self.testdir = self._td.name + + common.config = None + config = common.read_config() + config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') + common.config = config + signindex.config = config + + def tearDown(self): + self._td.cleanup() def test_download_repo_index_no_fingerprint(self): with self.assertRaises(fdroidserver.VerificationException): @@ -67,26 +76,28 @@ class ApiTest(unittest.TestCase): ) self.assertEqual(index_url, etag_set_to_url) - @mock.patch('fdroidserver.net.http_get') - def test_download_repo_index_v2_url_parsing(self, mock_http_get): - """Test whether it is trying to download the right file - - This passes the URL back via the etag return value just as a - hack to check which URL was actually attempted. - - """ - mock_http_get.side_effect = lambda url, etag, timeout: (None, url) - repo_url = 'https://example.org/fdroid/repo' - entry_url = 'https://example.org/fdroid/repo/entry.jar' - index_url = 'https://example.org/fdroid/repo/index-v2.json' - for url in (repo_url, entry_url, index_url): - _ignored, etag_set_to_url = fdroidserver.download_repo_index_v2( + @mock.patch('fdroidserver.net.download_using_mirrors') + def test_download_repo_index_v2(self, mock_download_using_mirrors): + """Basically a copy of IndexTest.test_download_repo_index_v2""" + mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( + self.testdir, 'repo', os.path.basename(mirrors[0]['url']) + ) + os.chdir(self.testdir) + signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') + os.mkdir('repo') + shutil.copy(basedir / 'repo' / 'entry.json', 'repo') + shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') + signindex.sign_index('repo', 'entry.json') + repo_url = 'https://fake.url/fdroid/repo' + entry_url = 'https://fake.url/fdroid/repo/entry.jar' + index_url = 'https://fake.url/fdroid/repo/index-v2.json' + fingerprint_url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT + slash_url = 'https://fake.url/fdroid/repo//?fingerprint=' + GP_FINGERPRINT + for url in (repo_url, entry_url, index_url, fingerprint_url, slash_url): + data, _ignored = fdroidserver.download_repo_index_v2( url, verify_fingerprint=False ) - self.assertEqual(entry_url, etag_set_to_url) - - -if __name__ == "__main__": - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(ApiTest)) - unittest.main(failfast=False) + self.assertEqual(['repo', 'packages'], list(data)) + self.assertEqual( + 'My First F-Droid Repo Demo', data['repo']['name']['en-US'] + ) diff --git a/tests/build.TestCase b/tests/test_build.py similarity index 97% rename from tests/build.TestCase rename to tests/test_build.py index f6607634..578837ed 100755 --- a/tests/build.TestCase +++ b/tests/test_build.py @@ -1,34 +1,20 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import inspect -import logging import os import shutil import sys import tempfile import textwrap import unittest -import yaml from pathlib import Path from unittest import mock -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -from testcommon import TmpCwd +import yaml import fdroidserver.build import fdroidserver.common -import fdroidserver.metadata -import fdroidserver.scanner -import fdroidserver.vmtools -from testcommon import mkdtemp, parse_args_for_test + +from .shared_test_code import TmpCwd, mkdtemp class FakeProcess: @@ -47,8 +33,7 @@ class BuildTest(unittest.TestCase): '''fdroidserver/build.py''' def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = os.path.join(localmodule, 'tests') + self.basedir = str(Path(__file__).parent) os.chdir(self.basedir) fdroidserver.common.config = None fdroidserver.build.config = None @@ -65,6 +50,7 @@ class BuildTest(unittest.TestCase): os.makedirs(os.path.join(d, 'platform-tools'), exist_ok=True) os.makedirs(os.path.join(d, 'tools'), exist_ok=True) + @unittest.skipIf(sys.byteorder == 'big', "androguard is not ported to big-endian") def test_get_apk_metadata(self): config = dict() fdroidserver.common.fill_config_defaults(config) @@ -220,6 +206,7 @@ class BuildTest(unittest.TestCase): @mock.patch('fdroidserver.build.FDroidPopen') @mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda f: False) @mock.patch('fdroidserver.common.get_native_code', lambda f: 'x86') + @mock.patch('fdroidserver.common.get_source_date_epoch', lambda f: '1234567890') def test_build_local_maven(self, fake_FDroidPopen, fake_get_apk_id): """Test build_local() with a maven project""" @@ -345,6 +332,8 @@ class BuildTest(unittest.TestCase): 'fdroidserver.build.FDroidPopen', FakeProcess ) as _ignored, mock.patch( 'sdkmanager.install', wraps=fake_sdkmanager_install + ) as _ignored, mock.patch( + 'fdroidserver.common.get_source_date_epoch', lambda f: '1234567890' ) as _ignored: _ignored # silence the linters with self.assertRaises( @@ -393,6 +382,7 @@ class BuildTest(unittest.TestCase): @mock.patch('fdroidserver.build.FDroidPopen', FakeProcess) @mock.patch('fdroidserver.common.get_native_code', lambda _ignored: 'x86') @mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda _ignored: False) + @mock.patch('fdroidserver.common.get_source_date_epoch', lambda f: '1234567890') @mock.patch( 'fdroidserver.common.sha256sum', lambda f: 'ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e', @@ -468,6 +458,7 @@ class BuildTest(unittest.TestCase): self.assertTrue(ndk_dir.exists()) self.assertTrue(os.path.exists(config['ndk_paths'][ndk_version])) + @mock.patch('fdroidserver.common.get_source_date_epoch', lambda f: '1234567890') def test_build_local_clean(self): """Test if `fdroid build` cleans ant and gradle build products""" os.chdir(self.testdir) @@ -610,9 +601,9 @@ class BuildTest(unittest.TestCase): os.chdir(self.testdir) sdk_path = os.path.join(self.testdir, 'android-sdk') self.create_fake_android_home(sdk_path) - with open('config.yml', 'w') as fp: + with open(fdroidserver.common.CONFIG_FILE, 'w') as fp: yaml.dump({'sdk_path': sdk_path, 'keep_when_not_allowed': True}, fp) - os.chmod('config.yml', 0o600) + os.chmod(fdroidserver.common.CONFIG_FILE, 0o600) fdroidserver.build.config = fdroidserver.common.read_config() os.mkdir('metadata') @@ -937,7 +928,7 @@ class BuildTest(unittest.TestCase): subprocess_check_output, paramiko_SSHClient, fdroidserver_vmtools_get_clean_builder, - fdroidserver_vmtools_get_build_vm, + fdroidserver_vmtools_get_build_vm, # pylint: disable=unused-argument ): """srclibs Prepare: should only be executed in the buildserver""" @@ -954,6 +945,7 @@ class BuildTest(unittest.TestCase): refresh=True, build=None, ): + # pylint: disable=unused-argument name, ref = spec.split('@') libdir = os.path.join(srclib_dir, name) os.mkdir(libdir) @@ -1098,23 +1090,3 @@ class BuildTest(unittest.TestCase): fdroidserver.build.options.keep_when_not_allowed = False fdroidserver.build.config = {'keep_when_not_allowed': False} self.assertFalse(fdroidserver.build.keep_when_not_allowed()) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(BuildTest)) - unittest.main(failfast=False) diff --git a/tests/test_checkupdates.py b/tests/test_checkupdates.py new file mode 100755 index 00000000..107caf29 --- /dev/null +++ b/tests/test_checkupdates.py @@ -0,0 +1,707 @@ +#!/usr/bin/env python3 + +import os +import platform +import shutil +import tempfile +import time +import unittest +from pathlib import Path +from unittest import mock + +import git + +import fdroidserver +import fdroidserver.checkupdates + +basedir = Path(__file__).parent + + +class CheckupdatesTest(unittest.TestCase): + '''fdroidserver/checkupdates.py''' + + def setUp(self): + os.chdir(basedir) + self.testdir = tempfile.TemporaryDirectory( + str(time.time()), self._testMethodName + '_' + ) + + def tearDown(self): + self.testdir.cleanup() + + def test_autoupdatemode_no_suffix(self): + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8-fdroid' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.AutoUpdateMode = 'Version %v' + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + app['Builds'].append(build) + + with mock.patch( + 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) + ): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + build = app['Builds'][-1] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.commit, '1.1.9') + + with mock.patch( + 'fdroidserver.checkupdates.check_http', lambda app: ('1.7.9', 10107) + ): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + build = app['Builds'][-1] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.commit, '1.1.9') + + def test_autoupdatemode_suffix(self): + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8-fdroid' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.AutoUpdateMode = r'Version +.%c-fdroid v%v_%c' + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + app['Builds'].append(build) + + with mock.patch( + 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) + ): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + build = app['Builds'][-1] + self.assertEqual(build.versionName, '1.1.9.10109-fdroid') + self.assertEqual(build.commit, 'v1.1.9_10109') + + def test_autoupdate_multi_variants(self): + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8' + app.CurrentVersionCode = 101083 + app.UpdateCheckMode = 'Tags' + app.AutoUpdateMode = r'Version' + app.VercodeOperation = [ + "10*%c+1", + "10*%c+3", + ] + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode - 2 + build.versionName = app.CurrentVersion + build.gradle = ["arm"] + app['Builds'].append(build) + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + build.gradle = ["x86"] + app['Builds'].append(build) + + with mock.patch( + 'fdroidserver.checkupdates.check_tags', + lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), + ): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + build = app['Builds'][-2] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.versionCode, 101091) + self.assertEqual(build.gradle, ["arm"]) + + build = app['Builds'][-1] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.versionCode, 101093) + self.assertEqual(build.gradle, ["x86"]) + + self.assertEqual(app.CurrentVersion, '1.1.9') + self.assertEqual(app.CurrentVersionCode, 101093) + + def test_checkupdates_app_http(self): + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = 'mock' + + with mock.patch( + 'fdroidserver.checkupdates.check_http', lambda app: (None, 'bla') + ): + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + with mock.patch( + 'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109) + ): + with mock.patch( + 'fdroidserver.metadata.write_metadata', mock.Mock() + ) as wrmock: + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + wrmock.assert_called_with(app.metadatapath, app) + + def test_checkupdates_app_tags(self): + fdroidserver.checkupdates.config = {} + + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersion = '1.1.8' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'Tags' + app.AutoUpdateMode = 'Version' + + build = fdroidserver.metadata.Build() + build.versionCode = app.CurrentVersionCode + build.versionName = app.CurrentVersion + app['Builds'].append(build) + + with mock.patch( + 'fdroidserver.checkupdates.check_tags', + lambda app, pattern: (None, 'bla', None), + ): + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + with mock.patch( + 'fdroidserver.checkupdates.check_tags', + lambda app, pattern: ('1.1.9', 10109, 'v1.1.9'), + ): + with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()): + with mock.patch('subprocess.call', lambda cmd: 0): + fdroidserver.checkupdates.checkupdates_app(app, auto=True) + + build = app['Builds'][-1] + self.assertEqual(build.versionName, '1.1.9') + self.assertEqual(build.commit, 'v1.1.9') + + def test_check_http(self): + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' + app.UpdateCheckIgnore = 'beta' + + respmock = mock.Mock() + respmock.read = lambda: 'v1.1.9\nc10109'.encode('utf-8') + with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): + vername, vercode = fdroidserver.checkupdates.check_http(app) + self.assertEqual(vername, '1.1.9') + self.assertEqual(vercode, 10109) + + def test_check_http_blocks_unknown_schemes(self): + app = fdroidserver.metadata.App() + for scheme in ('file', 'ssh', 'http', ';pwn'): + app.id = scheme + faked = scheme + '://fake.url/for/testing/scheme' + app.UpdateCheckData = faked + '|ignored|' + faked + '|ignored' + app.metadatapath = 'metadata/' + app.id + '.yml' + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.checkupdates.check_http(app) + + def test_check_http_ignore(self): + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'HTTP' + app.UpdateCheckData = r'https://a.net/b.txt|c(.*)|https://d.net/e.txt|v(.*)' + app.UpdateCheckIgnore = 'beta' + + respmock = mock.Mock() + respmock.read = lambda: 'v1.1.9-beta\nc10109'.encode('utf-8') + with mock.patch('urllib.request.urlopen', lambda a, b, c: respmock): + vername, vercode = fdroidserver.checkupdates.check_http(app) + self.assertEqual(vername, None) + + def test_check_tags_data(self): + app = fdroidserver.metadata.App() + app.id = 'loop.starts.shooting' + app.metadatapath = 'metadata/' + app.id + '.yml' + app.RepoType = 'git' + app.CurrentVersionCode = 10108 + app.UpdateCheckMode = 'Tags' + app.UpdateCheckData = r'b.txt|c(.*)|e.txt|v(.*)' + + vcs = mock.Mock() + vcs.latesttags.return_value = ['1.1.9', '1.1.8'] + with mock.patch( + 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' + ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( + 'fdroidserver.common.getvcs', return_value=vcs + ): + _ignored # silence the linters + mock_path.is_file.return_falue = True + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '1.1.9') + self.assertEqual(vercode, 10109) + + app.UpdateCheckData = r'b.txt|c(.*)|.|v(.*)' + with mock.patch( + 'pathlib.Path.read_text', lambda a: 'v1.1.0\nc10109' + ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( + 'fdroidserver.common.getvcs', return_value=vcs + ): + _ignored # silence the linters + mock_path.is_file.return_falue = True + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '1.1.0') + self.assertEqual(vercode, 10109) + + app.UpdateCheckData = r'b.txt|c(.*)||' + with mock.patch( + 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' + ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( + 'fdroidserver.common.getvcs', return_value=vcs + ): + _ignored # silence the linters + mock_path.is_file.return_falue = True + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '1.1.9') + self.assertEqual(vercode, 10109) + + vcs.latesttags.return_value = ['Android-1.1.0', '1.1.8'] + app.UpdateCheckData = r'b.txt|c(.*)||Android-([\d.]+)' + with mock.patch( + 'pathlib.Path.read_text', lambda a: 'v1.1.9\nc10109' + ) as _ignored, mock.patch.object(Path, 'is_file') as mock_path, mock.patch( + 'fdroidserver.common.getvcs', return_value=vcs + ): + _ignored # silence the linters + mock_path.is_file.return_falue = True + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '1.1.0') + self.assertEqual(vercode, 10109) + + app.UpdateCheckData = r'|\+(\d+)||Android-([\d.]+)' + vcs.latesttags.return_value = ['Android-1.1.0+1'] + with mock.patch('fdroidserver.common.getvcs', return_value=vcs): + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '1.1.0') + self.assertEqual(vercode, 1) + + app.UpdateCheckData = '|||' + vcs.latesttags.return_value = ['2'] + with mock.patch('fdroidserver.common.getvcs', return_value=vcs): + vername, vercode, _tag = fdroidserver.checkupdates.check_tags(app, None) + self.assertEqual(vername, '2') + self.assertEqual(vercode, 2) + + def _get_test_git_repos(self): + testdir = self.testdir.name + os.chdir(testdir) + os.mkdir('metadata') + for f in (basedir / 'metadata').glob('*.yml'): + shutil.copy(f, 'metadata') + git_repo = git.Repo.init(testdir) + with git_repo.config_writer() as cw: + cw.set_value('user', 'name', 'Foo Bar') + cw.set_value('user', 'email', 'foo@bar.com') + git_repo.git.add(all=True) + git_repo.index.commit("all metadata files") + + git_remote_upstream = os.path.join(testdir, 'git_remote_upstream') + upstream_repo = git.Repo.init(git_remote_upstream, bare=True) + with upstream_repo.config_writer() as cw: + cw.set_value('receive', 'advertisePushOptions', True) + git_repo.create_remote('upstream', 'file://' + git_remote_upstream) + + git_remote_origin = os.path.join(testdir, 'git_remote_origin') + origin_repo = git.Repo.init(git_remote_origin, bare=True) + with origin_repo.config_writer() as cw: + cw.set_value('receive', 'advertisePushOptions', True) + git_repo.create_remote('origin', 'file://' + git_remote_origin) + + return git_repo, origin_repo, upstream_repo + + def test_get_changes_versus_ref(self): + def _make_commit_new_app(git_repo, metadata_file): + app = fdroidserver.metadata.App() + fdroidserver.metadata.write_metadata(metadata_file, app) + git_repo.git.add(metadata_file) + git_repo.git.commit(metadata_file, message=f'changed {metadata_file}') + + git_repo, origin_repo, upstream_repo = self._get_test_git_repos() + for remote in git_repo.remotes: + remote.push(git_repo.active_branch) + appid = 'com.testvalue' + metadata_file = f'metadata/{appid}.yml' + + # set up remote branch with change to app + git_repo.git.checkout('-b', appid) + _make_commit_new_app(git_repo, metadata_file) + git_repo.remotes.origin.push(appid) + + # reset local branch and there should be differences + upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) + git_repo.git.reset(upstream_main) + self.assertTrue( + fdroidserver.checkupdates.get_changes_versus_ref( + git_repo, f'origin/{appid}', metadata_file + ) + ) + # make new commit that matches the previous, different commit, no diff + _make_commit_new_app(git_repo, metadata_file) + self.assertFalse( + fdroidserver.checkupdates.get_changes_versus_ref( + git_repo, f'origin/{appid}', metadata_file + ) + ) + + def test_push_commits(self): + git_repo, origin_repo, upstream_repo = self._get_test_git_repos() + for remote in git_repo.remotes: + remote.push(git_repo.active_branch) + self.assertEqual(git_repo.head, upstream_repo.head) + self.assertEqual(origin_repo.head, upstream_repo.head) + # pretend that checkupdates ran but didn't create any new commits + fdroidserver.checkupdates.push_commits() + + appid = 'org.adaway' + self.assertNotIn(appid, git_repo.branches) + self.assertNotIn(appid, origin_repo.branches) + self.assertNotIn(appid, upstream_repo.branches) + self.assertNotIn('checkupdates', git_repo.branches) + + # now make commit + app = fdroidserver.metadata.read_metadata({appid: -1})[appid] + build = fdroidserver.metadata.Build() + build.versionName = 'fake' + build.versionCode = 999999999 + app.Builds.append(build) + metadata_file = 'metadata/%s.yml' % appid + fdroidserver.metadata.write_metadata(metadata_file, app) + git_repo.index.add(metadata_file) + git_repo.index.commit('changed ' + appid) + + # and push the new commit to the dynamic branch + fdroidserver.checkupdates.push_commits() + self.assertIn(appid, git_repo.branches) + self.assertIn(appid, git_repo.remotes.origin.refs) + self.assertNotIn('checkupdates', git_repo.branches) + self.assertNotIn(appid, git_repo.remotes.upstream.refs) + + def test_push_commits_verbose(self): + class Options: + verbose = True + + fdroidserver.checkupdates.options = Options + repos = self._get_test_git_repos() + git_repo = repos[0] + git_repo.remotes.origin.push(git_repo.active_branch) + git_repo.remotes.upstream.push(git_repo.active_branch) + + # make commit + appid = 'org.adaway' + app = fdroidserver.metadata.read_metadata({appid: -1})[appid] + build = fdroidserver.metadata.Build() + build.versionName = 'fake' + build.versionCode = 999999999 + app.Builds.append(build) + metadata_file = 'metadata/%s.yml' % appid + fdroidserver.metadata.write_metadata(metadata_file, app) + git_repo.index.add(metadata_file) + git_repo.index.commit('changed ' + appid) + + # and push the new commit to the dynamic branch + fdroidserver.checkupdates.push_commits() + self.assertIn(appid, git_repo.branches) + self.assertIn(appid, git_repo.remotes.origin.refs) + + def test_prune_empty_appid_branches(self): + git_repo, origin_repo, upstream_repo = self._get_test_git_repos() + for remote in git_repo.remotes: + remote.push(git_repo.active_branch) + self.assertEqual(git_repo.head, upstream_repo.head) + self.assertEqual(origin_repo.head, upstream_repo.head) + + appid = 'org.adaway' + git_repo.create_head(appid, force=True) + git_repo.remotes.origin.push(appid, force=True) + self.assertIn(appid, git_repo.branches) + self.assertIn(appid, origin_repo.branches) + self.assertIn(appid, git_repo.remotes.origin.refs) + self.assertNotIn(appid, git_repo.remotes.upstream.refs) + fdroidserver.checkupdates.prune_empty_appid_branches() + self.assertNotIn(appid, origin_repo.branches) + self.assertNotIn(appid, git_repo.remotes.origin.refs) + self.assertNotIn(appid, git_repo.remotes.upstream.refs) + + @mock.patch('sys.exit') + @mock.patch('fdroidserver.metadata.read_metadata') + def test_merge_requests_flag(self, read_metadata, sys_exit): + def _sys_exit(return_code=0): + self.assertNotEqual(return_code, 0) + raise fdroidserver.exception.FDroidException('sys.exit() ran') + + def _read_metadata(a=None, b=None): + raise StopIteration('read_metadata() ran, test is successful') + + appid = 'com.example' + # read_metadata.return_value = dict() # {appid: dict()} + read_metadata.side_effect = _read_metadata + sys_exit.side_effect = _sys_exit + + # set up clean git repo + os.chdir(self.testdir.name) + git_repo = git.Repo.init() + open('foo', 'w').close() + git_repo.git.add(all=True) + git_repo.index.commit("all files") + + with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request']): + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.checkupdates.main() + sys_exit.assert_called() + + sys_exit.reset_mock() + with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request', appid]): + with self.assertRaises(StopIteration): + fdroidserver.checkupdates.main() + sys_exit.assert_not_called() + + @unittest.skipIf( + platform.system() == 'Darwin', + 'It is difficult to configure the base system for this test.', + ) + def test_get_upstream_main_branch(self): + os.chdir(self.testdir.name) + testvalue = 'foo' + git_repo = git.Repo.init('.', initial_branch=testvalue) + + open('foo', 'w').close() + git_repo.git.add(all=True) + git_repo.index.commit("all files") + git_repo.create_remote('upstream', os.getcwd()).fetch() + + branch = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) + self.assertEqual( + f'upstream/{testvalue}', + branch, + f'The default branch should be called {testvalue}!', + ) + + def test_get_upstream_main_branch_git_config(self): + os.chdir(self.testdir.name) + testvalue = 'foo' + git_repo = git.Repo.init('.', initial_branch=testvalue) + with git_repo.config_writer() as cw: + cw.set_value('init', 'defaultBranch', testvalue) + + open('foo', 'w').close() + git_repo.git.add(all=True) + git_repo.index.commit("all files") + git_repo.git.branch('somethingelse') # make another remote branch + git_repo.create_remote('upstream', os.getcwd()).fetch() + + branch = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) + self.assertEqual( + f'upstream/{testvalue}', + branch, + f'The default branch should be called {testvalue}!', + ) + + def test_checkout_appid_branch_does_not_exist(self): + appid = 'com.example' + os.chdir(self.testdir.name) + git_repo = git.Repo.init('.') + open('foo', 'w').close() + git_repo.git.add(all=True) + git_repo.index.commit("all files") + # --merge-request assumes remotes called 'origin' and 'upstream' + git_repo.create_remote('origin', os.getcwd()).fetch() + git_repo.create_remote('upstream', os.getcwd()).fetch() + self.assertNotIn(appid, git_repo.heads) + fdroidserver.checkupdates.checkout_appid_branch(appid) + self.assertIn(appid, git_repo.heads) + + def test_checkout_appid_branch_exists(self): + appid = 'com.example' + + upstream_dir = os.path.join(self.testdir.name, 'upstream_git') + os.mkdir(upstream_dir) + upstream_repo = git.Repo.init(upstream_dir) + (Path(upstream_dir) / 'README').write_text('README') + upstream_repo.git.add(all=True) + upstream_repo.index.commit("README") + upstream_repo.create_head(appid) + + local_dir = os.path.join(self.testdir.name, 'local_git') + git.Repo.clone_from(upstream_dir, local_dir) + os.chdir(local_dir) + git_repo = git.Repo.init('.') + # --merge-request assumes remotes called 'origin' and 'upstream' + git_repo.create_remote('upstream', upstream_dir).fetch() + + self.assertNotIn(appid, git_repo.heads) + fdroidserver.checkupdates.checkout_appid_branch(appid) + self.assertIn(appid, git_repo.heads) + + def test_checkout_appid_branch_skip_bot_commit(self): + appid = 'com.example' + + upstream_dir = os.path.join(self.testdir.name, 'upstream_git') + os.mkdir(upstream_dir) + upstream_repo = git.Repo.init(upstream_dir) + (Path(upstream_dir) / 'README').write_text('README') + upstream_repo.git.add(all=True) + upstream_repo.index.commit("README") + upstream_repo.create_head(appid) + + local_dir = os.path.join(self.testdir.name, 'local_git') + git.Repo.clone_from(upstream_dir, local_dir) + os.chdir(local_dir) + git_repo = git.Repo.init('.') + # --merge-request assumes remotes called 'origin' and 'upstream' + git_repo.create_remote('upstream', upstream_dir).fetch() + + os.mkdir('metadata') + git_repo.create_head(appid, f'origin/{appid}', force=True) + git_repo.git.checkout(appid) + + # fake checkupdates-bot commit + Path(f'metadata/{appid}.yml').write_text('AutoName: Example\n') + with git_repo.config_writer() as cw: + cw.set_value('user', 'email', fdroidserver.checkupdates.BOT_EMAIL) + git_repo.git.add(all=True) + git_repo.index.commit("Example") + + # set up starting from remote branch + git_repo.remotes.origin.push(appid) + upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) + git_repo.git.checkout(upstream_main.split('/')[1]) + git_repo.delete_head(appid, force=True) + + self.assertTrue( + fdroidserver.checkupdates.checkout_appid_branch(appid), + 'This should have been true since there are only bot commits.', + ) + + def test_checkout_appid_branch_skip_human_edits(self): + appid = 'com.example' + + upstream_dir = os.path.join(self.testdir.name, 'upstream_git') + os.mkdir(upstream_dir) + upstream_repo = git.Repo.init(upstream_dir) + (Path(upstream_dir) / 'README').write_text('README') + upstream_repo.git.add(all=True) + upstream_repo.index.commit("README") + upstream_repo.create_head(appid) + + local_dir = os.path.join(self.testdir.name, 'local_git') + git.Repo.clone_from(upstream_dir, local_dir) + os.chdir(local_dir) + git_repo = git.Repo.init('.') + # --merge-request assumes remotes called 'origin' and 'upstream' + git_repo.create_remote('upstream', upstream_dir).fetch() + + os.mkdir('metadata') + git_repo.create_head(appid, f'origin/{appid}', force=True) + git_repo.git.checkout(appid) + + with git_repo.config_writer() as cw: + cw.set_value('user', 'email', fdroidserver.checkupdates.BOT_EMAIL) + + # fake checkupdates-bot commit + Path(f'metadata/{appid}.yml').write_text('AutoName: Example\n') + git_repo.git.add(all=True) + git_repo.index.commit("Example") + + # fake commit added on top by a human + Path(f'metadata/{appid}.yml').write_text('AutoName: Example\nName: Foo\n') + with git_repo.config_writer() as cw: + cw.set_value('user', 'email', 'human@bar.com') + git_repo.git.add(all=True) + git_repo.index.commit("Example") + + # set up starting from remote branch + git_repo.remotes.origin.push(appid) + upstream_main = fdroidserver.checkupdates.get_upstream_main_branch(git_repo) + git_repo.git.reset(upstream_main.split('/')[1]) + + self.assertFalse( + fdroidserver.checkupdates.checkout_appid_branch(appid), + 'This should have been false since there are human edits.', + ) + + @mock.patch('git.remote.Remote.push') + @mock.patch('sys.exit') + @mock.patch('fdroidserver.common.read_app_args') + @mock.patch('fdroidserver.checkupdates.checkupdates_app') + def test_merge_requests_branch( + self, checkupdates_app, read_app_args, sys_exit, push + ): + def _sys_exit(return_code=0): + self.assertEqual(return_code, 0) + + def _checkupdates_app(app, auto, commit): # pylint: disable=unused-argument + os.mkdir('metadata') + Path(f'metadata/{app["packageName"]}.yml').write_text('AutoName: Example') + git_repo.git.add(all=True) + git_repo.index.commit("Example") + + def _read_app_args(apps=[]): + appid = apps[0] + return {appid: {'packageName': appid}} + + appid = 'com.example' + read_app_args.side_effect = _read_app_args + checkupdates_app.side_effect = _checkupdates_app + sys_exit.side_effect = _sys_exit + + # set up clean git repo + os.chdir(self.testdir.name) + git_repo = git.Repo.init() + open('foo', 'w').close() + git_repo.git.add(all=True) + git_repo.index.commit("all files") + # --merge-request assumes remotes called 'origin' and 'upstream' + git_repo.create_remote('origin', os.getcwd()).fetch() + git_repo.create_remote('upstream', os.getcwd()).fetch() + + self.assertNotIn(appid, git_repo.heads) + with mock.patch('sys.argv', ['fdroid checkupdates', '--merge-request', appid]): + fdroidserver.checkupdates.main() + push.assert_called_once() + sys_exit.assert_called_once() + self.assertIn(appid, git_repo.heads) + + def test_push_commits_invalid_branch_name(self): + git_repo, origin_repo, upstream_repo = self._get_test_git_repos() + for remote in git_repo.remotes: + remote.push(git_repo.active_branch) + self.assertEqual(git_repo.head, upstream_repo.head) + self.assertEqual(origin_repo.head, upstream_repo.head) + # pretend that checkupdates ran but didn't create any new commits + fdroidserver.checkupdates.push_commits('') diff --git a/tests/common.TestCase b/tests/test_common.py similarity index 79% rename from tests/common.TestCase rename to tests/test_common.py index 48e668fc..3110b446 100755 --- a/tests/common.TestCase +++ b/tests/test_common.py @@ -1,49 +1,47 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - import difflib -import git import glob +import gzip import importlib -import inspect import json import logging import os import re -import ruamel.yaml import shutil import subprocess import sys import tempfile +import textwrap import time import unittest -import textwrap -import yaml -import gzip from argparse import ArgumentParser -from zipfile import BadZipFile, ZipFile -from unittest import mock +from datetime import datetime, timezone from pathlib import Path +from unittest import mock +from zipfile import BadZipFile, ZipFile +import git +import ruamel.yaml -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.index -import fdroidserver.signindex +import fdroidserver import fdroidserver.common import fdroidserver.metadata -from testcommon import TmpCwd, mkdtemp, parse_args_for_test +import fdroidserver.signindex +from fdroidserver._yaml import config_dump, yaml, yaml_dumper from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME -from fdroidserver.exception import FDroidException, VCSException,\ - MetaDataException, VerificationException +from fdroidserver.exception import ( + FDroidException, + MetaDataException, + VCSException, + VerificationException, +) from fdroidserver.looseversion import LooseVersion +from .shared_test_code import TmpCwd, mkdir_testfiles, mkdtemp + +basedir = Path(__file__).parent + def _mock_common_module_options_instance(): """Helper method to deal with difficult visibility of the module-level options.""" @@ -51,34 +49,55 @@ def _mock_common_module_options_instance(): fdroidserver.common.options.verbose = False -class CommonTest(unittest.TestCase): - '''fdroidserver/common.py''' +class SetUpTearDownMixin: + """A mixin with no tests in it for shared setUp and tearDown.""" def setUp(self): logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger('androguard.axml') logger.setLevel(logging.INFO) # tame the axml debug messages - self.basedir = os.path.join(localmodule, 'tests') - self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles')) - if not os.path.exists(self.tmpdir): - os.makedirs(self.tmpdir) - os.chdir(self.basedir) + os.chdir(basedir) + + self.verbose = '-v' in sys.argv or '--verbose' in sys.argv + fdroidserver.common.set_console_logging(self.verbose) # these are declared as None at the top of the module file fdroidserver.common.config = None fdroidserver.common.options = None fdroidserver.metadata.srclibs = None - self._td = mkdtemp() - self.testdir = self._td.name + self.testdir = mkdir_testfiles(basedir, self) def tearDown(self): fdroidserver.common.config = None fdroidserver.common.options = None - os.chdir(self.basedir) - self._td.cleanup() - if os.path.exists(self.tmpdir): - shutil.rmtree(self.tmpdir) + os.chdir(basedir) + if os.path.exists(self.testdir): + shutil.rmtree(self.testdir) + + +class CommonTest(SetUpTearDownMixin, unittest.TestCase): + '''fdroidserver/common.py''' + + def test_yaml_1_2(self): + """Return a ruamel.yaml instance that supports YAML 1.2 + + There should be no "Norway Problem", and other things like this: + https://yaml.org/spec/1.2.2/ext/changes/ + + YAML 1.2 says "underlines _ cannot be used within numerical + values", but ruamel.yaml seems to ignore that. 1_0 should be a + string, but it is read as a 10. + + """ + os.chdir(self.testdir) + yaml12file = Path('YAML 1.2.yml') + yaml12file.write_text('[true, no, 0b010, 010, 0o10, "\\/"]', encoding='utf-8') + with yaml12file.open() as fp: + self.assertEqual( + [True, 'no', 2, 10, 8, '/'], + yaml.load(fp), + ) def test_parse_human_readable_size(self): for k, v in ( @@ -157,7 +176,7 @@ class CommonTest(unittest.TestCase): print('no build-tools found: ' + build_tools) def test_find_java_root_path(self): - os.chdir(self.tmpdir) + os.chdir(self.testdir) all_pathlists = [ ( @@ -185,38 +204,32 @@ class CommonTest(unittest.TestCase): # create test file used in common._add_java_paths_to_config() for p in pathlist: if p.startswith('/System') or p.startswith('/Library'): - basedir = os.path.join(p, 'Contents', 'Home', 'bin') + _dir = os.path.join(p, 'Contents', 'Home', 'bin') else: - basedir = os.path.join(p, 'bin') - os.makedirs(basedir) - open(os.path.join(basedir, 'javac'), 'w').close() + _dir = os.path.join(p, 'bin') + os.makedirs(_dir) + open(os.path.join(_dir, 'javac'), 'w').close() config = dict() config['java_paths'] = dict() fdroidserver.common._add_java_paths_to_config(pathlist, config) self.assertEqual(config['java_paths']['8'], choice[1:]) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_is_debuggable_or_testOnly(self): config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config # these are set debuggable - testfiles = [] - testfiles.append(os.path.join(self.basedir, 'urzip.apk')) - testfiles.append(os.path.join(self.basedir, 'urzip-badsig.apk')) - testfiles.append(os.path.join(self.basedir, 'urzip-badcert.apk')) - for apkfile in testfiles: + for apkfile in ('urzip.apk', 'urzip-badsig.apk', 'urzip-badcert.apk'): self.assertTrue( - fdroidserver.common.is_debuggable_or_testOnly(apkfile), + fdroidserver.common.is_debuggable_or_testOnly(str(basedir / apkfile)), "debuggable APK state was not properly parsed!", ) # these are set NOT debuggable - testfiles = [] - testfiles.append(os.path.join(self.basedir, 'urzip-release.apk')) - testfiles.append(os.path.join(self.basedir, 'urzip-release-unsigned.apk')) - testfiles.append(os.path.join(self.basedir, 'v2.only.sig_2.apk')) + testfiles = 'urzip-release.apk', 'urzip-release-unsigned.apk', 'v2.only.sig_2.apk' for apkfile in testfiles: self.assertFalse( fdroidserver.common.is_debuggable_or_testOnly(apkfile), @@ -295,12 +308,12 @@ class CommonTest(unittest.TestCase): teststr = 'FAKE_STR_FOR_TESTING' shutil.copytree( - os.path.join(self.basedir, 'source-files'), - os.path.join(self.tmpdir, 'source-files'), + os.path.join(basedir, 'source-files'), + os.path.join(self.testdir, 'source-files'), ) fdroidclient_testdir = os.path.join( - self.tmpdir, 'source-files', 'fdroid', 'fdroidclient' + self.testdir, 'source-files', 'fdroid', 'fdroidclient' ) config = dict() @@ -354,7 +367,7 @@ class CommonTest(unittest.TestCase): def test_prepare_sources_with_prebuild_subdir(self): app_build_dir = os.path.join(self.testdir, 'build', 'com.example') shutil.copytree( - os.path.join(self.basedir, 'source-files', 'fdroid', 'fdroidclient'), + basedir / 'source-files' / 'fdroid' / 'fdroidclient', app_build_dir, ) @@ -411,12 +424,12 @@ class CommonTest(unittest.TestCase): def test_prepare_sources_refresh(self): _mock_common_module_options_instance() packageName = 'org.fdroid.ci.test.app' - os.chdir(self.tmpdir) + os.chdir(self.testdir) os.mkdir('build') os.mkdir('metadata') # use a local copy if available to avoid hitting the network - tmprepo = os.path.join(self.basedir, 'tmp', 'importer') + tmprepo = os.path.join(basedir, 'tmp', 'importer') if os.path.exists(tmprepo): git_url = tmprepo else: @@ -427,9 +440,9 @@ class CommonTest(unittest.TestCase): metadata['RepoType'] = 'git' metadata['Repo'] = git_url with open(os.path.join('metadata', packageName + '.yml'), 'w') as fp: - yaml.dump(metadata, fp) + yaml_dumper.dump(metadata, fp) - gitrepo = os.path.join(self.tmpdir, 'build', packageName) + gitrepo = os.path.join(self.testdir, 'build', packageName) vcs0 = fdroidserver.common.getvcs('git', git_url, gitrepo) vcs0.gotorevision('0.3', refresh=True) vcs1 = fdroidserver.common.getvcs('git', git_url, gitrepo) @@ -497,19 +510,16 @@ class CommonTest(unittest.TestCase): fdroidserver.common.config = config fdroidserver.signindex.config = config - sourcedir = os.path.join(self.basedir, 'signindex') - with tempfile.TemporaryDirectory( - prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir - ) as testsdir: - for f in ('testy.jar', 'guardianproject.jar'): - sourcefile = os.path.join(sourcedir, f) - testfile = os.path.join(testsdir, f) - shutil.copy(sourcefile, testsdir) - fdroidserver.signindex.sign_jar(testfile, use_old_algs=True) - # these should be resigned, and therefore different - self.assertNotEqual( - open(sourcefile, 'rb').read(), open(testfile, 'rb').read() - ) + sourcedir = os.path.join(basedir, 'signindex') + for f in ('testy.jar', 'guardianproject.jar'): + sourcefile = os.path.join(sourcedir, f) + testfile = os.path.join(self.testdir, f) + shutil.copy(sourcefile, self.testdir) + fdroidserver.signindex.sign_jar(testfile, use_old_algs=True) + # these should be resigned, and therefore different + self.assertNotEqual( + open(sourcefile, 'rb').read(), open(testfile, 'rb').read() + ) def test_verify_apk_signature(self): _mock_common_module_options_instance() @@ -559,7 +569,7 @@ class CommonTest(unittest.TestCase): """Sign entry.jar and make sure it validates""" config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' @@ -578,7 +588,7 @@ class CommonTest(unittest.TestCase): config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config - source_dir = os.path.join(self.basedir, 'signindex') + source_dir = os.path.join(basedir, 'signindex') for f in ('unsigned.jar', 'testy.jar', 'guardianproject.jar', 'guardianproject-v1.jar'): testfile = os.path.join(source_dir, f) with self.assertRaises(fdroidserver.index.VerificationException): @@ -588,7 +598,7 @@ class CommonTest(unittest.TestCase): config = fdroidserver.common.read_config() config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner') fdroidserver.common.config = config - source_dir = os.path.join(self.basedir, 'signindex') + source_dir = os.path.join(basedir, 'signindex') for f in ('testy.jar', 'guardianproject.jar'): testfile = os.path.join(source_dir, f) fdroidserver.common.verify_deprecated_jar_signature(testfile) @@ -602,13 +612,13 @@ class CommonTest(unittest.TestCase): fdroidserver.common.config = config _mock_common_module_options_instance() - sourceapk = os.path.join(self.basedir, 'urzip.apk') + sourceapk = os.path.join(basedir, 'urzip.apk') copyapk = os.path.join(self.testdir, 'urzip-copy.apk') shutil.copy(sourceapk, copyapk) self.assertTrue(fdroidserver.common.verify_apk_signature(copyapk)) self.assertIsNone( - fdroidserver.common.verify_apks(sourceapk, copyapk, self.tmpdir) + fdroidserver.common.verify_apks(sourceapk, copyapk, self.testdir) ) unsignedapk = os.path.join(self.testdir, 'urzip-unsigned.apk') @@ -618,11 +628,11 @@ class CommonTest(unittest.TestCase): if not info.filename.startswith('META-INF/'): testapk.writestr(info, apk.read(info.filename)) self.assertIsNone( - fdroidserver.common.verify_apks(sourceapk, unsignedapk, self.tmpdir) + fdroidserver.common.verify_apks(sourceapk, unsignedapk, self.testdir) ) twosigapk = os.path.join(self.testdir, 'urzip-twosig.apk') - otherapk = ZipFile(os.path.join(self.basedir, 'urzip-release.apk'), 'r') + otherapk = ZipFile(os.path.join(basedir, 'urzip-release.apk'), 'r') with ZipFile(sourceapk, 'r') as apk: with ZipFile(twosigapk, 'w') as testapk: for info in apk.infolist(): @@ -631,7 +641,7 @@ class CommonTest(unittest.TestCase): testapk.writestr(info.filename, otherapk.read(info.filename)) otherapk.close() self.assertFalse(fdroidserver.common.verify_apk_signature(twosigapk)) - self.assertIsNone(fdroidserver.common.verify_apks(sourceapk, twosigapk, self.tmpdir)) + self.assertIsNone(fdroidserver.common.verify_apks(sourceapk, twosigapk, self.testdir)) def test_get_certificate_with_chain_sandisk(self): """Test that APK signatures with a cert chain are parsed like apksigner. @@ -655,65 +665,59 @@ class CommonTest(unittest.TestCase): ) def test_write_to_config(self): - with tempfile.TemporaryDirectory() as tmpPath: - cfgPath = os.path.join(tmpPath, 'config.py') - with open(cfgPath, 'w') as f: - f.write( - textwrap.dedent( - """\ + """Test that config items can be added without messing up config.yml. + + The '_orig' key are where the original string values of paths + are stored. Paths have tilde expansion and env vars replaced + in fill_config_defaults(). + + """ + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """\ + # abc + # test: 'example value' + a_path: ~/android-sdk + + # comment + do_not_touch: good value + a_path: "!!!" + + key: "123" # inline""" + ) + ) + + config = {'key': 111, 'a_path_orig': '~/android-sdk'} + fdroidserver.common.write_to_config(config, 'key') + fdroidserver.common.write_to_config(config, 'a_path') + fdroidserver.common.write_to_config(config, 'test', value='test value') + fdroidserver.common.write_to_config(config, 'new_key', value='new') + + with open(fdroidserver.common.CONFIG_FILE) as fp: + self.assertEqual( + fp.read(), + textwrap.dedent( + """\ # abc - # test = 'example value' - default_me= '%%%' + test: test value + a_path: ~/android-sdk # comment - do_not_touch = "good value" - default_me="!!!" + do_not_touch: good value - key="123" # inline""" - ) - ) - - cfg = {'key': '111', 'default_me_orig': 'orig'} - fdroidserver.common.write_to_config(cfg, 'key', config_file=cfgPath) - fdroidserver.common.write_to_config(cfg, 'default_me', config_file=cfgPath) - fdroidserver.common.write_to_config(cfg, 'test', value='test value', config_file=cfgPath) - fdroidserver.common.write_to_config(cfg, 'new_key', value='new', config_file=cfgPath) - - with open(cfgPath, 'r') as f: - self.assertEqual( - f.read(), - textwrap.dedent( - """\ - # abc - test = 'test value' - default_me = 'orig' - - # comment - do_not_touch = "good value" - - key = "111" # inline - - new_key = "new" + key: 111 + new_key: new """ - ), - ) + ), + ) def test_write_to_config_when_empty(self): - with tempfile.TemporaryDirectory() as tmpPath: - cfgPath = os.path.join(tmpPath, 'config.py') - with open(cfgPath, 'w') as f: - pass - fdroidserver.common.write_to_config({}, 'key', 'val', cfgPath) - with open(cfgPath, 'r') as f: - self.assertEqual( - f.read(), - textwrap.dedent( - """\ - - key = "val" - """ - ), - ) + os.chdir(self.testdir) + config_yml = Path(fdroidserver.common.CONFIG_FILE) + config_yml.write_text('', encoding='utf-8') + fdroidserver.common.write_to_config({}, 'key', 'val') + self.assertEqual(config_yml.read_text(), 'key: val\n') def test_apk_name_regex(self): good = [ @@ -779,6 +783,7 @@ class CommonTest(unittest.TestCase): for name in bad: self.assertIsNone(fdroidserver.common.STANDARD_FILE_NAME_REGEX.match(name)) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint(self): # fingerprints fetched with: keytool -printcert -file ____.RSA @@ -793,17 +798,6 @@ class CommonTest(unittest.TestCase): self.assertEqual(keytoolcertfingerprint, fdroidserver.common.apk_signer_fingerprint(apkfile)) - def test_apk_signer_fingerprint_short(self): - - # fingerprints fetched with: keytool -printcert -file ____.RSA - testapks = (('repo/obb.main.oldversion_1444412523.apk', '818e469'), - ('repo/obb.main.twoversions_1101613.apk', '32a2362'), - ('repo/obb.main.twoversions_1101617.apk', '32a2362')) - - for apkfile, keytoolcertfingerprint in testapks: - self.assertEqual(keytoolcertfingerprint, - fdroidserver.common.apk_signer_fingerprint_short(apkfile)) - def test_find_apksigner_system_package_default_path(self): """apksigner should be automatically used from the PATH""" usr_bin_apksigner = '/usr/bin/apksigner' @@ -817,14 +811,14 @@ class CommonTest(unittest.TestCase): def test_find_apksigner_config_overrides(self): """apksigner should come from config before any auto-detection""" - os.chdir(self.tmpdir) - android_home = os.path.join(self.tmpdir, 'ANDROID_HOME') + os.chdir(self.testdir) + android_home = os.path.join(self.testdir, 'ANDROID_HOME') do_not_use = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\ndate\n') - os.chmod(do_not_use, 0o0755) - apksigner = os.path.join(self.tmpdir, 'apksigner') + os.chmod(do_not_use, 0o0755) # nosec B103 + apksigner = os.path.join(self.testdir, 'apksigner') config = {'apksigner': apksigner} with mock.patch.dict(os.environ, clear=True): os.environ['ANDROID_HOME'] = android_home @@ -834,18 +828,18 @@ class CommonTest(unittest.TestCase): def test_find_apksigner_prefer_path(self): """apksigner should come from PATH before ANDROID_HOME""" - os.chdir(self.tmpdir) - apksigner = os.path.join(self.tmpdir, 'apksigner') + os.chdir(self.testdir) + apksigner = os.path.join(self.testdir, 'apksigner') with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') - os.chmod(apksigner, 0o0755) + os.chmod(apksigner, 0o0755) # nosec B103 - android_home = os.path.join(self.tmpdir, 'ANDROID_HOME') + android_home = os.path.join(self.testdir, 'ANDROID_HOME') do_not_use = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\ndate\n') - os.chmod(do_not_use, 0o0755) + os.chmod(do_not_use, 0o0755) # nosec B103 config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): @@ -856,20 +850,20 @@ class CommonTest(unittest.TestCase): def test_find_apksigner_prefer_newest(self): """apksigner should be the newest available in ANDROID_HOME""" - os.chdir(self.tmpdir) - android_home = os.path.join(self.tmpdir, 'ANDROID_HOME') + os.chdir(self.testdir) + android_home = os.path.join(self.testdir, 'ANDROID_HOME') apksigner = os.path.join(android_home, 'build-tools', '30.0.3', 'apksigner') os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\necho 30.0.3\n') - os.chmod(apksigner, 0o0755) + os.chmod(apksigner, 0o0755) # nosec B103 do_not_use = os.path.join(android_home, 'build-tools', '29.0.3', 'apksigner') os.makedirs(os.path.dirname(do_not_use)) with open(do_not_use, 'w') as fp: fp.write('#!/bin/sh\necho 29.0.3\n') - os.chmod(do_not_use, 0o0755) + os.chmod(do_not_use, 0o0755) # nosec B103 config = {'sdk_path': android_home} with mock.patch.dict(os.environ, clear=True): @@ -879,7 +873,7 @@ class CommonTest(unittest.TestCase): def test_find_apksigner_system_package_android_home(self): """Test that apksigner v30 or newer is found""" - os.chdir(self.tmpdir) + os.chdir(self.testdir) android_home = os.getenv('ANDROID_HOME') if not android_home or not os.path.isdir(android_home): self.skipTest('SKIPPING since ANDROID_HOME (%s) is not a dir!' % android_home) @@ -906,6 +900,7 @@ class CommonTest(unittest.TestCase): os.path.dirname(os.path.dirname(config.get('apksigner'))), ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_sign_apk(self): _mock_common_module_options_instance() config = fdroidserver.common.read_config() @@ -915,13 +910,13 @@ class CommonTest(unittest.TestCase): config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config unsigned = os.path.join(self.testdir, 'urzip-release-unsigned.apk') signed = os.path.join(self.testdir, 'urzip-release.apk') - shutil.copy(os.path.join(self.basedir, 'urzip-release-unsigned.apk'), self.testdir) + shutil.copy(os.path.join(basedir, 'urzip-release-unsigned.apk'), self.testdir) self.assertFalse(fdroidserver.common.verify_apk_signature(unsigned)) @@ -934,7 +929,7 @@ class CommonTest(unittest.TestCase): unsigned = os.path.join(self.testdir, 'duplicate.permisssions_9999999-unsigned.apk') signed = os.path.join(self.testdir, 'duplicate.permisssions_9999999.apk') shutil.copy( - os.path.join(self.basedir, 'repo', 'duplicate.permisssions_9999999.apk'), + os.path.join(basedir, 'repo', 'duplicate.permisssions_9999999.apk'), os.path.join(unsigned), ) fdroidserver.common.apk_strip_v1_signatures(unsigned, strip_manifest=True) @@ -944,7 +939,7 @@ class CommonTest(unittest.TestCase): self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) self.assertEqual('18', fdroidserver.common.get_androguard_APK(signed).get_min_sdk_version()) - shutil.copy(os.path.join(self.basedir, 'minimal_targetsdk_30_unsigned.apk'), self.testdir) + shutil.copy(os.path.join(basedir, 'minimal_targetsdk_30_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'minimal_targetsdk_30_unsigned.apk') signed = os.path.join(self.testdir, 'minimal_targetsdk_30.apk') @@ -957,7 +952,7 @@ class CommonTest(unittest.TestCase): # verify it has a v2 signature self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2()) - shutil.copy(os.path.join(self.basedir, 'no_targetsdk_minsdk30_unsigned.apk'), self.testdir) + shutil.copy(os.path.join(basedir, 'no_targetsdk_minsdk30_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk30_unsigned.apk') signed = os.path.join(self.testdir, 'no_targetsdk_minsdk30_signed.apk') @@ -965,7 +960,7 @@ class CommonTest(unittest.TestCase): self.assertTrue(fdroidserver.common.verify_apk_signature(signed)) self.assertTrue(fdroidserver.common.get_androguard_APK(signed).is_signed_v2()) - shutil.copy(os.path.join(self.basedir, 'no_targetsdk_minsdk1_unsigned.apk'), self.testdir) + shutil.copy(os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk'), self.testdir) unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk1_unsigned.apk') signed = os.path.join(self.testdir, 'no_targetsdk_minsdk1_signed.apk') @@ -986,18 +981,18 @@ class CommonTest(unittest.TestCase): config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config unsigned = os.path.join(self.testdir, 'urzip-release-unsigned.apk') signed = os.path.join(self.testdir, 'urzip-release.apk') - shutil.copy(os.path.join(self.basedir, 'urzip-release-unsigned.apk'), self.testdir) + shutil.copy(os.path.join(basedir, 'urzip-release-unsigned.apk'), self.testdir) os.chmod(unsigned, 0o000) with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.common.sign_apk(unsigned, signed, config['keyalias']) - os.chmod(unsigned, 0o777) + os.chmod(unsigned, 0o777) # nosec B103 self.assertTrue(os.path.isfile(unsigned)) self.assertFalse(os.path.isfile(signed)) @@ -1010,7 +1005,7 @@ class CommonTest(unittest.TestCase): config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config @@ -1033,15 +1028,17 @@ class CommonTest(unittest.TestCase): config = fdroidserver.common.read_config() if 'apksigner' not in config: self.skipTest('SKIPPING test_resign_apk, apksigner not installed!') + if sys.byteorder == 'big': + self.skipTest('SKIPPING androguard is not ported to big-endian') config['keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') fdroidserver.common.config = config fdroidserver.signindex.config = config - os.chdir(self.tmpdir) + os.chdir(self.testdir) os.mkdir('unsigned') os.mkdir('repo') @@ -1050,7 +1047,7 @@ class CommonTest(unittest.TestCase): 'v2.only.sig_2.apk', 'SystemWebView-repack.apk', ): - original = os.path.join(self.basedir, apk) + original = os.path.join(basedir, apk) unsigned = os.path.join('unsigned', apk) resign = os.path.join('repo', apk) shutil.copy(original, unsigned) @@ -1065,6 +1062,7 @@ class CommonTest(unittest.TestCase): fdroidserver.common.get_first_signer_certificate(resign) ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id(self): config = dict() fdroidserver.common.fill_config_defaults(config) @@ -1117,29 +1115,33 @@ class CommonTest(unittest.TestCase): self.assertEqual(versionCode, vc, 'aapt versionCode parsing failed for ' + apkfilename) self.assertEqual(versionName, vn, 'aapt versionName parsing failed for ' + apkfilename) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_apk(self): """get_apk_id should never return None on error, only raise exceptions""" with self.assertRaises(KeyError): fdroidserver.common.get_apk_id('Norway_bouvet_europe_2.obf.zip') - shutil.copy('Norway_bouvet_europe_2.obf.zip', self.tmpdir) - os.chdir(self.tmpdir) + shutil.copy('Norway_bouvet_europe_2.obf.zip', self.testdir) + os.chdir(self.testdir) with ZipFile('Norway_bouvet_europe_2.obf.zip', 'a') as zipfp: zipfp.writestr('AndroidManifest.xml', 'not a manifest') with self.assertRaises(KeyError): fdroidserver.common.get_apk_id('Norway_bouvet_europe_2.obf.zip') + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_path(self): with self.assertRaises(FDroidException): fdroidserver.common.get_apk_id('nope') + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_api_call(self): self.assertEqual( ('info.guardianproject.urzip', 100, '0.1'), fdroidserver.common.get_apk_id('urzip.apk'), ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_apk_id_bad_zip(self): - os.chdir(self.tmpdir) + os.chdir(self.testdir) badzip = 'badzip.apk' with open(badzip, 'w') as fp: fp.write('not a ZIP') @@ -1147,7 +1149,7 @@ class CommonTest(unittest.TestCase): fdroidserver.common.get_apk_id(badzip) def test_get_apk_id_aapt_regex(self): - files = glob.glob(os.path.join(self.basedir, 'build-tools', '[1-9]*.*', '*.txt')) + files = glob.glob(os.path.join(basedir, 'build-tools', '[1-9]*.*', '*.txt')) self.assertNotEqual(0, len(files)) for f in files: appid, versionCode = os.path.splitext(os.path.basename(f))[0][12:].split('_') @@ -1190,6 +1192,7 @@ class CommonTest(unittest.TestCase): nc = fdroidserver.common.get_native_code(apkfilename) self.assertEqual(native_code, nc) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_sdkversions_androguard(self): """This is a sanity test that androguard isn't broken""" @@ -1522,45 +1525,6 @@ class CommonTest(unittest.TestCase): self.assertEqual(('2021-06-30', 34, 'de.varengold.activeTAN'), fdroidserver.common.parse_androidmanifests(paths, app)) - def test_get_all_gradle_and_manifests(self): - """Test whether the function works with relative and absolute paths""" - a = fdroidserver.common.get_all_gradle_and_manifests(Path('source-files/cn.wildfirechat.chat')) - paths = [ - 'avenginekit/build.gradle', - 'build.gradle', - 'chat/build.gradle', - 'client/build.gradle', - 'client/src/main/AndroidManifest.xml', - 'emojilibrary/build.gradle', - 'gradle/build_libraries.gradle', - 'imagepicker/build.gradle', - 'mars-core-release/build.gradle', - 'push/build.gradle', - 'settings.gradle', - ] - paths = [Path('source-files/cn.wildfirechat.chat') / path for path in paths] - self.assertEqual(sorted(paths), sorted(a)) - - abspath = Path(self.basedir) / 'source-files/realm' - p = fdroidserver.common.get_all_gradle_and_manifests(abspath) - self.assertEqual(1, len(p)) - self.assertTrue(p[0].is_relative_to(abspath)) - - def test_get_gradle_subdir(self): - subdirs = { - 'cn.wildfirechat.chat': 'chat', - 'com.anpmech.launcher': 'app', - 'org.tasks': 'app', - 'ut.ewh.audiometrytest': 'app', - 'org.noise_planet.noisecapture': 'app', - } - for k, v in subdirs.items(): - build_dir = Path('source-files') / k - paths = fdroidserver.common.get_all_gradle_and_manifests(build_dir) - logging.info(paths) - subdir = fdroidserver.common.get_gradle_subdir(build_dir, paths) - self.assertEqual(v, str(subdir)) - def test_parse_srclib_spec_good(self): self.assertEqual(fdroidserver.common.parse_srclib_spec('osmand-external-skia@android/oreo'), ('osmand-external-skia', 'android/oreo', None, None)) @@ -1593,10 +1557,10 @@ class CommonTest(unittest.TestCase): def test_remove_signing_keys(self): shutil.copytree( - os.path.join(self.basedir, 'source-files'), - os.path.join(self.tmpdir, 'source-files'), + os.path.join(basedir, 'source-files'), + os.path.join(self.testdir, 'source-files'), ) - os.chdir(self.tmpdir) + os.chdir(self.testdir) with_signingConfigs = [ 'source-files/com.seafile.seadroid2/app/build.gradle', 'source-files/eu.siacs.conversations/build.gradle', @@ -1612,7 +1576,7 @@ class CommonTest(unittest.TestCase): if not os.path.isdir(build_dir): continue fdroidserver.common.remove_signing_keys(build_dir) - fromfile = os.path.join(self.basedir, f) + fromfile = os.path.join(basedir, f) with open(f) as fp: content = fp.read() if 'signingConfig' in content: @@ -1642,7 +1606,7 @@ class CommonTest(unittest.TestCase): if not os.path.isdir(build_dir): continue fdroidserver.common.remove_signing_keys(build_dir) - fromfile = os.path.join(self.basedir, f) + fromfile = os.path.join(basedir, f) with open(fromfile) as fp: a = fp.readlines() with open(f) as fp: @@ -1765,11 +1729,11 @@ class CommonTest(unittest.TestCase): self.assertEqual(f.read(), mocklogcontent) def test_deploy_status_json(self): - os.chdir(self.tmpdir) + os.chdir(self.testdir) fakesubcommand = 'fakesubcommand' fake_timestamp = 1234567890 fakeserver = 'example.com:/var/www/fbot/' - expected_dir = os.path.join(self.tmpdir, fakeserver.replace(':', ''), 'repo', 'status') + expected_dir = os.path.join(self.testdir, fakeserver.replace(':', ''), 'repo', 'status') fdroidserver.common.options = mock.Mock() fdroidserver.common.config = {} @@ -1777,7 +1741,7 @@ class CommonTest(unittest.TestCase): fdroidserver.common.config['identity_file'] = 'ssh/id_rsa' def assert_subprocess_call(cmd): - dest_path = os.path.join(self.tmpdir, cmd[-1].replace(':', '')) + dest_path = os.path.join(self.testdir, cmd[-1].replace(':', '')) if not os.path.exists(dest_path): os.makedirs(dest_path) return subprocess.run(cmd[:-1] + [dest_path]).returncode @@ -1933,198 +1897,184 @@ class CommonTest(unittest.TestCase): def test_with_no_config(self): """It should set defaults if no config file is found""" - os.chdir(self.tmpdir) - self.assertFalse(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + self.assertFalse(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() - self.assertFalse(config.get('update_stats')) self.assertIsNotNone(config.get('char_limits')) def test_with_zero_size_config(self): """It should set defaults if config file has nothing in it""" - os.chdir(self.tmpdir) - open('config.yml', 'w').close() - self.assertTrue(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + fdroidserver.common.write_config_file('') + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() - self.assertFalse(config.get('update_stats')) self.assertIsNotNone(config.get('char_limits')) def test_with_config_yml(self): """Make sure it is possible to use config.yml alone.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('apksigner: yml') - self.assertTrue(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + fdroidserver.common.write_config_file('apksigner: yml') + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual('yml', config.get('apksigner')) def test_with_config_yml_utf8(self): """Make sure it is possible to use config.yml in UTF-8 encoding.""" - os.chdir(self.tmpdir) + os.chdir(self.testdir) teststr = '/πÇÇ现代通用字-български-عربي1/ö/yml' - with open('config.yml', 'w', encoding='utf-8') as fp: - fp.write('apksigner: ' + teststr) - self.assertTrue(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + fdroidserver.common.write_config_file('apksigner: ' + teststr) + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(teststr, config.get('apksigner')) def test_with_config_yml_utf8_as_ascii(self): """Make sure it is possible to use config.yml Unicode encoded as ASCII.""" - os.chdir(self.tmpdir) + os.chdir(self.testdir) teststr = '/πÇÇ现代通用字-български-عربي1/ö/yml' - with open('config.yml', 'w') as fp: - yaml.dump({'apksigner': teststr}, fp) - self.assertTrue(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + with open(fdroidserver.common.CONFIG_FILE, 'w', encoding='utf-8') as fp: + config_dump({'apksigner': teststr}, fp) + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(teststr, config.get('apksigner')) def test_with_config_yml_with_env_var(self): """Make sure it is possible to use config.yml alone.""" - os.chdir(self.tmpdir) + os.chdir(self.testdir) with mock.patch.dict(os.environ): - os.environ['SECRET'] = 'mysecretpassword' - with open('config.yml', 'w') as fp: - fp.write("""keypass: {'env': 'SECRET'}""") - self.assertTrue(os.path.exists('config.yml')) - self.assertFalse(os.path.exists('config.py')) + os.environ['SECRET'] = 'mysecretpassword' # nosec B105 + fdroidserver.common.write_config_file("""keypass: {'env': 'SECRET'}\n""") + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertEqual(os.getenv('SECRET', 'fail'), config.get('keypass')) def test_with_config_yml_is_dict(self): - os.chdir(self.tmpdir) - Path('config.yml').write_text('apksigner = /placeholder/path') + os.chdir(self.testdir) + Path(fdroidserver.common.CONFIG_FILE).write_text('apksigner = /bin/apksigner') with self.assertRaises(TypeError): fdroidserver.common.read_config() def test_with_config_yml_is_not_mixed_type(self): - os.chdir(self.tmpdir) - Path('config.yml').write_text('k: v\napksigner = /placeholder/path') - with self.assertRaises(yaml.scanner.ScannerError): + os.chdir(self.testdir) + Path(fdroidserver.common.CONFIG_FILE).write_text('k: v\napksigner = /bin/apk') + with self.assertRaises(ruamel.yaml.scanner.ScannerError): fdroidserver.common.read_config() - def test_with_config_py(self): - """Make sure it is still possible to use config.py alone.""" - os.chdir(self.tmpdir) - with open('config.py', 'w') as fp: - fp.write('apksigner = "py"') - self.assertFalse(os.path.exists('config.yml')) - self.assertTrue(os.path.exists('config.py')) - config = fdroidserver.common.read_config() - self.assertEqual("py", config.get('apksigner')) - - def test_config_perm_warning(self): - """Exercise the code path that issues a warning about unsafe permissions.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('keystore: foo.jks') - self.assertTrue(os.path.exists(fp.name)) - os.chmod(fp.name, 0o666) - fdroidserver.common.read_config() - os.remove(fp.name) - fdroidserver.common.config = None - - with open('config.py', 'w') as fp: - fp.write('keystore = "foo.jks"') - self.assertTrue(os.path.exists(fp.name)) - os.chmod(fp.name, 0o666) - fdroidserver.common.read_config() - - def test_with_both_config_yml_py(self): - """If config.yml and config.py are present, config.py should be ignored.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('apksigner: yml') - with open('config.py', 'w') as fp: - fp.write('apksigner = "py"') - self.assertTrue(os.path.exists('config.yml')) - self.assertTrue(os.path.exists('config.py')) - config = fdroidserver.common.read_config() - self.assertEqual('yml', config.get('apksigner')) - def test_config_repo_url(self): """repo_url ends in /repo, archive_url ends in /archive.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('repo_url: https://MyFirstFDroidRepo.org/fdroid/repo\n') - fp.write('archive_url: https://MyFirstFDroidRepo.org/fdroid/archive') + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """\ + repo_url: https://MyFirstFDroidRepo.org/fdroid/repo + archive_url: https://MyFirstFDroidRepo.org/fdroid/archive + """ + ) + ) config = fdroidserver.common.read_config() - self.assertEqual('https://MyFirstFDroidRepo.org/fdroid/repo', config.get('repo_url')) - self.assertEqual('https://MyFirstFDroidRepo.org/fdroid/archive', config.get('archive_url')) + self.assertEqual( + 'https://MyFirstFDroidRepo.org/fdroid/repo', config.get('repo_url') + ) + self.assertEqual( + 'https://MyFirstFDroidRepo.org/fdroid/archive', config.get('archive_url') + ) def test_config_repo_url_extra_slash(self): """repo_url ends in /repo, archive_url ends in /archive.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('repo_url: https://MyFirstFDroidRepo.org/fdroid/repo/') + os.chdir(self.testdir) + fdroidserver.common.write_config_file('repo_url: https://MyFirstFDroidRepo.org/fdroid/repo/') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_repo_url_not_repo(self): """repo_url ends in /repo, archive_url ends in /archive.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('repo_url: https://MyFirstFDroidRepo.org/fdroid/foo') + os.chdir(self.testdir) + fdroidserver.common.write_config_file('repo_url: https://MyFirstFDroidRepo.org/fdroid/foo') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_archive_url_extra_slash(self): """repo_url ends in /repo, archive_url ends in /archive.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('archive_url: https://MyFirstFDroidRepo.org/fdroid/archive/') + os.chdir(self.testdir) + fdroidserver.common.write_config_file('archive_url: https://MyFirstFDroidRepo.org/fdroid/archive/') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_config_archive_url_not_repo(self): """repo_url ends in /repo, archive_url ends in /archive.""" - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('archive_url: https://MyFirstFDroidRepo.org/fdroid/foo') + os.chdir(self.testdir) + fdroidserver.common.write_config_file('archive_url: https://MyFirstFDroidRepo.org/fdroid/foo') with self.assertRaises(FDroidException): fdroidserver.common.read_config() def test_write_to_config_yml(self): - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('apksigner: yml') - self.assertTrue(os.path.exists(fp.name)) - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + fdroidserver.common.write_config_file('apksigner: yml') + os.chmod(fdroidserver.common.CONFIG_FILE, 0o0600) + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() self.assertFalse('keypass' in config) self.assertEqual('yml', config.get('apksigner')) fdroidserver.common.write_to_config(config, 'keypass', 'mysecretpassword') - with open(fp.name) as fp: - print(fp.read()) - fdroidserver.common.config = None - config = fdroidserver.common.read_config() - self.assertEqual('mysecretpassword', config['keypass']) - - def test_write_to_config_py(self): - os.chdir(self.tmpdir) - with open('config.py', 'w') as fp: - fp.write('apksigner = "py"') - self.assertTrue(os.path.exists(fp.name)) - self.assertFalse(os.path.exists('config.yml')) - config = fdroidserver.common.read_config() - self.assertFalse('keypass' in config) - self.assertEqual('py', config.get('apksigner')) - fdroidserver.common.write_to_config(config, 'keypass', 'mysecretpassword') fdroidserver.common.config = None config = fdroidserver.common.read_config() self.assertEqual('mysecretpassword', config['keypass']) def test_config_dict_with_int_keys(self): - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write('java_paths:\n 8: /usr/lib/jvm/java-8-openjdk\n') - self.assertTrue(os.path.exists(fp.name)) - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """ + java_paths: + 8: /usr/lib/jvm/java-8-openjdk + """ + ) + ) + self.assertTrue(os.path.exists(fdroidserver.common.CONFIG_FILE)) config = fdroidserver.common.read_config() - self.assertEqual('/usr/lib/jvm/java-8-openjdk', config.get('java_paths', {}).get('8')) + self.assertEqual('/usr/lib/jvm/java-8-openjdk', config['java_paths']['8']) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_lazy_load_env_vars(self): + """Test the environment variables in config.yml is lazy loaded. + + It shouldn't throw errors when read the config if the environment variables are + not set. It should throw errors when the variables are get from the config. + """ + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """ + serverwebroot: {env: serverwebroot} + servergitmirrors: + - url: {env: mirror1} + - url: {env: mirror2} + keypass: {env: keypass} + keystorepass: {env: keystorepass} + """ + ) + ) + with self.assertNoLogs(level=logging.ERROR): + config = fdroidserver.common.read_config() + + # KeyError should be raised if a key is not in the config.yml + with self.assertRaises(KeyError): + config['gpghome'] + + self.assertEqual(config.get('gpghome', 'gpg'), 'gpg') + os.environ.update({key: f"{key}supersecret" for key in ["serverwebroot", "mirror1", "mirror2", "keystorepass"]}) + self.assertEqual(config['keystorepass'], 'keystorepasssupersecret') + self.assertEqual(config['serverwebroot'], [{'url': 'serverwebrootsupersecret/'}]) + self.assertEqual(config['servergitmirrors'], [{'url': 'mirror1supersecret'}, {'url': 'mirror2supersecret'}]) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_lazy_load_env_vars_not_set(self): + os.chdir(self.testdir) + fdroidserver.common.write_config_file('keypass: {env: keypass}') + fdroidserver.common.read_config() + with self.assertLogs(level=logging.ERROR) as lw: + fdroidserver.common.config['keypass'] + self.assertTrue('is not set' in lw.output[0]) + self.assertEqual(1, len(lw.output)) @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_test_sdk_exists_fails_on_bad_sdk_path(self): @@ -2158,7 +2108,7 @@ class CommonTest(unittest.TestCase): os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') - os.chmod(apksigner, 0o0755) + os.chmod(apksigner, 0o0755) # nosec B103 config = {'apksigner': apksigner} self.assertTrue(fdroidserver.common.test_sdk_exists(config)) @@ -2168,7 +2118,7 @@ class CommonTest(unittest.TestCase): os.makedirs(os.path.dirname(apksigner)) with open(apksigner, 'w') as fp: fp.write('#!/bin/sh\ndate\n') - os.chmod(apksigner, 0o0755) + os.chmod(apksigner, 0o0755) # nosec B103 config = {'apksigner': apksigner} self.assertFalse(fdroidserver.common.test_sdk_exists(config)) @@ -2197,14 +2147,36 @@ class CommonTest(unittest.TestCase): def test_loading_config_buildserver_yml(self): """Smoke check to make sure this file is properly parsed""" - os.chdir(self.tmpdir) - shutil.copy(os.path.join(self.basedir, '..', 'buildserver', 'config.buildserver.yml'), - 'config.yml') - self.assertFalse(os.path.exists('config.py')) + os.chdir(self.testdir) + shutil.copy( + os.path.join(basedir, '..', 'buildserver', 'config.buildserver.yml'), + fdroidserver.common.CONFIG_FILE, + ) fdroidserver.common.read_config() + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_with_env_string(self): + """Test whether env works in keys with string values.""" + os.chdir(self.testdir) + testvalue = 'this is just a test' + Path('config.yml').write_text('keypass: {env: foo}') + os.environ['foo'] = testvalue + self.assertEqual(testvalue, fdroidserver.common.get_config()['keypass']) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_with_env_path(self): + """Test whether env works in keys with path values.""" + os.chdir(self.testdir) + path = 'user@server:/path/to/bar/' + os.environ['foo'] = path + Path('config.yml').write_text('serverwebroot: {env: foo}') + self.assertEqual( + [{'url': path}], + fdroidserver.common.get_config()['serverwebroot'], + ) + def test_setup_status_output(self): - os.chdir(self.tmpdir) + os.chdir(self.testdir) start_timestamp = time.gmtime() subcommand = 'test' @@ -2220,9 +2192,9 @@ class CommonTest(unittest.TestCase): self.assertEqual(subcommand, data['subcommand']) def test_setup_status_output_in_git_repo(self): - os.chdir(self.tmpdir) + os.chdir(self.testdir) logging.getLogger('git.cmd').setLevel(logging.INFO) - git_repo = git.Repo.init(self.tmpdir) + git_repo = git.Repo.init(self.testdir) file_in_git = 'README.md' with open(file_in_git, 'w') as fp: fp.write('this is just a test') @@ -2277,7 +2249,7 @@ class CommonTest(unittest.TestCase): @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) def test_get_android_tools_versions(self): - sdk_path = os.path.join(self.basedir, 'get_android_tools_versions/android-sdk') + sdk_path = os.path.join(basedir, 'get_android_tools_versions/android-sdk') config = { 'ndk_paths': {'r10e': os.path.join(sdk_path, '..', 'android-ndk-r10e')}, 'sdk_path': sdk_path, @@ -2303,7 +2275,7 @@ class CommonTest(unittest.TestCase): with tempfile.TemporaryDirectory() as tmpdir: sdk_path = Path(tmpdir) / 'get_android_tools_versions' shutil.copytree( - os.path.join(self.basedir, 'get_android_tools_versions'), sdk_path + os.path.join(basedir, 'get_android_tools_versions'), sdk_path ) shutil.rmtree(sdk_path / 'android-ndk-r10e') shutil.rmtree(sdk_path / 'android-sdk/ndk') @@ -2360,8 +2332,15 @@ class CommonTest(unittest.TestCase): fdroidserver.common.read_pkg_args(appid_versionCode_pairs, allow_vercodes), ) + def test_read_pkg_args_errors(self): + allow_vercodes = True + with self.assertRaises(FDroidException): + fdroidserver.common.read_pkg_args(['org.fdroid.fdroid:'], allow_vercodes), + with self.assertRaises(FDroidException): + fdroidserver.common.read_pkg_args(['org.fdroid.fdroid:foo'], allow_vercodes), + def test_apk_strip_v1_signatures(self): - before = os.path.join(self.basedir, 'no_targetsdk_minsdk1_unsigned.apk') + before = os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk') after = os.path.join(self.testdir, 'after.apk') shutil.copy(before, after) fdroidserver.common.apk_strip_v1_signatures(after, strip_manifest=False) @@ -2440,12 +2419,11 @@ class CommonTest(unittest.TestCase): @mock.patch('sdkmanager._generate_package_xml', lambda a, b, c: None) def test_auto_install_ndk_mock_dl(self): """Test NDK installs by actually calling sdkmanager""" - import sdkmanager - import pkg_resources + import importlib.metadata - sdkmanager_version = LooseVersion( - pkg_resources.get_distribution('sdkmanager').version - ) + import sdkmanager + + sdkmanager_version = LooseVersion(importlib.metadata.version('sdkmanager')) if sdkmanager_version < LooseVersion('0.6.4'): raise unittest.SkipTest('needs fdroid sdkmanager >= 0.6.4') @@ -2471,40 +2449,40 @@ class CommonTest(unittest.TestCase): @unittest.skip("This test downloads and unzips a 1GB file.") def test_install_ndk(self): """NDK r10e is a special case since its missing source.properties""" - config = {'sdk_path': self.tmpdir} + config = {'sdk_path': self.testdir} fdroidserver.common.config = config fdroidserver.common._install_ndk('r10e') - r10e = os.path.join(self.tmpdir, 'ndk', 'r10e') + r10e = os.path.join(self.testdir, 'ndk', 'r10e') self.assertEqual('r10e', fdroidserver.common.get_ndk_version(r10e)) fdroidserver.common.fill_config_defaults(config) self.assertEqual({'r10e': r10e}, config['ndk_paths']) def test_fill_config_defaults(self): """Test the auto-detection of NDKs installed in standard paths""" - ndk_bundle = os.path.join(self.tmpdir, 'ndk-bundle') + ndk_bundle = os.path.join(self.testdir, 'ndk-bundle') os.makedirs(ndk_bundle) with open(os.path.join(ndk_bundle, 'source.properties'), 'w') as fp: fp.write('Pkg.Desc = Android NDK\nPkg.Revision = 17.2.4988734\n') - config = {'sdk_path': self.tmpdir} + config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual({'17.2.4988734': ndk_bundle}, config['ndk_paths']) - r21e = os.path.join(self.tmpdir, 'ndk', '21.4.7075529') + r21e = os.path.join(self.testdir, 'ndk', '21.4.7075529') os.makedirs(r21e) with open(os.path.join(r21e, 'source.properties'), 'w') as fp: fp.write('Pkg.Desc = Android NDK\nPkg.Revision = 21.4.7075529\n') - config = {'sdk_path': self.tmpdir} + config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual( {'17.2.4988734': ndk_bundle, '21.4.7075529': r21e}, config['ndk_paths'], ) - r10e = os.path.join(self.tmpdir, 'ndk', 'r10e') + r10e = os.path.join(self.testdir, 'ndk', 'r10e') os.makedirs(r10e) with open(os.path.join(r10e, 'RELEASE.TXT'), 'w') as fp: fp.write('r10e-rc4 (64-bit)\n') - config = {'sdk_path': self.tmpdir} + config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) self.assertEqual( {'r10e': r10e, '17.2.4988734': ndk_bundle, '21.4.7075529': r21e}, @@ -2514,7 +2492,7 @@ class CommonTest(unittest.TestCase): @unittest.skipIf(not os.path.isdir('/usr/lib/jvm/default-java'), 'uses Debian path') def test_fill_config_defaults_java(self): """Test the auto-detection of Java installed in standard paths""" - config = {'sdk_path': self.tmpdir} + config = {'sdk_path': self.testdir} fdroidserver.common.fill_config_defaults(config) java_paths = [] # use presence of javac to make sure its JDK not just JRE @@ -2538,7 +2516,7 @@ class CommonTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) build = fdroidserver.metadata.Build() with self.assertRaises(TypeError): - fdroidserver.common.set_FDroidPopen_env(build) + fdroidserver.common.set_FDroidPopen_env(build=build) @mock.patch.dict(os.environ, clear=True) def test_ndk_paths_in_config_must_be_strings(self): @@ -2550,7 +2528,7 @@ class CommonTest(unittest.TestCase): build.ndk = 'r21d' os.environ['PATH'] = '/usr/bin:/usr/sbin' with self.assertRaises(TypeError): - fdroidserver.common.set_FDroidPopen_env(build) + fdroidserver.common.set_FDroidPopen_env(build=build) @mock.patch.dict(os.environ, clear=True) def test_FDroidPopen_envs_paths_can_be_pathlib(self): @@ -2637,7 +2615,7 @@ class CommonTest(unittest.TestCase): with mock.patch.dict(os.environ, clear=True): os.environ['PATH'] = '/usr/bin:/usr/sbin' - fdroidserver.common.set_FDroidPopen_env(build) + fdroidserver.common.set_FDroidPopen_env(build=build) self.assertNotIn('', os.getenv('PATH').split(os.pathsep)) def test_is_repo_file(self): @@ -2701,15 +2679,15 @@ class CommonTest(unittest.TestCase): self.assertFalse(is_repo_file(d), d + ' not repo file') def test_get_apksigner_smartcardoptions(self): - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: + os.chdir(self.testdir) + with open(fdroidserver.common.CONFIG_FILE, 'w', encoding='utf-8') as fp: d = { 'smartcardoptions': '-storetype PKCS11' ' -providerName SunPKCS11-OpenSC' ' -providerClass sun.security.pkcs11.SunPKCS11' ' -providerArg opensc-fdroid.cfg' } - yaml.dump(d, fp) + config_dump(d, fp) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(d['smartcardoptions'], str)) @@ -2729,11 +2707,10 @@ class CommonTest(unittest.TestCase): ) def test_get_smartcardoptions_list(self): - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write( - textwrap.dedent( - """ + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """ smartcardoptions: - -storetype - PKCS11 @@ -2743,9 +2720,9 @@ class CommonTest(unittest.TestCase): - sun.security.pkcs11.SunPKCS11 - -providerArg - opensc-fdroid.cfg - """ - ) + """ ) + ) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(config['smartcardoptions'], list)) @@ -2764,18 +2741,17 @@ class CommonTest(unittest.TestCase): ) def test_get_smartcardoptions_spaces(self): - os.chdir(self.tmpdir) - with open('config.yml', 'w') as fp: - fp.write( - textwrap.dedent( - """smartcardoptions: | - -storetype PKCS11 - -providerClass sun.security.pkcs11.SunPKCS11 - -providerArg /etc/pkcs11_java.cfg - - """ - ) + os.chdir(self.testdir) + fdroidserver.common.write_config_file( + textwrap.dedent( + """ + smartcardoptions: | + -storetype PKCS11 + -providerClass sun.security.pkcs11.SunPKCS11 + -providerArg /etc/pkcs11_java.cfg + """ ) + ) config = fdroidserver.common.read_config() fdroidserver.common.config = config self.assertTrue(isinstance(config['smartcardoptions'], list)) @@ -2791,35 +2767,6 @@ class CommonTest(unittest.TestCase): config['smartcardoptions'], ) - def test_get_smartcardoptions_config_py(self): - os.chdir(self.tmpdir) - with open('config.py', 'w') as fp: - fp.write( - textwrap.dedent( - """ - smartcardoptions = ''' - \t-storetype\tPKCS11 - \t-providerClass\tsun.security.pkcs11.SunPKCS11 - \t-providerArg\t/etc/pkcs11_java.cfg - - ''' - """ - ) - ) - config = fdroidserver.common.read_config() - fdroidserver.common.config = config - self.assertEqual( - [ - '-storetype', - 'PKCS11', - '-providerClass', - 'sun.security.pkcs11.SunPKCS11', - '-providerArg', - '/etc/pkcs11_java.cfg', - ], - config['smartcardoptions'], - ) - def test_load_localized_config(self): """It should load""" antiFeatures = fdroidserver.common.load_localized_config( @@ -2837,7 +2784,6 @@ class CommonTest(unittest.TestCase): 'NonFreeDep', 'NonFreeNet', 'Tracking', - 'UpstreamNonFree', ], list(antiFeatures.keys()), ) @@ -2873,6 +2819,46 @@ class CommonTest(unittest.TestCase): ) self.assertEqual(['en-US'], list(categories['GuardianProject']['name'].keys())) + def test_load_localized_config_copy_icon(self): + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = 'config/system.png' + Path(source_file).write_text('placeholder') + time.sleep(0.01) # ensure reliable failure if mtime isn't preserved + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + dest_file = f'repo/icons/{os.path.basename(source_file)}' + self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file)) + self.assertEqual(os.path.getmtime(source_file), os.path.getmtime(dest_file)) + + def test_load_localized_config_copy_unchanged(self): + """The destination file should only change if the source file did.""" + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = 'config/system.png' + Path(source_file).write_text('placeholder') + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + delta = 0.01 + time.sleep(delta) # ensure reliable failure if file isn't preserved + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + dest_file = f'repo/icons/{os.path.basename(source_file)}' + self.assertAlmostEqual( + os.path.getctime(source_file), os.path.getctime(dest_file), delta=delta + ) + + def test_load_localized_config_copy_over_dest(self): + os.chdir(self.testdir) + os.mkdir('config') + Path('config/categories.yml').write_text('System:\n icon: system.png') + source_file = Path('config/system.png') + dest_file = Path(f'repo/icons/{os.path.basename(source_file)}') + source_file.write_text('placeholder') + dest_file.parent.mkdir(parents=True) + dest_file.write_text('different contents') + fdroidserver.common.load_localized_config(CATEGORIES_CONFIG_NAME, 'repo') + self.assertEqual(os.path.getsize(source_file), os.path.getsize(dest_file)) + def test_load_localized_config_0_file(self): os.chdir(self.testdir) os.mkdir('config') @@ -2926,7 +2912,9 @@ class CommonTest(unittest.TestCase): def test_config_serverwebroot_str(self): os.chdir(self.testdir) - Path('config.yml').write_text("""serverwebroot: 'foo@example.com:/var/www'""") + fdroidserver.common.write_config_file( + """serverwebroot: 'foo@example.com:/var/www'""" + ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], @@ -2934,7 +2922,9 @@ class CommonTest(unittest.TestCase): def test_config_serverwebroot_list(self): os.chdir(self.testdir) - Path('config.yml').write_text("""serverwebroot:\n - foo@example.com:/var/www""") + fdroidserver.common.write_config_file( + """serverwebroot:\n - foo@example.com:/var/www""" + ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], @@ -2942,33 +2932,206 @@ class CommonTest(unittest.TestCase): def test_config_serverwebroot_dict(self): os.chdir(self.testdir) - Path('config.yml').write_text("""serverwebroot:\n - url: 'foo@example.com:/var/www'""") + fdroidserver.common.write_config_file( + """serverwebroot:\n - url: 'foo@example.com:/var/www'""" + ) self.assertEqual( [{'url': 'foo@example.com:/var/www/'}], fdroidserver.common.read_config()['serverwebroot'], ) - def test_parse_mirrors_config_str(self): - s = 'foo@example.com:/var/www' - mirrors = ruamel.yaml.YAML(typ='safe').load("""'%s'""" % s) + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_serverwebroot_list_of_dicts_env(self): + os.chdir(self.testdir) + url = 'foo@example.com:/var/www/' + os.environ['serverwebroot'] = url + fdroidserver.common.write_config_file( + textwrap.dedent( + """\ + serverwebroot: + - url: {env: serverwebroot} + index_only: true + """ + ) + ) self.assertEqual( - [{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors) + [{'url': url, 'index_only': True}], + fdroidserver.common.read_config()['serverwebroot'], ) - def test_parse_mirrors_config_list(self): + def test_expand_env_dict_fake_str(self): + testvalue = '"{env: foo}"' + self.assertEqual(testvalue, fdroidserver.common.expand_env_dict(testvalue)) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_expand_env_dict_good(self): + name = 'foo' + value = 'bar' + os.environ[name] = value + self.assertEqual(value, fdroidserver.common.expand_env_dict({'env': name})) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_expand_env_dict_bad_dict(self): + with self.assertRaises(TypeError): + fdroidserver.common.expand_env_dict({'env': 'foo', 'foo': 'bar'}) + + def test_parse_list_of_dicts_str(self): s = 'foo@example.com:/var/www' - mirrors = ruamel.yaml.YAML(typ='safe').load("""- '%s'""" % s) + mirrors = yaml.load("""'%s'""" % s) self.assertEqual( - [{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors) + [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) - def test_parse_mirrors_config_dict(self): + def test_parse_list_of_dicts_list(self): s = 'foo@example.com:/var/www' - mirrors = ruamel.yaml.YAML(typ='safe').load("""- url: '%s'""" % s) + mirrors = yaml.load("""- '%s'""" % s) self.assertEqual( - [{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors) + [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) ) + def test_parse_list_of_dicts_dict(self): + s = 'foo@example.com:/var/www' + mirrors = yaml.load("""- url: '%s'""" % s) + self.assertEqual( + [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) + ) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH'), 'foo': 'bar'}, clear=True) + def test_parse_list_of_dicts_env_str(self): + mirrors = yaml.load('{env: foo}') + self.assertEqual( + [{'url': 'bar'}], fdroidserver.common.parse_list_of_dicts(mirrors) + ) + + def test_parse_list_of_dicts_env_list(self): + s = 'foo@example.com:/var/www' + mirrors = yaml.load("""- '%s'""" % s) + self.assertEqual( + [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) + ) + + def test_parse_list_of_dicts_env_dict(self): + s = 'foo@example.com:/var/www' + mirrors = yaml.load("""- url: '%s'""" % s) + self.assertEqual( + [{'url': s}], fdroidserver.common.parse_list_of_dicts(mirrors) + ) + + def test_KnownApks_recordapk(self): + """Test that added dates are being fetched from the index. + + There are more related tests in tests/run-tests. + + """ + now = datetime.now(timezone.utc) + knownapks = fdroidserver.common.KnownApks() + for apkName in knownapks.apks: + knownapks.recordapk(apkName, default_date=now) + for added in knownapks.apks.values(): + self.assertNotEqual(added, now) + + def test_KnownApks_recordapk_new(self): + """Test that new added dates work, and are not replaced later. + + There are more related tests in tests/run-tests. + + """ + now = datetime.now(timezone.utc) + knownapks = fdroidserver.common.KnownApks() + fake_apk = 'fake.apk' + knownapks.recordapk(fake_apk, default_date=now) + for apk, added in knownapks.apks.items(): + if apk == fake_apk: + self.assertEqual(added, now) + else: + self.assertNotEqual(added, now) + knownapks.recordapk(fake_apk, default_date=datetime.now(timezone.utc)) + self.assertEqual(knownapks.apks[fake_apk], now) + + def test_get_mirrors_fdroidorg(self): + mirrors = fdroidserver.common.get_mirrors( + 'https://f-droid.org/repo', 'entry.jar' + ) + self.assertEqual( + 'https://f-droid.org/repo/entry.jar', + mirrors[0]['url'], + ) + + def test_get_mirrors_other(self): + self.assertEqual( + [{'url': 'https://example.com/fdroid/repo/index-v2.json'}], + fdroidserver.common.get_mirrors( + 'https://example.com/fdroid/repo', 'index-v2.json' + ), + ) + + def test_append_filename_to_mirrors(self): + filename = 'test.apk' + url = 'https://example.com/fdroid/repo' + mirrors = [{'url': url}] + self.assertEqual( + [{'url': url + '/' + filename}], + fdroidserver.common.append_filename_to_mirrors(filename, mirrors), + ) + + def test_append_filename_to_mirrors_full(self): + filename = 'test.apk' + mirrors = fdroidserver.common.FDROIDORG_MIRRORS + for mirror in fdroidserver.common.append_filename_to_mirrors(filename, mirrors): + self.assertTrue(mirror['url'].endswith('/' + filename)) + + def test_get_source_date_epoch(self): + git_repo = git.Repo.init(self.testdir) + Path('README').write_text('file to commit') + git_repo.git.add(all=True) + git_repo.index.commit("README") + self.assertEqual( + git_repo.git.log(n=1, pretty='%ct'), + fdroidserver.common.get_source_date_epoch(self.testdir), + ) + + def test_get_source_date_epoch_no_scm(self): + self.assertIsNone(fdroidserver.common.get_source_date_epoch(self.testdir)) + + def test_get_source_date_epoch_not_git(self): + """Test when build_dir is not a git repo, e.g. hg, svn, etc.""" + appid = 'com.example' + build_dir = Path(self.testdir) / 'build' / appid + fdroiddata = build_dir.parent.parent + (fdroiddata / 'metadata').mkdir() + build_dir.mkdir(parents=True) + os.chdir(build_dir) + git_repo = git.Repo.init(fdroiddata) # fdroiddata is always a git repo + with (fdroiddata / f'metadata/{appid}.yml').open('w') as fp: + fp.write('AutoName: Example App\n') + git_repo.git.add(all=True) + git_repo.index.commit("update README") + self.assertEqual( + git.repo.Repo(fdroiddata).git.log(n=1, pretty='%ct'), + fdroidserver.common.get_source_date_epoch(build_dir), + ) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_set_FDroidPopen_env_with_app(self): + """Test SOURCE_DATE_EPOCH in FDroidPopen when build_dir is a git repo.""" + os.chdir(self.testdir) + app = fdroidserver.metadata.App() + app.id = 'com.example' + build_dir = Path(self.testdir) / 'build' / app.id + git_repo = git.Repo.init(build_dir) + Path('README').write_text('file to commit') + git_repo.git.add(all=True) + now = datetime.now(timezone.utc) + git_repo.index.commit("README", commit_date=now) + fdroidserver.common.set_FDroidPopen_env(app) + p = fdroidserver.common.FDroidPopen(['printenv', 'SOURCE_DATE_EPOCH']) + self.assertEqual(int(p.output), int(now.timestamp())) + + def test_calculate_gradle_flavor_combination(self): + flavors = ['aa', 'BB', 'δδ'] + combinations = ['aaBBΔδ', 'aaBB', 'aaΔδ', 'aa', 'BBΔδ', 'BB', 'δδ', ''] + self.assertEqual(fdroidserver.common.calculate_gradle_flavor_combination(flavors), combinations) + APKS_WITH_JAR_SIGNATURES = ( ( @@ -3125,7 +3288,7 @@ class SignerExtractionTest(unittest.TestCase): """ def setUp(self): - os.chdir(os.path.join(localmodule, 'tests')) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name @@ -3135,6 +3298,7 @@ class SignerExtractionTest(unittest.TestCase): def tearDown(self): self._td.cleanup() + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_first_signer_certificate_with_jars(self): for jar in ( 'signindex/guardianproject-v1.jar', @@ -3153,7 +3317,8 @@ class SignerExtractionTest(unittest.TestCase): @unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES") def test_vs_keytool(self): - unittest.skipUnless(self.keytool, 'requires keytool to run') + if not self.keytool: + self.skipTest('requires keytool to run') pat = re.compile(r'[0-9A-F:]{95}') cmd = [self.keytool, '-printcert', '-jarfile'] for apk, fingerprint in APKS_WITH_JAR_SIGNATURES: @@ -3168,7 +3333,8 @@ class SignerExtractionTest(unittest.TestCase): @unittest.skip("slow and only needed when adding to APKS_WITH_JAR_SIGNATURES") def test_vs_apksigner(self): - unittest.skipUnless(self.apksigner, 'requires apksigner to run') + if not self.apksigner: + self.skipTest('requires apksigner to run') pat = re.compile(r'\s[0-9a-f]{64}\s') cmd = [self.apksigner, 'verify', '--print-certs'] for apk, fingerprint in APKS_WITH_JAR_SIGNATURES + APKS_WITHOUT_JAR_SIGNATURES: @@ -3179,6 +3345,7 @@ class SignerExtractionTest(unittest.TestCase): apk + " should have matching signer fingerprints", ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint_with_v1_apks(self): for apk, fingerprint in APKS_WITH_JAR_SIGNATURES: self.assertEqual( @@ -3187,6 +3354,7 @@ class SignerExtractionTest(unittest.TestCase): f'apk_signer_fingerprint should match stored fingerprint for {apk}', ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_apk_signer_fingerprint_without_v1_apks(self): for apk, fingerprint in APKS_WITHOUT_JAR_SIGNATURES: self.assertEqual( @@ -3195,6 +3363,7 @@ class SignerExtractionTest(unittest.TestCase): f'apk_signer_fingerprint should match stored fingerprint for {apk}', ) + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') def test_get_first_signer_certificate_with_unsigned_jar(self): self.assertIsNone( fdroidserver.common.get_first_signer_certificate('signindex/unsigned.jar') @@ -3237,6 +3406,83 @@ class SignerExtractionTest(unittest.TestCase): fdroidserver.common.signer_fingerprint(v3_certs[0]), ) + def test_signature_block_file_regex(self): + for apkpath, fingerprint in APKS_WITH_JAR_SIGNATURES: + with ZipFile(apkpath, 'r') as apk: + cert_files = [ + n + for n in apk.namelist() + if fdroidserver.common.SIGNATURE_BLOCK_FILE_REGEX.match(n) + ] + self.assertEqual(1, len(cert_files)) + + def test_signature_block_file_regex_malicious(self): + apkpath = os.path.join(self.testdir, 'malicious.apk') + with ZipFile(apkpath, 'w') as apk: + apk.writestr('META-INF/MANIFEST.MF', 'this is fake sig data') + apk.writestr('META-INF/CERT.SF\n', 'this is fake sig data') + apk.writestr('META-INF/AFTER.SF', 'this is fake sig data') + apk.writestr('META-INF/CERT.RSA\n', 'this is fake sig data') + apk.writestr('META-INF/AFTER.RSA', 'this is fake sig data') + with ZipFile(apkpath, 'r') as apk: + self.assertEqual( + ['META-INF/AFTER.RSA'], + [ + n + for n in apk.namelist() + if fdroidserver.common.SIGNATURE_BLOCK_FILE_REGEX.match(n) + ], + ) + + +class IgnoreApksignerV33Test(SetUpTearDownMixin, unittest.TestCase): + """apksigner v33 should be entirely ignored + + https://gitlab.com/fdroid/fdroidserver/-/issues/1253 + """ + + BAD_VERSIONS = [ + '33.0.0-rc1', + '33.0.0-rc2', + '33.0.0-rc3', + '33.0.0-rc4', + '33.0.0', + '33.0.1', + '33.0.2', + '33.0.3', + ] + + def setUp(self): + super().setUp() + self.config = {'sdk_path': self.testdir} + + def _create_fake_build_tools(self, version): + for v in self.BAD_VERSIONS + [version]: + apksigner = os.path.join(self.testdir, 'build-tools', v, 'apksigner') + os.makedirs(os.path.dirname(apksigner)) + with open(apksigner, 'w') as fp: + fp.write(f'#!/bin/sh\necho {v}[\n') + os.chmod(apksigner, 0o0755) # nosec B103 + + def test_find_apksigner_choose_version_32_over_any_33(self): + good = '32.0.0' + self._create_fake_build_tools(good) + with mock.patch.dict(os.environ, clear=True): + os.environ['PATH'] = '/fake/path/to/avoid/conflicts' + fdroidserver.common.find_apksigner(self.config) + self.assertEqual( + os.path.join(self.testdir, 'build-tools', good, 'apksigner'), + self.config.get('apksigner'), + ) + + def test_find_apksigner_choose_no_version_over_any_33(self): + """apksigner v33 should be entirely ignored""" + self._create_fake_build_tools('29.0.0') # too old a version + with mock.patch.dict(os.environ, clear=True): + os.environ['PATH'] = '/fake/path/to/avoid/conflicts' + fdroidserver.common.find_apksigner(self.config) + self.assertIsNone(self.config.get('apksigner')) + class ConfigOptionsScopeTest(unittest.TestCase): """Test assumptions about variable scope for "config" and "options". @@ -3306,7 +3552,7 @@ class ConfigOptionsScopeTest(unittest.TestCase): self.assertIsNone(fdroidserver.common.config) config = fdroidserver.common.read_config() self.assertIsNotNone(fdroidserver.common.config) - self.assertEqual(dict, type(config)) + self.assertTrue(isinstance(config, dict)) self.assertEqual(config, fdroidserver.common.config) def test_get_config_global(self): @@ -3316,7 +3562,7 @@ class ConfigOptionsScopeTest(unittest.TestCase): self.assertIsNone(fdroidserver.common.config) c = fdroidserver.common.read_config() self.assertIsNotNone(fdroidserver.common.config) - self.assertEqual(dict, type(c)) + self.assertTrue(isinstance(c, dict)) self.assertEqual(c, fdroidserver.common.config) self.assertTrue( 'config' not in vars() and 'config' not in globals(), @@ -3324,19 +3570,84 @@ class ConfigOptionsScopeTest(unittest.TestCase): ) -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) +class UnsafePermissionsTest(SetUpTearDownMixin, unittest.TestCase): + def setUp(self): + config = dict() + fdroidserver.common.find_apksigner(config) + if not config.get('apksigner'): + self.skipTest('SKIPPING, apksigner not installed!') - parser = ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) + super().setUp() + os.chdir(self.testdir) + fdroidserver.common.write_config_file('keypass: {env: keypass}') + os.chmod(fdroidserver.common.CONFIG_FILE, 0o666) # nosec B103 - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(CommonTest)) - unittest.main(failfast=False) + def test_config_perm_no_warning(self): + fdroidserver.common.write_config_file('keystore: foo.jks') + with self.assertNoLogs(level=logging.WARNING): + fdroidserver.common.read_config() + + def test_config_perm_keypass_warning(self): + fdroidserver.common.write_config_file('keypass: supersecret') + with self.assertLogs(level=logging.WARNING) as lw: + fdroidserver.common.read_config() + self.assertTrue('unsafe' in lw.output[0]) + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + def test_config_perm_env_warning(self): + os.environ['keypass'] = 'supersecret' + fdroidserver.common.write_config_file('keypass: {env: keypass}') + with self.assertLogs(level=logging.WARNING) as lw: + fdroidserver.common.read_config() + self.assertTrue('unsafe' in lw.output[0]) + self.assertEqual(1, len(lw.output)) + + +class GetHeadCommitIdTest(unittest.TestCase): + """Test and compare two methods of getting the commit ID.""" + + def setUp(self): + self._td = mkdtemp() + self.testdir = self._td.name + os.chdir(self.testdir) + logging.getLogger('git.cmd').setLevel(logging.INFO) + + def tearDown(self): + os.chdir(basedir) + self._td.cleanup() + + @unittest.skipUnless((basedir.parent / '.git').exists(), 'Needs a working git repo') + def test_get_head_commit_id_compare(self): + """Run on this git repo to get some real world noise in there.""" + git_dir = basedir.parent + self.assertIsNotNone(fdroidserver.common.get_head_commit_id(git_dir)) + + def test_get_head_commit_id_error_bare_repo(self): + """Error because it is an empty, bare git repo.""" + git_repo = git.Repo.init(self.testdir) + self.assertIsNone(fdroidserver.common.get_head_commit_id(git_repo)) + + def test_get_head_commit_id_error_no_repo(self): + """Error because there is no .git/ dir.""" + with self.assertLogs('root', level=logging.DEBUG): + self.assertIsNone(fdroidserver.common.get_head_commit_id(self.testdir)) + + def test_get_head_commit_id_detached_and_branch(self): + """Fetching commit ID must work from detached HEADs and branches.""" + git_repo = git.Repo.init(self.testdir) + Path('README').write_text('this is just a test') + git_repo.git.add(all=True) + git_repo.index.commit("add README") + Path('LICENSE').write_text('free!') + git_repo.git.add(all=True) + git_repo.index.commit("add LICENSE") + self.assertIsNotNone(fdroidserver.common.get_head_commit_id(git_repo)) + # detached HEAD + git_repo.git.checkout('HEAD^') + self.assertIsNotNone(fdroidserver.common.get_head_commit_id(git_repo)) + # on a branch with a new commits + git_repo.git.checkout('test', b=True) + Path('foo.py').write_text('print("code!")') + git_repo.git.add(all=True) + git_repo.index.commit("add code") + self.assertIsNotNone(fdroidserver.common.get_head_commit_id(git_repo)) diff --git a/tests/deploy.TestCase b/tests/test_deploy.py similarity index 70% rename from tests/deploy.TestCase rename to tests/test_deploy.py index 3d45625d..d7de7545 100755 --- a/tests/deploy.TestCase +++ b/tests/test_deploy.py @@ -1,11 +1,8 @@ #!/usr/bin/env python3 import configparser -import inspect -import logging import os import shutil -import sys import tempfile import unittest from pathlib import Path @@ -13,36 +10,29 @@ from unittest import mock import git -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) +import fdroidserver -import fdroidserver.common -import fdroidserver.deploy -from fdroidserver.exception import FDroidException -from testcommon import TmpCwd, mkdtemp, parse_args_for_test +from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp + +basedir = Path(__file__).parent +FILES = basedir -class Options: - quiet = False - verbose = False +def _mock_rclone_config_file(cmd, text): # pylint: disable=unused-argument + """Mock output from rclone 1.60.1 but with nonexistent conf file.""" + return "Configuration file doesn't exist, but rclone will use this path:\n/nonexistent/rclone.conf\n" class DeployTest(unittest.TestCase): '''fdroidserver/deploy.py''' def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name fdroidserver.common.options = mock.Mock() fdroidserver.deploy.config = {} - fdroidserver.deploy.USER_RCLONE_CONF = False def tearDown(self): self._td.cleanup() @@ -104,7 +94,7 @@ class DeployTest(unittest.TestCase): with self.assertRaises(SystemExit): fdroidserver.deploy.update_serverwebroots([{'url': 'ssh://nope'}], 'repo') - @unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone') + @unittest.skipUnless(shutil.which('rclone'), 'requires rclone') def test_update_remote_storage_with_rclone(self): os.chdir(self.testdir) repo = Path('repo') @@ -129,26 +119,25 @@ class DeployTest(unittest.TestCase): rclone_config.write(configfile) # setup parameters for this test run - fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder' - fdroidserver.deploy.config['rclone'] = True + awsbucket = 'test_bucket_folder' + fdroidserver.deploy.config['awsbucket'] = awsbucket fdroidserver.deploy.config['rclone_config'] = 'test-local-config' fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file) - fdroidserver.common.options = Options + fdroidserver.common.options = VerboseFalseOptions # write out destination path - destination = Path('test_bucket_folder/fdroid') + destination = Path(f'{awsbucket}/fdroid') destination.mkdir(parents=True, exist_ok=True) dest_apk = Path(destination) / fake_apk dest_index = Path(destination) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) repo_section = str(repo) - # fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file) - fdroidserver.deploy.update_remote_storage_with_rclone(repo_section) + fdroidserver.deploy.update_remote_storage_with_rclone(repo_section, awsbucket) self.assertTrue(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) - @unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone') + @unittest.skipUnless(shutil.which('rclone'), 'requires rclone') def test_update_remote_storage_with_rclone_in_index_only_mode(self): os.chdir(self.testdir) repo = Path('repo') @@ -173,27 +162,165 @@ class DeployTest(unittest.TestCase): rclone_config.write(configfile) # setup parameters for this test run - fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder' - fdroidserver.deploy.config['rclone'] = True + awsbucket = 'test_bucket_folder' + fdroidserver.deploy.config['awsbucket'] = awsbucket fdroidserver.deploy.config['rclone_config'] = 'test-local-config' fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file) - fdroidserver.common.options = Options + fdroidserver.common.options = VerboseFalseOptions # write out destination path - destination = Path('test_bucket_folder/fdroid') + destination = Path(f'{awsbucket}/fdroid') destination.mkdir(parents=True, exist_ok=True) dest_apk = Path(destination) / fake_apk dest_index = Path(destination) / fake_index self.assertFalse(dest_apk.is_file()) self.assertFalse(dest_index.is_file()) repo_section = str(repo) - # fdroidserver.deploy.USER_RCLONE_CONF = str(rclone_file) fdroidserver.deploy.update_remote_storage_with_rclone( - repo_section, is_index_only=True + repo_section, awsbucket, is_index_only=True ) self.assertFalse(dest_apk.is_file()) self.assertTrue(dest_index.is_file()) + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + def test_update_remote_storage_with_rclone_awsbucket_no_env_vars(self): + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.deploy.update_remote_storage_with_rclone('repo', 'foobucket') + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + def test_update_remote_storage_with_rclone_awsbucket_no_AWS_SECRET_ACCESS_KEY(self): + os.environ['AWS_ACCESS_KEY_ID'] = 'accesskey' + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.deploy.update_remote_storage_with_rclone('repo', 'foobucket') + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + def test_update_remote_storage_with_rclone_awsbucket_no_AWS_ACCESS_KEY_ID(self): + os.environ['AWS_SECRET_ACCESS_KEY'] = 'secrets' # nosec B105 + with self.assertRaises(fdroidserver.exception.FDroidException): + fdroidserver.deploy.update_remote_storage_with_rclone('repo', 'foobucket') + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + @mock.patch('subprocess.call') + def test_update_remote_storage_with_rclone_awsbucket_env_vars(self, mock_call): + awsbucket = 'test_bucket_folder' + os.environ['AWS_ACCESS_KEY_ID'] = 'accesskey' + os.environ['AWS_SECRET_ACCESS_KEY'] = 'secrets' # nosec B105 + + def _mock_subprocess_call(cmd): + self.assertEqual( + cmd[:5], + [ + 'rclone', + 'sync', + '--delete-after', + '--config', + '.fdroid-deploy-rclone.conf', + ], + ) + return 0 + + mock_call.side_effect = _mock_subprocess_call + fdroidserver.deploy.config = {'awsbucket': awsbucket} + fdroidserver.deploy.update_remote_storage_with_rclone('repo', awsbucket) + mock_call.assert_called() + + @mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True) + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + @mock.patch('subprocess.call') + def test_update_remote_storage_with_rclone_mock_awsbucket(self, mock_call): + awsbucket = 'test_bucket_folder' + os.environ['AWS_ACCESS_KEY_ID'] = 'accesskey' + os.environ['AWS_SECRET_ACCESS_KEY'] = 'secrets' # nosec B105 + self.last_cmd = None + + def _mock_subprocess_call(cmd): + self.last_cmd = cmd + return 0 + + mock_call.side_effect = _mock_subprocess_call + + fdroidserver.deploy.config = {'awsbucket': awsbucket} + fdroidserver.deploy.update_remote_storage_with_rclone('repo', awsbucket) + self.maxDiff = None + self.assertEqual( + self.last_cmd, + [ + 'rclone', + 'sync', + '--delete-after', + '--config', + '.fdroid-deploy-rclone.conf', + 'repo', + f'AWS-S3-US-East-1:{awsbucket}/fdroid/repo', + ], + ) + + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + @mock.patch('subprocess.call') + def test_update_remote_storage_with_rclone_mock_rclone_config(self, mock_call): + awsbucket = 'test_bucket_folder' + self.last_cmd = None + + def _mock_subprocess_call(cmd): + self.last_cmd = cmd + return 0 + + mock_call.side_effect = _mock_subprocess_call + + fdroidserver.deploy.config = { + 'awsbucket': awsbucket, + 'rclone_config': 'test_local_config', + } + fdroidserver.deploy.update_remote_storage_with_rclone('repo', awsbucket) + self.maxDiff = None + self.assertEqual( + self.last_cmd, + [ + 'rclone', + 'sync', + '--delete-after', + 'repo', + 'test_local_config:test_bucket_folder/fdroid/repo', + ], + ) + + @mock.patch('subprocess.check_output', _mock_rclone_config_file) + @mock.patch('subprocess.call') + def test_update_remote_storage_with_rclone_mock_default_user_path(self, mock_call): + self.last_cmd = None + + def _mock_subprocess_call(cmd): + self.last_cmd = cmd + return 0 + + mock_call.side_effect = _mock_subprocess_call + + os.chdir(self.testdir) + config_name = 'test_local_config' + Path('rclone.conf').write_text('placeholder, contents ignored') + + awsbucket = 'test_bucket_folder' + fdroidserver.deploy.config['awsbucket'] = awsbucket + fdroidserver.deploy.config['rclone_config'] = config_name + fdroidserver.deploy.update_remote_storage_with_rclone('repo', awsbucket) + self.maxDiff = None + self.assertEqual( + self.last_cmd, + [ + 'rclone', + 'sync', + '--delete-after', + '--config', + fdroidserver.deploy.EMBEDDED_RCLONE_CONF, + 'repo', + f'{config_name}:{awsbucket}/fdroid/repo', + ], + ) + def test_update_serverwebroot(self): """rsync works with file paths, so this test uses paths for the URLs""" os.chdir(self.testdir) @@ -256,7 +383,7 @@ class DeployTest(unittest.TestCase): def test_update_serverwebroot_no_rsync_error(self): os.environ['PATH'] = self.testdir os.chdir(self.testdir) - with self.assertRaises(FDroidException): + with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.deploy.update_serverwebroot('serverwebroot', 'repo') def test_update_serverwebroot_make_cur_version_link(self): @@ -317,6 +444,12 @@ class DeployTest(unittest.TestCase): 'repo/index.png', '--exclude', 'repo/index.xml', + '--exclude', + 'repo/signer-index.jar', + '--exclude', + 'repo/signer-index.json', + '--exclude', + 'repo/signer-index.json.asc', 'repo', 'example.com:/var/www/fdroid', ], @@ -404,6 +537,9 @@ class DeployTest(unittest.TestCase): 'repo/index.jar', 'repo/index.png', 'repo/index.xml', + 'repo/signer-index.jar', + 'repo/signer-index.json', + 'repo/signer-index.json.asc', 'example.com:/var/www/fdroid/repo/', ], ) @@ -649,381 +785,6 @@ class DeployTest(unittest.TestCase): name, fdroidserver.deploy.REMOTE_HOSTNAME_REGEX.sub(r'\1', remote_url) ) - def test_update_awsbucket_s3cmd(self): - # setup parameters for this test run - fdroidserver.common.options = mock.Mock() - fdroidserver.common.options.no_checksum = True - fdroidserver.common.options.verbose = False - fdroidserver.common.options.quiet = True - - config = {} - fdroidserver.common.fill_config_defaults(config) - fdroidserver.deploy.config = config - fdroidserver.deploy.config["awsbucket"] = "bucket" - fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" - fdroidserver.deploy.config["awssecretkey"] = "secretkey" - fdroidserver.deploy.config["s3cmd"] = "s3cmd" - - repo_section = 'repo' - - # setup function for asserting subprocess.call invocations - call_iteration = 0 - - def update_awsbucket_s3cmd_call(cmd): - nonlocal call_iteration - if call_iteration == 0: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'info', - f"s3://{fdroidserver.deploy.config['awsbucket']}", - ], - ) - elif call_iteration == 1: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'sync', - '--acl-public', - '--quiet', - '--exclude', - 'repo/altstore-index.json', - '--exclude', - 'repo/altstore-index.json.asc', - '--exclude', - 'repo/entry.jar', - '--exclude', - 'repo/entry.json', - '--exclude', - 'repo/entry.json.asc', - '--exclude', - 'repo/index-v1.jar', - '--exclude', - 'repo/index-v1.json', - '--exclude', - 'repo/index-v1.json.asc', - '--exclude', - 'repo/index-v2.json', - '--exclude', - 'repo/index-v2.json.asc', - '--exclude', - 'repo/index.css', - '--exclude', - 'repo/index.html', - '--exclude', - 'repo/index.jar', - '--exclude', - 'repo/index.png', - '--exclude', - 'repo/index.xml', - '--no-check-md5', - '--skip-existing', - repo_section, - f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", - ], - ) - elif call_iteration == 2: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'sync', - '--acl-public', - '--quiet', - '--exclude', - 'repo/altstore-index.json', - '--exclude', - 'repo/altstore-index.json.asc', - '--exclude', - 'repo/entry.jar', - '--exclude', - 'repo/entry.json', - '--exclude', - 'repo/entry.json.asc', - '--exclude', - 'repo/index-v1.jar', - '--exclude', - 'repo/index-v1.json', - '--exclude', - 'repo/index-v1.json.asc', - '--exclude', - 'repo/index-v2.json', - '--exclude', - 'repo/index-v2.json.asc', - '--exclude', - 'repo/index.css', - '--exclude', - 'repo/index.html', - '--exclude', - 'repo/index.jar', - '--exclude', - 'repo/index.png', - '--exclude', - 'repo/index.xml', - '--no-check-md5', - repo_section, - f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", - ], - ) - elif call_iteration == 3: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'sync', - '--acl-public', - '--quiet', - '--delete-removed', - '--delete-after', - '--no-check-md5', - repo_section, - f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", - ], - ) - else: - self.fail('unexpected subprocess.call invocation') - call_iteration += 1 - return 0 - - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): - os.mkdir('repo') - os.symlink('repo/com.example.sym.apk', 'Sym.apk') - os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') - os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') - with mock.patch('subprocess.call', side_effect=update_awsbucket_s3cmd_call): - fdroidserver.deploy.update_awsbucket_s3cmd(repo_section) - self.assertEqual(call_iteration, 4, 'expected 4 invocations of subprocess.call') - - def test_update_awsbucket_s3cmd_in_index_only_mode(self): - # setup parameters for this test run - fdroidserver.common.options = mock.Mock() - fdroidserver.common.options.no_checksum = True - fdroidserver.common.options.verbose = False - fdroidserver.common.options.quiet = True - - config = {} - fdroidserver.common.fill_config_defaults(config) - fdroidserver.deploy.config = config - fdroidserver.deploy.config["awsbucket"] = "bucket" - fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" - fdroidserver.deploy.config["awssecretkey"] = "secretkey" - fdroidserver.deploy.config["s3cmd"] = "s3cmd" - - repo_section = 'repo' - - # setup function for asserting subprocess.call invocations - call_iteration = 0 - - def update_awsbucket_s3cmd_call(cmd): - nonlocal call_iteration - if call_iteration == 0: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'info', - f"s3://{fdroidserver.deploy.config['awsbucket']}", - ], - ) - elif call_iteration == 1: - self.assertListEqual( - cmd, - [ - 's3cmd', - f"--config={fdroidserver.deploy.AUTO_S3CFG}", - 'sync', - '--acl-public', - '--quiet', - '--include', - 'repo/altstore-index.json', - '--include', - 'repo/altstore-index.json.asc', - '--include', - 'repo/entry.jar', - '--include', - 'repo/entry.json', - '--include', - 'repo/entry.json.asc', - '--include', - 'repo/index-v1.jar', - '--include', - 'repo/index-v1.json', - '--include', - 'repo/index-v1.json.asc', - '--include', - 'repo/index-v2.json', - '--include', - 'repo/index-v2.json.asc', - '--include', - 'repo/index.css', - '--include', - 'repo/index.html', - '--include', - 'repo/index.jar', - '--include', - 'repo/index.png', - '--include', - 'repo/index.xml', - '--delete-removed', - '--delete-after', - '--no-check-md5', - repo_section, - f"s3://{fdroidserver.deploy.config['awsbucket']}/fdroid/", - ], - ) - else: - self.fail('unexpected subprocess.call invocation') - call_iteration += 1 - return 0 - - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): - os.mkdir('repo') - os.symlink('repo/com.example.sym.apk', 'Sym.apk') - os.symlink('repo/com.example.sym.apk.asc', 'Sym.apk.asc') - os.symlink('repo/com.example.sym.apk.sig', 'Sym.apk.sig') - with mock.patch('subprocess.call', side_effect=update_awsbucket_s3cmd_call): - fdroidserver.deploy.update_awsbucket_s3cmd( - repo_section, is_index_only=True - ) - self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call') - - def test_update_awsbucket_libcloud(self): - from libcloud.storage.base import Container - - # setup parameters for this test run - fdroidserver.common.options = mock.Mock() - fdroidserver.common.options.no_checksum = True - fdroidserver.common.options.verbose = False - fdroidserver.common.options.quiet = True - - config = {} - fdroidserver.common.fill_config_defaults(config) - fdroidserver.deploy.config = config - fdroidserver.deploy.config["awsbucket"] = "bucket" - fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" - fdroidserver.deploy.config["awssecretkey"] = "secretkey" - fdroidserver.deploy.config["s3cmd"] = "s3cmd" - - repo_section = 'repo' - - os.chdir(self.testdir) - repo = Path('repo') - repo.mkdir(parents=True) - fake_apk = repo / 'Sym.apk' - with fake_apk.open('w') as fp: - fp.write('not an APK, but has the right filename') - fake_index = repo / fdroidserver.common.INDEX_FILES[0] - with fake_index.open('w') as fp: - fp.write('not an index, but has the right filename') - - with mock.patch( - 'libcloud.storage.drivers.s3.S3StorageDriver' - ) as mock_driver_class: - mock_driver = mock_driver_class.return_value - mock_container = mock.MagicMock(spec=Container) - mock_container.list_objects.return_value = [ - mock.MagicMock(name='Sym.apk'), - mock.MagicMock(name=fdroidserver.common.INDEX_FILES[0]), - ] - - mock_driver.get_container.return_value = mock_container - mock_driver.upload_object_via_stream.return_value = None - - fdroidserver.deploy.update_awsbucket_libcloud(repo_section) - - mock_driver.get_container.assert_called_once_with( - container_name=fdroidserver.deploy.config["awsbucket"] - ) - mock_container.list_objects.assert_called_once_with() - files_to_upload = [ - 'fdroid/repo/Sym.apk', - f"fdroid/repo/{fdroidserver.common.INDEX_FILES[0]}", - ] - calls = [ - mock.call( - iterator=mock.ANY, - container=mock_container, - object_name=file, - extra={'acl': 'public-read'}, - ) - for file in files_to_upload - ] - mock_driver.upload_object_via_stream.assert_has_calls(calls, any_order=True) - assert mock_driver.upload_object_via_stream.call_count == 2 - - def test_update_awsbucket_libcloud_in_index_only_mode(self): - from libcloud.storage.base import Container - - # setup parameters for this test run - fdroidserver.common.options = mock.Mock() - fdroidserver.common.options.no_checksum = True - fdroidserver.common.options.verbose = False - fdroidserver.common.options.quiet = True - - config = {} - fdroidserver.common.fill_config_defaults(config) - fdroidserver.deploy.config = config - fdroidserver.deploy.config["awsbucket"] = "bucket" - fdroidserver.deploy.config["awsaccesskeyid"] = "accesskeyid" - fdroidserver.deploy.config["awssecretkey"] = "secretkey" - fdroidserver.deploy.config["s3cmd"] = "s3cmd" - - repo_section = 'repo' - - os.chdir(self.testdir) - repo = Path('repo') - repo.mkdir(parents=True) - fake_apk = repo / 'Sym.apk' - with fake_apk.open('w') as fp: - fp.write('not an APK, but has the right filename') - fake_index = repo / fdroidserver.common.INDEX_FILES[0] - with fake_index.open('w') as fp: - fp.write('not an index, but has the right filename') - - with mock.patch( - 'libcloud.storage.drivers.s3.S3StorageDriver' - ) as mock_driver_class: - mock_driver = mock_driver_class.return_value - mock_container = mock.MagicMock(spec=Container) - mock_container.list_objects.return_value = [ - mock.MagicMock(name='Sym.apk'), - mock.MagicMock(name=fdroidserver.common.INDEX_FILES[0]), - ] - - mock_driver.get_container.return_value = mock_container - mock_driver.upload_object_via_stream.return_value = None - - fdroidserver.deploy.update_awsbucket_libcloud( - repo_section, is_index_only=True - ) - - mock_driver.get_container.assert_called_once_with( - container_name=fdroidserver.deploy.config["awsbucket"] - ) - mock_container.list_objects.assert_called_once_with() - files_to_upload = [f"fdroid/repo/{fdroidserver.common.INDEX_FILES[0]}"] - calls = [ - mock.call( - iterator=mock.ANY, - container=mock_container, - object_name=file, - extra={'acl': 'public-read'}, - ) - for file in files_to_upload - ] - mock_driver.upload_object_via_stream.assert_has_calls( - calls, - any_order=False, - ) - assert mock_driver.upload_object_via_stream.call_count == 1 - def test_update_servergitmirrors(self): # setup parameters for this test run fdroidserver.common.options = mock.Mock() @@ -1436,7 +1197,7 @@ class Test_UploadToGithubReleasesRepo(unittest.TestCase): ) def test_local_token(self): - self.repo_conf["token"] = "local_token" + self.repo_conf["token"] = "local_token" # nosec B105 with unittest.mock.patch("fdroidserver.github.GithubApi", self.api_constructor): fdroidserver.deploy.upload_to_github_releases_repo( self.repo_conf, @@ -1463,25 +1224,3 @@ class Test_UploadToGithubReleasesRepo(unittest.TestCase): ), ], ) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(DeployTest)) - newSuite.addTest(unittest.makeSuite(GitHubReleasesTest)) - newSuite.addTest(unittest.makeSuite(Test_UploadToGithubReleasesRepo)) - unittest.main(failfast=False) diff --git a/tests/exception.TestCase b/tests/test_exception.py similarity index 55% rename from tests/exception.TestCase rename to tests/test_exception.py index f3e69e69..01a6cd46 100755 --- a/tests/exception.TestCase +++ b/tests/test_exception.py @@ -1,21 +1,8 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import inspect -import os -import sys import unittest -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.common -import fdroidserver.exception +import fdroidserver class ExceptionTest(unittest.TestCase): @@ -51,24 +38,3 @@ class ExceptionTest(unittest.TestCase): raise fdroidserver.exception.FDroidException(('one', 'two', 'three')) except fdroidserver.exception.FDroidException as e: str(e) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - from testcommon import parse_args_for_test - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(ExceptionTest)) - unittest.main(failfast=False) diff --git a/tests/github.TestCase b/tests/test_github.py similarity index 79% rename from tests/github.TestCase rename to tests/test_github.py index 608d7215..f30ce0bb 100755 --- a/tests/github.TestCase +++ b/tests/test_github.py @@ -1,21 +1,11 @@ #!/usr/bin/env python3 -import inspect -import optparse -import os -import sys +import unittest import unittest.mock -import testcommon -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) +import fdroidserver -import fdroidserver.github -import fdroidserver.common +from .shared_test_code import mock_urlopen class GithubApiTest(unittest.TestCase): @@ -40,7 +30,7 @@ class GithubApiTest(unittest.TestCase): def test_list_released_tags(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen( + uomock = mock_urlopen( body='[{"tag_name": "fake"}, {"tag_name": "double_fake"}]' ) with unittest.mock.patch("urllib.request.urlopen", uomock): @@ -59,7 +49,7 @@ class GithubApiTest(unittest.TestCase): def test_tag_exists(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen(body='[{"ref": "refs/tags/fake_tag"}]') + uomock = mock_urlopen(body='[{"ref": "refs/tags/fake_tag"}]') with unittest.mock.patch("urllib.request.urlopen", uomock): result = api.tag_exists('fake_tag') self.assertTrue(result) @@ -67,7 +57,7 @@ class GithubApiTest(unittest.TestCase): def test_tag_exists_failure(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen(body='[{"error": "failure"}]') + uomock = mock_urlopen(body='[{"error": "failure"}]') with unittest.mock.patch("urllib.request.urlopen", uomock): success = api.tag_exists('fake_tag') @@ -77,7 +67,7 @@ class GithubApiTest(unittest.TestCase): def test_list_all_tags(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen( + uomock = mock_urlopen( body='[{"ref": "refs/tags/fake"}, {"ref": "refs/tags/double_fake"}]' ) @@ -89,7 +79,7 @@ class GithubApiTest(unittest.TestCase): def test_create_release(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen(body='{"id": "fakeid"}') + uomock = mock_urlopen(body='{"id": "fakeid"}') api.tag_exists = lambda x: True api._create_release_asset = unittest.mock.Mock() @@ -116,7 +106,7 @@ class GithubApiTest(unittest.TestCase): def test__create_release_asset(self): api = fdroidserver.github.GithubApi('faketoken', 'fakerepopath') - uomock = testcommon.mock_urlopen() + uomock = mock_urlopen() with unittest.mock.patch( 'fdroidserver.github.open', @@ -144,21 +134,3 @@ class GithubApiTest(unittest.TestCase): }, ) self.assertEqual(req.data, b'fake_content') - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - parser = optparse.OptionParser() - parser.add_option( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - (fdroidserver.common.options, args) = parser.parse_args(["--verbose"]) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(GithubApiTest)) - unittest.main(failfast=False) diff --git a/tests/gpgsign.TestCase b/tests/test_gpgsign.py similarity index 60% rename from tests/gpgsign.TestCase rename to tests/test_gpgsign.py index 1c013c1b..84634874 100755 --- a/tests/gpgsign.TestCase +++ b/tests/test_gpgsign.py @@ -1,31 +1,20 @@ #!/usr/bin/env python3 -import inspect import json -import logging import os import shutil -import sys import tempfile import unittest - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -from fdroidserver import common, gpgsign from pathlib import Path from unittest.mock import MagicMock, patch +from fdroidserver import common, gpgsign + +basedir = Path(__file__).parent + class GpgsignTest(unittest.TestCase): - basedir = Path(__file__).resolve().parent - def setUp(self): - logging.basicConfig(level=logging.DEBUG) self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) self.repodir = Path('repo') @@ -34,7 +23,7 @@ class GpgsignTest(unittest.TestCase): gpgsign.config = None config = common.read_config() config['verbose'] = True - config['gpghome'] = str((self.basedir / 'gnupghome').resolve()) + config['gpghome'] = str((basedir / 'gnupghome').resolve()) config['gpgkey'] = '1DBA2E89' gpgsign.config = config @@ -46,8 +35,8 @@ class GpgsignTest(unittest.TestCase): def test_sign_index(self, FDroidPopen): """This skips running gpg because its hard to setup in a test env""" index_v1_json = 'repo/index-v1.json' - shutil.copy(str(self.basedir / index_v1_json), 'repo') - shutil.copy(str(self.basedir / 'SpeedoMeterApp.main_1.apk'), 'repo') + shutil.copy(basedir / index_v1_json, 'repo') + shutil.copy(basedir / 'SpeedoMeterApp.main_1.apk', 'repo') def _side_effect(gpg): f = gpg[-1] @@ -68,24 +57,4 @@ class GpgsignTest(unittest.TestCase): # smoke check status JSON with (self.repodir / 'status/gpgsign.json').open() as fp: data = json.load(fp) - self.assertTrue('index-v1.json' in data['signed']) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - common.parse_args(parser) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(GpgsignTest)) - unittest.main(failfast=False) + self.assertIn('index-v1.json', data['signed']) diff --git a/tests/import_subcommand.TestCase b/tests/test_import_subcommand.py similarity index 67% rename from tests/import_subcommand.TestCase rename to tests/test_import_subcommand.py index b37c2f37..530e10fb 100755 --- a/tests/import_subcommand.TestCase +++ b/tests/test_import_subcommand.py @@ -1,46 +1,82 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import git import logging import os import shutil import sys import tempfile import unittest -import yaml -from unittest import mock from pathlib import Path +from unittest import mock +import git import requests +import yaml -localmodule = Path(__file__).resolve().parent.parent -print('localmodule: ' + str(localmodule)) -if localmodule not in sys.path: - sys.path.insert(0, str(localmodule)) - -import fdroidserver.common +import fdroidserver import fdroidserver.import_subcommand -import fdroidserver.metadata -from fdroidserver.exception import FDroidException -from testcommon import TmpCwd, mkdtemp, parse_args_for_test + +from .shared_test_code import TmpCwd, VerboseFalseOptions, mkdtemp + +basedir = Path(__file__).parent +logging.basicConfig(level=logging.DEBUG) class ImportTest(unittest.TestCase): '''fdroid import''' def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = localmodule / 'tests' - os.chdir(self.basedir) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name def tearDown(self): - os.chdir(self.basedir) + os.chdir(basedir) self._td.cleanup() + def test_get_all_gradle_and_manifests(self): + """Test whether the function works with relative and absolute paths""" + a = fdroidserver.import_subcommand.get_all_gradle_and_manifests( + Path('source-files/cn.wildfirechat.chat') + ) + paths = [ + 'avenginekit/build.gradle', + 'build.gradle', + 'chat/build.gradle', + 'client/build.gradle', + 'client/src/main/AndroidManifest.xml', + 'emojilibrary/build.gradle', + 'gradle/build_libraries.gradle', + 'imagepicker/build.gradle', + 'mars-core-release/build.gradle', + 'push/build.gradle', + 'settings.gradle', + ] + paths = [Path('source-files/cn.wildfirechat.chat') / path for path in paths] + self.assertEqual(sorted(paths), sorted(a)) + + abspath = basedir / 'source-files/realm' + p = fdroidserver.import_subcommand.get_all_gradle_and_manifests(abspath) + self.assertEqual(1, len(p)) + self.assertTrue(p[0].is_relative_to(abspath)) + + def test_get_gradle_subdir(self): + subdirs = { + 'cn.wildfirechat.chat': 'chat', + 'com.anpmech.launcher': 'app', + 'org.tasks': 'app', + 'ut.ewh.audiometrytest': 'app', + 'org.noise_planet.noisecapture': 'app', + } + for k, v in subdirs.items(): + build_dir = Path('source-files') / k + paths = fdroidserver.import_subcommand.get_all_gradle_and_manifests( + build_dir + ) + logging.info(paths) + subdir = fdroidserver.import_subcommand.get_gradle_subdir(build_dir, paths) + self.assertEqual(v, str(subdir)) + def test_import_gitlab(self): with tempfile.TemporaryDirectory() as testdir, TmpCwd(testdir): # FDroidPopen needs some config to work @@ -55,6 +91,7 @@ class ImportTest(unittest.TestCase): print('Skipping ImportTest!') return + fdroidserver.common.options = VerboseFalseOptions app = fdroidserver.import_subcommand.get_app_from_url(url) fdroidserver.import_subcommand.clone_to_tmp_dir(app) self.assertEqual(app.RepoType, 'git') @@ -90,7 +127,7 @@ class ImportTest(unittest.TestCase): tmp_importer, onerror=fdroidserver.import_subcommand.handle_retree_error_on_windows, ) - shutil.copytree(self.basedir / 'source-files' / appid, tmp_importer) + shutil.copytree(basedir / 'source-files' / appid, tmp_importer) app = fdroidserver.import_subcommand.get_app_from_url(url) with mock.patch( @@ -106,7 +143,9 @@ class ImportTest(unittest.TestCase): self.assertEqual(url, app.Repo) self.assertEqual(url, app.SourceCode) logging.info(build_dir) - paths = fdroidserver.common.get_all_gradle_and_manifests(build_dir) + paths = fdroidserver.import_subcommand.get_all_gradle_and_manifests( + build_dir + ) self.assertNotEqual(paths, []) ( versionName, @@ -139,7 +178,7 @@ class ImportTest(unittest.TestCase): the network, if it gets past the code that throws the error. """ - with self.assertRaises(FDroidException): + with self.assertRaises(fdroidserver.exception.FDroidException): fdroidserver.import_subcommand.main() @mock.patch('sys.argv', ['fdroid import', '-u', 'https://fake/git/url.git']) @@ -149,29 +188,12 @@ class ImportTest(unittest.TestCase): def test_main_local_git(self): os.chdir(self.testdir) git.Repo.init('td') - with Path('td/build.gradle').open('w') as fp: - fp.write('android { defaultConfig { applicationId "com.example" } }') + Path('td/build.gradle').write_text( + 'android { defaultConfig { applicationId "com.example" } }' + ) fdroidserver.import_subcommand.main() with open('metadata/com.example.yml') as fp: data = yaml.safe_load(fp) self.assertEqual(data['Repo'], sys.argv[2]) self.assertEqual(data['RepoType'], 'git') self.assertEqual(1, len(data['Builds'])) - - -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(ImportTest)) - unittest.main(failfast=False) diff --git a/tests/index.TestCase b/tests/test_index.py similarity index 86% rename from tests/index.TestCase rename to tests/test_index.py index 0e23c71b..c8ff5cbe 100755 --- a/tests/index.TestCase +++ b/tests/test_index.py @@ -3,33 +3,24 @@ import copy import datetime import glob -import inspect -import logging -import os -import sys -import unittest -import yaml -import zipfile -from unittest.mock import patch -import requests -import tempfile import json +import os import shutil +import tempfile +import unittest +import zipfile +from pathlib import Path +from unittest.mock import patch -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) +import requests +import yaml import fdroidserver from fdroidserver import common, index, publish, signindex, update -from testcommon import TmpCwd, mkdtemp, parse_args_for_test -from pathlib import Path +from .shared_test_code import GP_FINGERPRINT, TmpCwd, mkdtemp -GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A6135' +basedir = Path(__file__).parent class Options: @@ -41,17 +32,15 @@ class Options: class IndexTest(unittest.TestCase): @classmethod def setUpClass(cls): - cls.basedir = os.path.join(localmodule, 'tests') # TODO something should remove cls.index_v1_jar, but it was # causing the tests to be flaky. There seems to be something # that is running the background somehow, maybe sign_index() # exits before jarsigner actually finishes? - cls.index_v1_jar = os.path.join(cls.basedir, 'repo', 'index-v1.jar') + cls.index_v1_jar = basedir / 'repo' / 'index-v1.jar' def setUp(self): - logging.basicConfig(level=logging.ERROR) - os.chmod(os.path.join(self.basedir, 'config.py'), 0o600) - os.chdir(self.basedir) # so read_config() can find config.py + (basedir / common.CONFIG_FILE).chmod(0o600) + os.chdir(basedir) # so read_config() can find config.yml common.config = None common.options = Options @@ -68,11 +57,11 @@ class IndexTest(unittest.TestCase): self._td.cleanup() def _sign_test_index_v1_jar(self): - if not os.path.exists(self.index_v1_jar): - signindex.sign_index(os.path.dirname(self.index_v1_jar), 'index-v1.json') + if not self.index_v1_jar.exists(): + signindex.sign_index(self.index_v1_jar.parent, 'index-v1.json') def test_get_public_key_from_jar_succeeds(self): - source_dir = os.path.join(self.basedir, 'signindex') + source_dir = basedir / 'signindex' for f in ('testy.jar', 'guardianproject.jar'): testfile = os.path.join(source_dir, f) jar = zipfile.ZipFile(testfile) @@ -88,7 +77,7 @@ class IndexTest(unittest.TestCase): self.assertTrue(fingerprint == GP_FINGERPRINT) def test_get_public_key_from_jar_fails(self): - source_dir = os.path.join(self.basedir, 'signindex') + source_dir = basedir / 'signindex' testfile = os.path.join(source_dir, 'unsigned.jar') jar = zipfile.ZipFile(testfile) with self.assertRaises(index.VerificationException): @@ -183,37 +172,16 @@ class IndexTest(unittest.TestCase): ilist = index.download_repo_index(url, verify_fingerprint=False) self.assertEqual(index_url, ilist[1]) # etag item used to return URL - @patch('fdroidserver.net.http_get') - def test_download_repo_index_v2_url_parsing(self, mock_http_get): - """Test whether it is trying to download the right file - - This passes the URL back via the etag return value just as a - hack to check which URL was actually attempted. - - """ - mock_http_get.side_effect = lambda url, etag, timeout: (None, url) - repo_url = 'https://fake.url/fdroid/repo' - entry_url = 'https://fake.url/fdroid/repo/entry.jar' - index_url = 'https://fake.url/fdroid/repo/index-v2.json' - fingerprint_url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT - slash_url = 'https://fake.url/fdroid/repo//?fingerprint=' + GP_FINGERPRINT - for url in (repo_url, entry_url, index_url, fingerprint_url, slash_url): - ilist = index.download_repo_index_v2(url, verify_fingerprint=False) - self.assertEqual(entry_url, ilist[1]) # etag item used to return URL - - @patch('fdroidserver.net.http_get') - def test_download_repo_index_v2(self, mock_http_get): - def http_get_def(url, etag, timeout): # pylint: disable=unused-argument - f = os.path.basename(url) - with open(os.path.join(self.testdir, 'repo', f), 'rb') as fp: - return (fp.read(), 'fakeetag') - - mock_http_get.side_effect = http_get_def + @patch('fdroidserver.net.download_using_mirrors') + def test_download_repo_index_v2(self, mock_download_using_mirrors): + mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( + self.testdir, 'repo', os.path.basename(mirrors[0]['url']) + ) os.chdir(self.testdir) - signindex.config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'entry.json'), 'repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'index-v2.json'), 'repo') + shutil.copy(basedir / 'repo' / 'entry.json', 'repo') + shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') repo_url = 'https://fake.url/fdroid/repo' entry_url = 'https://fake.url/fdroid/repo/entry.jar' @@ -223,53 +191,57 @@ class IndexTest(unittest.TestCase): for url in (repo_url, entry_url, index_url, fingerprint_url, slash_url): data, _ignored = index.download_repo_index_v2(url, verify_fingerprint=False) self.assertEqual(['repo', 'packages'], list(data.keys())) + self.assertEqual( + 'My First F-Droid Repo Demo', data['repo']['name']['en-US'] + ) - @patch('fdroidserver.net.http_get') - def test_download_repo_index_v2_bad_fingerprint(self, mock_http_get): - def http_get_def(url, etag, timeout): # pylint: disable=unused-argument - f = os.path.basename(url) - with open(os.path.join(self.testdir, 'repo', f), 'rb') as fp: - return (fp.read(), 'fakeetag') - - mock_http_get.side_effect = http_get_def + @patch('fdroidserver.net.download_using_mirrors') + def test_download_repo_index_v2_bad_fingerprint(self, mock_download_using_mirrors): + mock_download_using_mirrors.side_effect = lambda mirrors: os.path.join( + self.testdir, 'repo', os.path.basename(mirrors[0]['url']) + ) os.chdir(self.testdir) - signindex.config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'entry.json'), 'repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'index-v2.json'), 'repo') + shutil.copy(basedir / 'repo' / 'entry.json', 'repo') + shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') bad_fp = '0123456789001234567890012345678900123456789001234567890012345678' bad_fp_url = 'https://fake.url/fdroid/repo?fingerprint=' + bad_fp with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(bad_fp_url) - @patch('fdroidserver.net.http_get') - def test_download_repo_index_v2_entry_verify(self, mock_http_get): - def http_get_def(url, etag, timeout): # pylint: disable=unused-argument - return (b'not the entry.jar file contents', 'fakeetag') + @patch('fdroidserver.net.download_using_mirrors') + def test_download_repo_index_v2_entry_verify(self, mock_download_using_mirrors): + def download_using_mirrors_def(mirrors): + f = os.path.join(tempfile.mkdtemp(), os.path.basename(mirrors[0]['url'])) + Path(f).write_text('not the entry.jar file contents') + return f - mock_http_get.side_effect = http_get_def + mock_download_using_mirrors.side_effect = download_using_mirrors_def url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(url) - @patch('fdroidserver.net.http_get') - def test_download_repo_index_v2_index_verify(self, mock_http_get): - def http_get_def(url, etag, timeout): # pylint: disable=unused-argument - return (b'not the index-v2.json file contents', 'fakeetag') + @patch('fdroidserver.net.download_using_mirrors') + def test_download_repo_index_v2_index_verify(self, mock_download_using_mirrors): + def download_using_mirrors_def(mirrors): + f = os.path.join(tempfile.mkdtemp(), os.path.basename(mirrors[0]['url'])) + Path(f).write_text('not the index-v2.json file contents') + return f - mock_http_get.side_effect = http_get_def + mock_download_using_mirrors.side_effect = download_using_mirrors_def os.chdir(self.testdir) - signindex.config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + signindex.config['keystore'] = os.path.join(basedir, 'keystore.jks') os.mkdir('repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'entry.json'), 'repo') - shutil.copy(os.path.join(self.basedir, 'repo', 'index-v2.json'), 'repo') + shutil.copy(basedir / 'repo' / 'entry.json', 'repo') + shutil.copy(basedir / 'repo' / 'index-v2.json', 'repo') signindex.sign_index('repo', 'entry.json') url = 'https://fake.url/fdroid/repo?fingerprint=' + GP_FINGERPRINT with self.assertRaises(fdroidserver.exception.VerificationException): data, _ignored = index.download_repo_index_v2(url) - def test_v1_sort_packages(self): + def test_sort_package_versions(self): i = [ { 'packageName': 'org.smssecure.smssecure', @@ -404,22 +376,19 @@ class IndexTest(unittest.TestCase): "signer": "b33a601a9da97c82e6eb121eb6b90adab561f396602ec4dc8b0019fb587e2af6" } } - os.makedirs('stats') - jarfile = 'stats/publishsigkeys.jar' + os.mkdir('repo') + jarfile = 'repo/signer-index.jar' with zipfile.ZipFile(jarfile, 'w', zipfile.ZIP_DEFLATED) as jar: - jar.writestr('publishsigkeys.json', json.dumps(sigkeyfps)) + jar.writestr('signer-index.json', json.dumps(sigkeyfps)) publish.sign_sig_key_fingerprint_list(jarfile) - with open('config.py', 'w'): - pass + common.write_config_file('') - index.v1_sort_packages( - i, common.load_stats_fdroid_signing_key_fingerprints() - ) + index.sort_package_versions(i, common.load_publish_signer_fingerprints()) self.maxDiff = None self.assertEqual(json.dumps(i, indent=2), json.dumps(o, indent=2)) # and test it still works with get_first_signer_certificate - outdir = os.path.join(self.testdir, 'publishsigkeys') + outdir = os.path.join(self.testdir, 'index-signer-fingerprints') os.mkdir(outdir) common.apk_extract_signatures(jarfile, outdir) certs = glob.glob(os.path.join(outdir, '*.RSA')) @@ -458,7 +427,7 @@ class IndexTest(unittest.TestCase): os.mkdir('metadata') os.mkdir('repo') metadatafile = 'metadata/info.zwanenburg.caffeinetile.yml' - shutil.copy(os.path.join(self.basedir, metadatafile), metadatafile) + shutil.copy(os.path.join(basedir, metadatafile), metadatafile) repo_icons_dir = os.path.join('repo', 'icons') self.assertFalse(os.path.isdir(repo_icons_dir)) repodict = { @@ -668,15 +637,15 @@ class IndexTest(unittest.TestCase): html = f.read() pretty_html = HTMLBeautifier.beautify(html) self.maxDiff = None - self.assertEquals(html, pretty_html) + self.assertEqual(html, pretty_html) with open(os.path.join("repo", "index.css")) as f: css = f.read() pretty_css = CSSBeautifier.beautify(css) self.maxDiff = None - self.assertEquals(css, pretty_css) + self.assertEqual(css, pretty_css) - def test_v1_sort_packages_with_invalid(self): + def test_sort_package_versions_with_invalid(self): i = [ { 'packageName': 'org.smssecure.smssecure', @@ -686,7 +655,7 @@ class IndexTest(unittest.TestCase): } ] - index.v1_sort_packages(i, common.load_stats_fdroid_signing_key_fingerprints()) + index.sort_package_versions(i, common.load_publish_signer_fingerprints()) def test_package_metadata(self): """A smoke check and format check of index.package_metadata()""" @@ -730,7 +699,7 @@ class IndexTest(unittest.TestCase): ) def test_add_mirrors_to_repodict(self): - """Test based on the contents of tests/config.py""" + """Test based on the contents of tests/config.yml""" repodict = {'address': common.config['repo_url']} index.add_mirrors_to_repodict('repo', repodict) self.assertEqual( @@ -747,9 +716,8 @@ class IndexTest(unittest.TestCase): os.chdir(self.testdir) repo_url = 'https://example.com/fdroid/repo' c = {'repo_url': repo_url, 'mirrors': ['http://one/fdroid']} - with open('config.yml', 'w') as fp: + with open(common.CONFIG_FILE, 'w', encoding='utf-8') as fp: yaml.dump(c, fp) - os.system('cat config.yml') common.config = None common.read_config() repodict = {'address': common.config['repo_url']} @@ -845,6 +813,19 @@ class IndexTest(unittest.TestCase): with self.assertRaises(fdroidserver.exception.FDroidException): index.add_mirrors_to_repodict('repo', repodict) + def test_erroneous_isPrimary_in_mirrors_config(self): + """There can be only one primary mirror aka canonical URL""" + common.config = { + 'repo_url': 'http://one/fdroid', + 'mirrors': [ + {'url': 'http://one/fdroid', 'countryCode': 'SA'}, + {'url': 'http://two/fdroid', 'isPrimary': True}, + ], + } + repodict = {'address': common.config['repo_url']} + with self.assertRaises(fdroidserver.exception.FDroidException): + index.add_mirrors_to_repodict('repo', repodict) + class AltstoreIndexTest(unittest.TestCase): def test_make_altstore(self): @@ -886,8 +867,7 @@ class AltstoreIndexTest(unittest.TestCase): with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): repodir = Path(tmpdir) / 'repo' repodir.mkdir() - with open(repodir / "fake.ipa", "w") as f: - f.write("") + (repodir / "fake.ipa").touch() fdroidserver.index.make_altstore( apps, @@ -936,24 +916,3 @@ class AltstoreIndexTest(unittest.TestCase): }, json.load(f), ) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(IndexTest)) - newSuite.addTest(unittest.makeSuite(AltstoreIndexTest)) - unittest.main(failfast=False) diff --git a/tests/test_init.py b/tests/test_init.py new file mode 100755 index 00000000..a038493b --- /dev/null +++ b/tests/test_init.py @@ -0,0 +1,60 @@ +#!/usr/bin/env python3 + +import os +import pathlib +import shutil +import sys +import unittest + +import fdroidserver.common +import fdroidserver.init + +from .shared_test_code import mkdtemp + +basedir = pathlib.Path(__file__).parent + + +class InitTest(unittest.TestCase): + '''fdroidserver/init.py''' + + def setUp(self): + fdroidserver.common.config = None + fdroidserver.init.config = None + self._td = mkdtemp() + self.testdir = self._td.name + os.chdir(self.testdir) + + def tearDown(self): + os.chdir(basedir) + self._td.cleanup() + + def test_disable_in_config(self): + test = 'mysupersecrets' + configfile = pathlib.Path(fdroidserver.common.CONFIG_FILE) + configfile.write_text(f'keystore: NONE\nkeypass: {test}\n', encoding='utf-8') + configfile.chmod(0o600) + config = fdroidserver.common.read_config() + self.assertEqual('NONE', config['keystore']) + self.assertEqual(test, config['keypass']) + fdroidserver.init.disable_in_config('keypass', 'comment') + self.assertIn('#keypass:', configfile.read_text()) + fdroidserver.common.config = None + config = fdroidserver.common.read_config() + self.assertIsNone(config.get('keypass')) + + @unittest.skipIf(os.name == 'nt', "calling main() like this hangs on Windows") + def test_main_in_empty_dir(self): + """Test that `fdroid init` will find apksigner and add it to the config""" + + shutil.copy(basedir / 'keystore.jks', self.testdir) + + bindir = os.path.join(os.getcwd(), 'bin') + os.mkdir(bindir) + apksigner = os.path.join(bindir, 'apksigner') + open(apksigner, 'w').close() + os.chmod(apksigner, 0o755) # nosec B103 + + sys.argv = ['fdroid init', '--keystore', 'keystore.jks', '--repo-keyalias=sova'] + with unittest.mock.patch.dict(os.environ, {'PATH': bindir}): + fdroidserver.init.main() + self.assertEqual(apksigner, fdroidserver.init.config.get('apksigner')) diff --git a/tests/test_install.py b/tests/test_install.py new file mode 100755 index 00000000..aa239d4d --- /dev/null +++ b/tests/test_install.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python3 + +import os +import textwrap +import unittest +from pathlib import Path +from unittest.mock import Mock, patch + +import fdroidserver +from fdroidserver import common, install +from fdroidserver.exception import BuildException, FDroidException + + +@unittest.skipIf(os.uname().machine == 's390x', 'adb is not ported to s390x') +class InstallTest(unittest.TestCase): + '''fdroidserver/install.py''' + + def tearDown(self): + common.config = None + + def test_devices(self): + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.common.config = config + try: + config['adb'] = fdroidserver.common.find_sdk_tools_cmd('adb') + except FDroidException as e: + self.skipTest(f'Skipping test because: {e}') + self.assertTrue(os.path.exists(config['adb'])) + self.assertTrue(os.path.isfile(config['adb'])) + devices = fdroidserver.install.devices() + self.assertIsInstance(devices, list, 'install.devices() did not return a list!') + for device in devices: + self.assertIsInstance(device, str) + + def test_devices_fail(self): + common.config = dict() + common.fill_config_defaults(common.config) + common.config['adb'] = '/bin/false' + with self.assertRaises(FDroidException): + fdroidserver.install.devices() + + def test_devices_fail_nonexistent(self): + """This is mostly just to document this strange difference in behavior""" + common.config = dict() + common.fill_config_defaults(common.config) + common.config['adb'] = '/nonexistent' + with self.assertRaises(BuildException): + fdroidserver.install.devices() + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_none(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = 'List of devices attached\n\n' + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual([], fdroidserver.install.devices()) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_one(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = 'List of devices attached\n05995813\tdevice\n\n' + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual(['05995813'], fdroidserver.install.devices()) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_many(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = textwrap.dedent( + """* daemon not running; starting now at tcp:5037 + * daemon started successfully + List of devices attached + RZCT809FTQM device + 05995813 device + emulator-5556 device + emulator-5554 unauthorized + 0a388e93 no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html] + 986AY133QL device + 09301JEC215064 device + 015d165c3010200e device + 4DCESKVGUC85VOTO device + + """ + ) + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual( + [ + 'RZCT809FTQM', + '05995813', + 'emulator-5556', + '986AY133QL', + '09301JEC215064', + '015d165c3010200e', + '4DCESKVGUC85VOTO', + ], + fdroidserver.install.devices(), + ) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_error(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = textwrap.dedent( + """* daemon not running. starting it now on port 5037 * + * daemon started successfully * + ** daemon still not running + error: cannot connect to daemon + """ + ) + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual([], fdroidserver.install.devices()) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_no_permissions(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = textwrap.dedent( + """List of devices attached + ???????????????? no permissions + """ + ) + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual([], fdroidserver.install.devices()) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_unauthorized(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = textwrap.dedent( + """List of devices attached + aeef5e4e unauthorized + """ + ) + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual([], fdroidserver.install.devices()) + + @patch('fdroidserver.common.SdkToolsPopen') + def test_devices_with_mock_no_permissions_with_serial(self, mock_SdkToolsPopen): + p = Mock() + mock_SdkToolsPopen.return_value = p + p.output = textwrap.dedent( + """List of devices attached + 4DCESKVGUC85VOTO no permissions (missing udev rules? user is in the plugdev group); see [http://developer.android.com/tools/device.html] + + """ + ) + p.returncode = 0 + common.config = dict() + common.fill_config_defaults(common.config) + self.assertEqual([], fdroidserver.install.devices()) + + @staticmethod + def _download_raise(privacy_mode): + raise Exception('fake failed download') + + @patch('fdroidserver.install.download_apk') + @patch('fdroidserver.install.download_fdroid_apk') + @patch('fdroidserver.install.download_fdroid_apk_from_github') + @patch('fdroidserver.install.download_fdroid_apk_from_ipns') + @patch('fdroidserver.install.download_fdroid_apk_from_maven') + def test_install_fdroid_apk_privacy_mode_true( + self, maven, ipns, github, download_fdroid_apk, download_apk + ): + download_apk.side_effect = self._download_raise + download_fdroid_apk.side_effect = self._download_raise + github.side_effect = self._download_raise + ipns.side_effect = self._download_raise + maven.side_effect = self._download_raise + fdroidserver.common.config = {'jarsigner': 'fakepath'} + install.install_fdroid_apk(privacy_mode=True) + download_apk.assert_not_called() + download_fdroid_apk.assert_not_called() + github.assert_called_once() + ipns.assert_called_once() + maven.assert_called_once() + + @patch('fdroidserver.install.download_apk') + @patch('fdroidserver.install.download_fdroid_apk') + @patch('fdroidserver.install.download_fdroid_apk_from_github') + @patch('fdroidserver.install.download_fdroid_apk_from_ipns') + @patch('fdroidserver.install.download_fdroid_apk_from_maven') + def test_install_fdroid_apk_privacy_mode_false( + self, maven, ipns, github, download_fdroid_apk, download_apk + ): + download_apk.side_effect = self._download_raise + download_fdroid_apk.side_effect = self._download_raise + github.side_effect = self._download_raise + ipns.side_effect = self._download_raise + maven.side_effect = self._download_raise + fdroidserver.common.config = {'jarsigner': 'fakepath'} + install.install_fdroid_apk(privacy_mode=False) + download_apk.assert_called_once() + download_fdroid_apk.assert_called_once() + github.assert_called_once() + ipns.assert_called_once() + maven.assert_called_once() + + @patch('fdroidserver.install.download_apk') + @patch('fdroidserver.install.download_fdroid_apk') + @patch('fdroidserver.install.download_fdroid_apk_from_github') + @patch('fdroidserver.install.download_fdroid_apk_from_ipns') + @patch('fdroidserver.install.download_fdroid_apk_from_maven') + @patch('locale.getlocale', lambda: ('zh_CN', 'UTF-8')) + def test_install_fdroid_apk_privacy_mode_locale_auto( + self, maven, ipns, github, download_fdroid_apk, download_apk + ): + download_apk.side_effect = self._download_raise + download_fdroid_apk.side_effect = self._download_raise + github.side_effect = self._download_raise + ipns.side_effect = self._download_raise + maven.side_effect = self._download_raise + fdroidserver.common.config = {'jarsigner': 'fakepath'} + install.install_fdroid_apk(privacy_mode=None) + download_apk.assert_not_called() + download_fdroid_apk.assert_not_called() + github.assert_called_once() + ipns.assert_called_once() + maven.assert_called_once() + + @patch('fdroidserver.net.download_using_mirrors', lambda m: 'testvalue') + def test_download_fdroid_apk_smokecheck(self): + self.assertEqual('testvalue', install.download_fdroid_apk()) + + @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') + def test_download_fdroid_apk(self): + f = install.download_fdroid_apk() + self.assertTrue(Path(f).exists()) + + @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') + def test_download_fdroid_apk_from_maven(self): + f = install.download_fdroid_apk_from_maven() + self.assertTrue(Path(f).exists()) + + @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') + def test_download_fdroid_apk_from_ipns(self): + f = install.download_fdroid_apk_from_ipns() + self.assertTrue(Path(f).exists()) + + @unittest.skipUnless(os.getenv('test_download_fdroid_apk'), 'requires net access') + def test_download_fdroid_apk_from_github(self): + f = install.download_fdroid_apk_from_github() + self.assertTrue(Path(f).exists()) diff --git a/tests/test_integration.py b/tests/test_integration.py new file mode 100755 index 00000000..2cdf19d9 --- /dev/null +++ b/tests/test_integration.py @@ -0,0 +1,1691 @@ +import configparser +import itertools +import os +import platform +import re +import shlex +import shutil +import subprocess +import sys +import threading +import unittest +from datetime import datetime, timezone +from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer +from pathlib import Path + +try: + from androguard.core.bytecodes.apk import get_apkid # androguard <4 +except ModuleNotFoundError: + from androguard.core.apk import get_apkid + +from fdroidserver._yaml import yaml, yaml_dumper + +from .shared_test_code import mkdir_testfiles, VerboseFalseOptions + +# TODO: port generic tests that use index.xml to index-v2 (test that +# explicitly test index-v0 should still use index.xml) + + +basedir = Path(__file__).parent +FILES = basedir + +try: + WORKSPACE = Path(os.environ["WORKSPACE"]) +except KeyError: + WORKSPACE = basedir.parent + +from fdroidserver import common +from fdroidserver import deploy + +conf = {"sdk_path": os.getenv("ANDROID_HOME", "")} +common.find_apksigner(conf) +USE_APKSIGNER = "apksigner" in conf + + +def docker_exists(): + try: + subprocess.check_output(["docker", "info"]) + except Exception: + return False + else: + return True + + +@unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') +class IntegrationTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + try: + cls.fdroid_cmd = shlex.split(os.environ["fdroid"]) + except KeyError: + cls.fdroid_cmd = [WORKSPACE / "fdroid"] + + os.environ.update( + { + "GIT_AUTHOR_NAME": "Test", + "GIT_AUTHOR_EMAIL": "no@mail", + "GIT_COMMITTER_NAME": "Test", + "GIT_COMMITTER_EMAIL": "no@mail", + "GIT_ALLOW_PROTOCOL": "file:https", + } + ) + + def setUp(self): + self.prev_cwd = Path() + self.testdir = mkdir_testfiles(WORKSPACE, self) + self.tmp_repo_root = self.testdir / "fdroid" + self.tmp_repo_root.mkdir(parents=True) + deploy.config = {} + os.chdir(self.tmp_repo_root) + + def tearDown(self): + os.chdir(self.prev_cwd) + shutil.rmtree(self.testdir) + + def assert_run(self, *args, **kwargs): + proc = subprocess.run(*args, **kwargs) + self.assertEqual(proc.returncode, 0) + return proc + + def assert_run_fail(self, *args, **kwargs): + proc = subprocess.run(*args, **kwargs) + self.assertNotEqual(proc.returncode, 0) + return proc + + @staticmethod + def update_yaml(path, items, replace=False): + """Update a .yml file, e.g. config.yml, with the given items.""" + doc = {} + if not replace: + try: + with open(path) as f: + doc = yaml.load(f) + except FileNotFoundError: + pass + doc.update(items) + with open(path, "w") as f: + yaml_dumper.dump(doc, f) + + @staticmethod + def remove_lines(path, unwanted_strings): + """Remove the lines in the path that contain the unwanted strings.""" + + def contains_unwanted(line, unwanted_strings): + for str in unwanted_strings: + if str in line: + return True + return False + + with open(path) as f: + filtered = [ + line for line in f if not contains_unwanted(line, unwanted_strings) + ] + + with open(path, "w") as f: + for line in filtered: + f.write(line) + + @staticmethod + def copy_apks_into_repo(): + def to_skip(name): + for str in [ + "unaligned", + "unsigned", + "badsig", + "badcert", + "bad-unicode", + "janus.apk", + ]: + if str in name: + return True + return False + + for f in FILES.glob("*.apk"): + if not to_skip(f.name): + appid, versionCode, _ignored = get_apkid(f) + shutil.copy( + f, + Path("repo") / common.get_release_apk_filename(appid, versionCode), + ) + + @staticmethod + def create_fake_android_home(path): + (path / "tools").mkdir() + (path / "platform-tools").mkdir() + (path / "build-tools/34.0.0").mkdir(parents=True) + (path / "build-tools/34.0.0/aapt").touch() + + def fdroid_init_with_prebuilt_keystore(self, keystore_path=FILES / "keystore.jks"): + self.assert_run( + self.fdroid_cmd + + ["init", "--keystore", keystore_path, "--repo-keyalias", "sova"] + ) + self.update_yaml( + common.CONFIG_FILE, + { + "keystorepass": "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=", + "keypass": "r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=", + }, + ) + + @unittest.skipUnless(USE_APKSIGNER, "requires apksigner") + def test_run_process_when_building_and_signing_are_on_separate_machines(self): + shutil.copy(FILES / "keystore.jks", "keystore.jks") + self.fdroid_init_with_prebuilt_keystore("keystore.jks") + self.update_yaml( + common.CONFIG_FILE, + { + "make_current_version_link": True, + "keydname": "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US", + }, + ) + + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") + Path("unsigned").mkdir() + shutil.copy( + FILES / "urzip-release-unsigned.apk", + "unsigned/info.guardianproject.urzip_100.apk", + ) + + self.assert_run(self.fdroid_cmd + ["publish", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["update", "--verbose", "--nosign"]) + self.assert_run(self.fdroid_cmd + ["signindex", "--verbose"]) + + self.assertIn( + '', + Path("repo/index.xml").read_text(), + ) + self.assertTrue(Path("repo/index.jar").is_file()) + self.assertTrue(Path("repo/index-v1.jar").is_file()) + apkcache = Path("tmp/apkcache.json") + self.assertTrue(apkcache.is_file()) + self.assertTrue(apkcache.stat().st_size > 0) + self.assertTrue(Path("urzip.apk").is_symlink()) + + def test_utf8_metadata(self): + self.fdroid_init_with_prebuilt_keystore() + self.update_yaml( + common.CONFIG_FILE, + { + "repo_description": "获取已安装在您的设备上的应用的", + "mirrors": ["https://foo.bar/fdroid", "http://secret.onion/fdroid"], + }, + ) + shutil.copy(FILES / "urzip.apk", "repo") + shutil.copy(FILES / "bad-unicode-πÇÇ现代通用字-български-عربي1.apk", "repo") + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") + + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assert_run(self.fdroid_cmd + ["update"]) + + def test_copy_git_import_and_run_fdroid_scanner_on_it(self): + url = "https://gitlab.com/fdroid/ci-test-app.git" + Path("metadata").mkdir() + self.update_yaml( + "metadata/org.fdroid.ci.test.app.yml", + { + "AutoName": "Just A Test", + "WebSite": None, + "Builds": [ + { + "versionName": "0.3", + "versionCode": 300, + "commit": "0.3", + "subdir": "app", + "gradle": ["yes"], + } + ], + "Repo": url, + "RepoType": "git", + }, + ) + + self.assert_run(["git", "clone", url, "build/org.fdroid.ci.test.app"]) + self.assert_run( + self.fdroid_cmd + ["scanner", "org.fdroid.ci.test.app", "--verbose"] + ) + + @unittest.skipUnless(shutil.which("gpg"), "requires command line gpg") + def test_copy_repo_generate_java_gpg_keys_update_and_gpgsign(self): + """Needs tricks to make gpg-agent run in a test harness.""" + self.fdroid_init_with_prebuilt_keystore() + shutil.copytree(FILES / "repo", "repo", dirs_exist_ok=True) + for dir in ["config", "metadata"]: + shutil.copytree(FILES / dir, dir) + # gpg requires a short path to the socket to talk to gpg-agent + gnupghome = (WORKSPACE / '.testfiles/gnupghome').resolve() + shutil.rmtree(gnupghome, ignore_errors=True) + shutil.copytree(FILES / "gnupghome", gnupghome) + os.chmod(gnupghome, 0o700) + self.update_yaml( + common.CONFIG_FILE, + { + "install_list": "org.adaway", + "uninstall_list": ["com.android.vending", "com.facebook.orca"], + "gpghome": str(gnupghome), + "gpgkey": "CE71F7FB", + "mirrors": [ + "http://foobarfoobarfoobar.onion/fdroid", + "https://foo.bar/fdroid", + ], + }, + ) + self.assert_run( + self.fdroid_cmd + ["update", "--verbose", "--pretty"], + env=os.environ | {"LC_MESSAGES": "C.UTF-8"}, + ) + index_xml = Path("repo/index.xml").read_text() + self.assertIn("" in line) + with open("repo/index.xml") as f: + repo_cnt = sum(1 for line in f if "" in line) + if USE_APKSIGNER: + self.assertEqual(archive_cnt, 2) + self.assertEqual(repo_cnt, 10) + else: + # This will fail when jarsigner allows MD5 for APK signatures + self.assertEqual(archive_cnt, 5) + self.assertEqual(repo_cnt, 7) + + @unittest.skipIf(USE_APKSIGNER, "runs only without apksigner") + def test_per_app_archive_policy(self): + self.fdroid_init_with_prebuilt_keystore() + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") + for f in FILES.glob("repo/com.politedroid_[0-9].apk"): + shutil.copy(f, "repo") + self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) + + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 4) + self.assertEqual(archive_cnt, 0) + self.assertIn("com.politedroid_3.apk", repo) + self.assertIn("com.politedroid_4.apk", repo) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_6.apk", repo) + self.assertTrue(Path("repo/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + + # enable one app in the repo + self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertEqual(archive_cnt, 3) + self.assertIn("com.politedroid_6.apk", repo) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_5.apk", archive) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) + + # remove all apps from the repo + self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 0}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 0) + self.assertEqual(archive_cnt, 4) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_5.apk", archive) + self.assertIn("com.politedroid_6.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_6.apk").is_file()) + self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) + + # move back one from archive to the repo + self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertEqual(archive_cnt, 3) + self.assertIn("com.politedroid_6.apk", repo) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_5.apk", archive) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) + self.assertFalse(Path("archive/com.politedroid_6.apk").exists()) + + # set an earlier version as CVC and test that it's the only one not archived + self.update_yaml("metadata/com.politedroid.yml", {"CurrentVersionCode": 5}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertEqual(archive_cnt, 3) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_6.apk", archive) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_6.apk").is_file()) + + def test_moving_old_apks_to_and_from_the_archive(self): + self.fdroid_init_with_prebuilt_keystore() + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") + self.remove_lines("metadata/com.politedroid.yml", ["ArchivePolicy:"]) + for f in FILES.glob("repo/com.politedroid_[0-9].apk"): + shutil.copy(f, "repo") + self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) + + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + self.assertEqual(repo_cnt, 3) + self.assertIn("com.politedroid_4.apk", repo) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_6.apk", repo) + self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(archive_cnt, 1) + self.assertIn("com.politedroid_3.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + + self.update_yaml(common.CONFIG_FILE, {"archive_older": 1}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertIn("com.politedroid_6.apk", repo) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(archive_cnt, 3) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_5.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) + + # disabling deletes from the archive + metadata_path = Path("metadata/com.politedroid.yml") + metadata = metadata_path.read_text() + metadata = re.sub( + "versionCode: 4", "versionCode: 4\n disable: testing deletion", metadata + ) + metadata_path.write_text(metadata) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertIn("com.politedroid_6.apk", repo) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(archive_cnt, 2) + self.assertIn("com.politedroid_3.apk", archive) + self.assertNotIn("com.politedroid_4.apk", archive) + self.assertIn("com.politedroid_5.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertFalse(Path("archive/com.politedroid_4.apk").exists()) + self.assertTrue(Path("archive/com.politedroid_5.apk").is_file()) + + # disabling deletes from the repo, and promotes one from the archive + metadata = re.sub( + "versionCode: 6", "versionCode: 6\n disable: testing deletion", metadata + ) + metadata_path.write_text(metadata) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + self.assertEqual(repo_cnt, 1) + self.assertIn("com.politedroid_5.apk", repo) + self.assertNotIn("com.politedroid_6.apk", repo) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertFalse(Path("repo/com.politedroid_6.apk").exists()) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(archive_cnt, 1) + self.assertIn("com.politedroid_3.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertFalse(Path("archive/com.politedroid_6.apk").exists()) + + def test_that_verify_can_succeed_and_fail(self): + Path("tmp").mkdir() + Path("unsigned").mkdir() + shutil.copy(FILES / "repo/com.politedroid_6.apk", "tmp") + shutil.copy(FILES / "repo/com.politedroid_6.apk", "unsigned") + self.assert_run( + self.fdroid_cmd + + ["verify", "--reuse-remote-apk", "--verbose", "com.politedroid"] + ) + # force a fail + shutil.copy( + FILES / "repo/com.politedroid_5.apk", "unsigned/com.politedroid_6.apk" + ) + self.assert_run_fail( + self.fdroid_cmd + + ["verify", "--reuse-remote-apk", "--verbose", "com.politedroid"] + ) + + def test_allowing_disabled_signatures_in_repo_and_archive(self): + self.fdroid_init_with_prebuilt_keystore() + self.update_yaml( + common.CONFIG_FILE, {"allow_disabled_algorithms": True, "archive_older": 3} + ) + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") + self.update_yaml( + "metadata/info.guardianproject.urzip.yml", + {"Summary": "good test version of urzip"}, + replace=True, + ) + self.update_yaml( + "metadata/org.bitbucket.tickytacky.mirrormirror.yml", + {"Summary": "good MD5 sig, disabled algorithm"}, + replace=True, + ) + for f in Path("metadata").glob("*.yml"): + self.remove_lines(f, ["ArchivePolicy:"]) + for f in itertools.chain( + FILES.glob("urzip-badsig.apk"), + FILES.glob("org.bitbucket.tickytacky.mirrormirror_[0-9].apk"), + FILES.glob("repo/com.politedroid_[0-9].apk"), + ): + shutil.copy(f, "repo") + + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 6) + self.assertEqual(archive_cnt, 2) + self.assertIn("com.politedroid_4.apk", repo) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_6.apk", repo) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) + self.assertNotIn("urzip-badsig.apk", repo) + self.assertNotIn("urzip-badsig.apk", archive) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() + ) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() + ) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() + ) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() + ) + self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) + + if not USE_APKSIGNER: + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + repo = Path("repo/index.xml").read_text() + repo_cnt = sum(1 for line in repo.splitlines() if "" in line) + archive = Path("archive/index.xml").read_text() + archive_cnt = sum(1 for line in archive.splitlines() if "" in line) + self.assertEqual(repo_cnt, 3) + self.assertEqual(archive_cnt, 5) + self.assertIn("com.politedroid_4.apk", repo) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_6.apk", repo) + self.assertNotIn("urzip-badsig.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", archive) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", archive) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", archive) + self.assertIn("com.politedroid_3.apk", archive) + self.assertNotIn("urzip-badsig.apk", archive) + self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() + ) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() + ) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() + ) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() + ) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) + + # test unarchiving when disabled_algorithms are allowed again + self.update_yaml(common.CONFIG_FILE, {"allow_disabled_algorithms": True}) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + with open("archive/index.xml") as f: + archive_cnt = sum(1 for line in f if "" in line) + with open("repo/index.xml") as f: + repo_cnt = sum(1 for line in f if "" in line) + self.assertEqual(repo_cnt, 6) + self.assertEqual(archive_cnt, 2) + self.assertIn("com.politedroid_4.apk", repo) + self.assertIn("com.politedroid_5.apk", repo) + self.assertIn("com.politedroid_6.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_2.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_3.apk", repo) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_4.apk", repo) + self.assertNotIn("urzip-badsig.apk", repo) + self.assertIn("com.politedroid_3.apk", archive) + self.assertIn("org.bitbucket.tickytacky.mirrormirror_1.apk", archive) + self.assertNotIn("urzip-badsig.apk", archive) + self.assertTrue(Path("repo/com.politedroid_4.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_5.apk").is_file()) + self.assertTrue(Path("repo/com.politedroid_6.apk").is_file()) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_2.apk").is_file() + ) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_3.apk").is_file() + ) + self.assertTrue( + Path("repo/org.bitbucket.tickytacky.mirrormirror_4.apk").is_file() + ) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertTrue( + Path("archive/org.bitbucket.tickytacky.mirrormirror_1.apk").is_file() + ) + self.assertTrue(Path("archive/urzip-badsig.apk").is_file()) + + def test_rename_apks_with_fdroid_update_rename_apks_opt_nosign_opt_for_speed(self): + self.fdroid_init_with_prebuilt_keystore() + self.update_yaml( + common.CONFIG_FILE, + { + "keydname": "CN=Birdman, OU=Cell, O=Alcatraz, L=Alcatraz, S=California, C=US" + }, + ) + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/info.guardianproject.urzip.yml", "metadata") + shutil.copy( + FILES / "urzip.apk", + "repo/asdfiuhk urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234 ö.apk", + ) + self.assert_run( + self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] + ) + self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) + index_xml = Path("repo/index.xml").read_text() + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) + self.assertIn("info.guardianproject.urzip_100.apk", index_xml) + + shutil.copy(FILES / "urzip-release.apk", "repo") + self.assert_run( + self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] + ) + self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) + self.assertTrue( + Path("repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() + ) + index_xml = Path("repo/index.xml").read_text() + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) + self.assertIn("info.guardianproject.urzip_100.apk", index_xml) + self.assertIn("info.guardianproject.urzip_100_b4964fd.apk", index_v1_json) + self.assertNotIn("info.guardianproject.urzip_100_b4964fd.apk", index_xml) + + shutil.copy(FILES / "urzip-release.apk", "repo") + self.assert_run( + self.fdroid_cmd + ["update", "--rename-apks", "--pretty", "--nosign"] + ) + self.assertTrue(Path("repo/info.guardianproject.urzip_100.apk").is_file()) + self.assertTrue( + Path("repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() + ) + self.assertTrue( + Path("duplicates/repo/info.guardianproject.urzip_100_b4964fd.apk").is_file() + ) + index_xml = Path("repo/index.xml").read_text() + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertIn("info.guardianproject.urzip_100.apk", index_v1_json) + self.assertIn("info.guardianproject.urzip_100.apk", index_xml) + self.assertIn("info.guardianproject.urzip_100_b4964fd.apk", index_v1_json) + self.assertNotIn("info.guardianproject.urzip_100_b4964fd.apk", index_xml) + + def test_for_added_date_being_set_correctly_for_repo_and_archive(self): + self.fdroid_init_with_prebuilt_keystore() + self.update_yaml(common.CONFIG_FILE, {"archive_older": 3}) + Path("metadata").mkdir() + Path("archive").mkdir() + shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") + shutil.copy(FILES / "repo/index-v2.json", "repo") + shutil.copy(FILES / "repo/com.politedroid_5.apk", "archive") + shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") + + # TODO: the timestamp of the oldest apk in the file should be used, even + # if that doesn't exist anymore + self.update_yaml("metadata/com.politedroid.yml", {"ArchivePolicy": 1}) + + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + timestamp = int(datetime(2017, 6, 23, tzinfo=timezone.utc).timestamp()) * 1000 + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertIn(f'"added": {timestamp}', index_v1_json) + # the archive will have the added timestamp for the app and for the apk, + # both need to be there + with open("archive/index-v1.json") as f: + count = sum(1 for line in f if f'"added": {timestamp}' in line) + self.assertEqual(count, 2) + + def test_whatsnew_from_fastlane_without_cvc_set(self): + self.fdroid_init_with_prebuilt_keystore() + Path("metadata/com.politedroid/en-US/changelogs").mkdir(parents=True) + shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") + shutil.copy(FILES / "metadata/com.politedroid.yml", "metadata") + self.remove_lines("metadata/com.politedroid.yml", ["CurrentVersion:"]) + Path("metadata/com.politedroid/en-US/changelogs/6.txt").write_text( + "whatsnew test" + ) + self.assert_run(self.fdroid_cmd + ["update", "--pretty", "--nosign"]) + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertIn("whatsnew test", index_v1_json) + + def test_metadata_checks(self): + Path("repo").mkdir() + shutil.copy(FILES / "urzip.apk", "repo") + # this should fail because there is no metadata + self.assert_run_fail(self.fdroid_cmd + ["build"]) + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/org.smssecure.smssecure.yml", "metadata") + self.assert_run(self.fdroid_cmd + ["readmeta"]) + + def test_ensure_commands_that_dont_need_the_jdk_work_without_a_jdk_configured(self): + Path("repo").mkdir() + Path("metadata").mkdir() + self.update_yaml( + "metadata/fake.yml", + { + "License": "GPL-2.0-only", + "Summary": "Yup still fake", + "Categories": ["Internet"], + "Description": "this is fake", + }, + ) + # fake that no JDKs are available + self.update_yaml( + common.CONFIG_FILE, + {"categories": ["Internet"], "java_paths": {}}, + replace=True, + ) + local_copy_dir = self.testdir / "local_copy_dir/fdroid" + (local_copy_dir / "repo").mkdir(parents=True) + self.update_yaml( + common.CONFIG_FILE, {"local_copy_dir": str(local_copy_dir.resolve())} + ) + + subprocess.run(self.fdroid_cmd + ["checkupdates", "--allow-dirty"]) + if shutil.which("gpg"): + self.assert_run(self.fdroid_cmd + ["gpgsign"]) + self.assert_run(self.fdroid_cmd + ["lint"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assert_run(self.fdroid_cmd + ["rewritemeta", "fake"]) + self.assert_run(self.fdroid_cmd + ["deploy"]) + self.assert_run(self.fdroid_cmd + ["scanner"]) + + # run these to get their output, but the are not setup, so don't fail + subprocess.run(self.fdroid_cmd + ["build"]) + subprocess.run(self.fdroid_cmd + ["import"]) + subprocess.run(self.fdroid_cmd + ["install", "-n"]) + + def test_config_checks_of_local_copy_dir(self): + self.assert_run(self.fdroid_cmd + ["init"]) + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + local_copy_dir = (self.testdir / "local_copy_dir/fdroid").resolve() + local_copy_dir.mkdir(parents=True) + self.assert_run( + self.fdroid_cmd + ["deploy", "--local-copy-dir", local_copy_dir] + ) + self.assert_run( + self.fdroid_cmd + + ["deploy", "--local-copy-dir", local_copy_dir, "--verbose"] + ) + + # this should fail because thisisnotanabsolutepath is not an absolute path + self.assert_run_fail( + self.fdroid_cmd + ["deploy", "--local-copy-dir", "thisisnotanabsolutepath"] + ) + # this should fail because the path doesn't end with "fdroid" + self.assert_run_fail( + self.fdroid_cmd + + [ + "deploy", + "--local-copy-dir", + "/tmp/IReallyDoubtThisPathExistsasdfasdf", # nosec B108 + ] + ) + # this should fail because the dirname path does not exist + self.assert_run_fail( + self.fdroid_cmd + + [ + "deploy", + "--local-copy-dir", + "/tmp/IReallyDoubtThisPathExistsasdfasdf/fdroid", # nosec B108 + ] + ) + + def test_setup_a_new_repo_from_scratch_using_android_home_and_do_a_local_sync(self): + self.fdroid_init_with_prebuilt_keystore() + self.copy_apks_into_repo() + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assertIn(" 0) + + def test_check_duplicate_files_are_properly_handled_by_fdroid_update(self): + self.fdroid_init_with_prebuilt_keystore() + Path("metadata").mkdir() + shutil.copy(FILES / "metadata/obb.mainpatch.current.yml", "metadata") + shutil.copy(FILES / "repo/obb.mainpatch.current_1619.apk", "repo") + shutil.copy( + FILES / "repo/obb.mainpatch.current_1619_another-release-key.apk", "repo" + ) + self.assert_run(self.fdroid_cmd + ["update", "--pretty"]) + index_xml = Path("repo/index.xml").read_text() + index_v1_json = Path("repo/index-v1.json").read_text() + self.assertNotIn( + "obb.mainpatch.current_1619_another-release-key.apk", index_xml + ) + self.assertIn("obb.mainpatch.current_1619.apk", index_xml) + self.assertIn("obb.mainpatch.current_1619.apk", index_v1_json) + self.assertIn( + "obb.mainpatch.current_1619_another-release-key.apk", index_v1_json + ) + # die if there are exact duplicates + shutil.copy(FILES / "repo/obb.mainpatch.current_1619.apk", "repo/duplicate.apk") + self.assert_run_fail(self.fdroid_cmd + ["update"]) + + def test_setup_new_repo_from_scratch_using_android_home_env_var_putting_apks_in_repo_first( + self, + ): + Path("repo").mkdir() + self.copy_apks_into_repo() + self.fdroid_init_with_prebuilt_keystore() + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assertIn(" 0) + + def test_setup_a_new_repo_manually_and_generate_a_keystore(self): + self.assertFalse(Path("keystore.p12").exists()) + # this should fail because this repo has no keystore + self.assert_run_fail(self.fdroid_cmd + ["update"]) + self.assert_run(self.fdroid_cmd + ["update", "--create-key"]) + self.assertTrue(Path("keystore.p12").is_file()) + self.copy_apks_into_repo() + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assertIn(" 0) + + def test_setup_a_new_repo_from_scratch_generate_a_keystore_then_add_apk_and_update( + self, + ): + self.assert_run(self.fdroid_cmd + ["init", "--keystore", "keystore.p12"]) + self.assertTrue(Path("keystore.p12").is_file()) + self.copy_apks_into_repo() + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata", "--verbose"]) + self.assert_run(self.fdroid_cmd + ["readmeta"]) + self.assertIn(" 0) + self.assertIn(" 0) + + # now set fake repo_keyalias + self.update_yaml(common.CONFIG_FILE, {"repo_keyalias": "fake"}) + # this should fail because this repo has a bad repo_keyalias + self.assert_run_fail(self.fdroid_cmd + ["update"]) + + # this should fail because a keystore is already there + self.assert_run_fail(self.fdroid_cmd + ["update", "--create-key"]) + + # now actually create the key with the existing settings + Path("keystore.jks").unlink() + self.assert_run(self.fdroid_cmd + ["update", "--create-key"]) + self.assertTrue(Path("keystore.jks").is_file()) + + def test_setup_a_new_repo_from_scratch_using_android_home_env_var_with_git_mirror( + self, + ): + server_git_mirror = self.testdir / "server_git_mirror" + server_git_mirror.mkdir() + self.assert_run( + ["git", "-C", server_git_mirror, "init", "--initial-branch", "master"] + ) + self.assert_run( + [ + "git", + "-C", + server_git_mirror, + "config", + "receive.denyCurrentBranch", + "updateInstead", + ] + ) + + self.fdroid_init_with_prebuilt_keystore() + self.update_yaml( + common.CONFIG_FILE, + {"archive_older": 3, "servergitmirrors": str(server_git_mirror)}, + ) + for f in FILES.glob("repo/com.politedroid_[345].apk"): + shutil.copy(f, "repo") + self.assert_run(self.fdroid_cmd + ["update", "--create-metadata"]) + self.assert_run(self.fdroid_cmd + ["deploy"]) + git_mirror = Path("git-mirror") + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_3.apk").is_file()) + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file()) + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file()) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_3.apk").is_file() + ) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file() + ) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file() + ) + (git_mirror / ".git/test-stamp").write_text(str(datetime.now())) + + # add one more APK to trigger archiving + shutil.copy(FILES / "repo/com.politedroid_6.apk", "repo") + self.assert_run(self.fdroid_cmd + ["update"]) + self.assert_run(self.fdroid_cmd + ["deploy"]) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertFalse((git_mirror / "fdroid/archive/com.politedroid_3.apk").exists()) + self.assertFalse( + (server_git_mirror / "fdroid/archive/com.politedroid_3.apk").exists() + ) + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file()) + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file()) + self.assertTrue((git_mirror / "fdroid/repo/com.politedroid_6.apk").is_file()) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_4.apk").is_file() + ) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_5.apk").is_file() + ) + self.assertTrue( + (server_git_mirror / "fdroid/repo/com.politedroid_6.apk").is_file() + ) + before = sum( + f.stat().st_size for f in (git_mirror / ".git").glob("**/*") if f.is_file() + ) + + self.update_yaml(common.CONFIG_FILE, {"git_mirror_size_limit": "60kb"}) + self.assert_run(self.fdroid_cmd + ["update"]) + self.assert_run(self.fdroid_cmd + ["deploy"]) + self.assertTrue(Path("archive/com.politedroid_3.apk").is_file()) + self.assertFalse( + (server_git_mirror / "fdroid/archive/com.politedroid_3.apk").exists() + ) + after = sum( + f.stat().st_size for f in (git_mirror / ".git").glob("**/*") if f.is_file() + ) + self.assertFalse((git_mirror / ".git/test-stamp").exists()) + self.assert_run(["git", "-C", git_mirror, "gc"]) + self.assert_run(["git", "-C", server_git_mirror, "gc"]) + self.assertGreater(before, after) + + def test_sign_binary_repo_in_offline_box_then_publishing_from_online_box(self): + offline_root = self.testdir / "offline_root" + offline_root.mkdir() + local_copy_dir = self.testdir / "local_copy_dir/fdroid" + local_copy_dir.mkdir(parents=True) + online_root = self.testdir / "online_root" + online_root.mkdir() + server_web_root = self.testdir / "server_web_root/fdroid" + server_web_root.mkdir(parents=True) + + # create offline binary transparency log + (offline_root / "binary_transparency").mkdir() + os.chdir(offline_root / "binary_transparency") + self.assert_run(["git", "init", "--initial-branch", "master"]) + + # fake git remote server for binary transparency log + binary_transparency_remote = self.testdir / "binary_transparency_remote" + binary_transparency_remote.mkdir() + + # fake git remote server for repo mirror + server_git_mirror = self.testdir / "server_git_mirror" + server_git_mirror.mkdir() + os.chdir(server_git_mirror) + self.assert_run(["git", "init", "--initial-branch", "master"]) + self.assert_run(["git", "config", "receive.denyCurrentBranch", "updateInstead"]) + + os.chdir(offline_root) + self.fdroid_init_with_prebuilt_keystore() + shutil.copytree(FILES / "repo", "repo", dirs_exist_ok=True) + shutil.copytree(FILES / "metadata", "metadata") + Path("unsigned").mkdir() + shutil.copy(FILES / "urzip-release-unsigned.apk", "unsigned") + self.update_yaml( + common.CONFIG_FILE, + { + "archive_older": 3, + "mirrors": [ + "http://foo.bar/fdroid", + "http://asdflkdsfjafdsdfhkjh.onion/fdroid", + ], + "servergitmirrors": str(server_git_mirror), + "local_copy_dir": str(local_copy_dir), + }, + ) + self.assert_run(self.fdroid_cmd + ["update", "--pretty"]) + index_xml = Path("repo/index.xml").read_text() + self.assertIn("", index_xml) + mirror_cnt = sum(1 for line in index_xml.splitlines() if "" in line) + self.assertEqual(mirror_cnt, 2) + + archive_xml = Path("archive/index.xml").read_text() + self.assertIn("/fdroid/archive", archive_xml) + mirror_cnt = sum(1 for line in archive_xml.splitlines() if "" in line) + self.assertEqual(mirror_cnt, 2) + + os.chdir("binary_transparency") + proc = self.assert_run( + ["git", "rev-list", "--count", "HEAD"], capture_output=True + ) + self.assertEqual(int(proc.stdout), 1) + os.chdir(offline_root) + self.assert_run(self.fdroid_cmd + ["deploy", "--verbose"]) + self.assertTrue( + Path(local_copy_dir / "unsigned/urzip-release-unsigned.apk").is_file() + ) + self.assertIn( + "= (3, 11): + import tomllib +else: + import tomli as tomllib +import yaml import fdroidserver.build import fdroidserver.common +import fdroidserver.exception import fdroidserver.metadata import fdroidserver.scanner -from testcommon import TmpCwd, mkdtemp, mock_open_to_str, parse_args_for_test + +from .shared_test_code import TmpCwd, mkdtemp, mock_open_to_str + +basedir = pathlib.Path(__file__).parent +def _dexdump_found(): + """Find if dexdump is available in the PATH or in an Android SDK install. + + This must be run after common.config is setup. + + """ + try: + dexdump = fdroidserver.common.find_sdk_tools_cmd("dexdump") + logging.debug('Found dexdump: %s', dexdump) + return dexdump is not None + except fdroidserver.exception.FDroidException: + pass + return False + + +# Always use built-in default rules so changes in downloaded rules don't break tests. +@mock.patch( + 'fdroidserver.scanner.SUSSDataController.load', + fdroidserver.scanner.SUSSDataController.load_from_defaults, +) class ScannerTest(unittest.TestCase): def setUp(self): - logging.basicConfig(level=logging.INFO) - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name + fdroidserver.scanner.ScannerTool.refresh_allowed = False def tearDown(self): - os.chdir(self.basedir) + os.chdir(basedir) self._td.cleanup() def test_scan_source_files(self): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.json = False - source_files = os.path.join(self.basedir, 'source-files') projects = { 'OtakuWorld': 2, 'Zillode': 1, @@ -58,39 +75,53 @@ class ScannerTest(unittest.TestCase): 'com.jens.automation2': 3, 'firebase-suspect': 1, 'org.mozilla.rocket': 2, + 'org.piepmeyer.gauguin': 1, 'org.tasks': 3, 'realm': 1, 'se.manyver': 3, 'lockfile.test': 1, + 'com.lolo.io.onelist': 6, + 'catalog.test': 22, } - for d in glob.glob(os.path.join(source_files, '*')): + for d in (basedir / 'source-files').iterdir(): build = fdroidserver.metadata.Build() - fatal_problems = fdroidserver.scanner.scan_source(d, build) - should = projects.get(os.path.basename(d), 0) + should = projects.get(d.name, 0) + if should > 0: + with self.assertLogs(level=logging.ERROR): + fatal_problems = fdroidserver.scanner.scan_source(d, build) + else: + with self.assertNoLogs(): + fatal_problems = fdroidserver.scanner.scan_source(d, build) self.assertEqual( - should, fatal_problems, "%s should have %d errors!" % (d, should) + should, fatal_problems, f'{d} should have {should} errors!' ) - def test_get_gradle_compile_commands(self): + def test_get_gradle_compile_commands_without_catalog(self): test_files = [ - ('source-files/fdroid/fdroidclient/build.gradle', 'yes', 18), - ('source-files/com.nextcloud.client/build.gradle', 'generic', 28), - ('source-files/com.kunzisoft.testcase/build.gradle', 'libre', 4), - ('source-files/cn.wildfirechat.chat/chat/build.gradle', 'yes', 33), - ('source-files/org.tasks/app/build.gradle.kts', 'generic', 43), - ('source-files/at.bitfire.davdroid/build.gradle', 'standard', 16), - ('source-files/se.manyver/android/app/build.gradle', 'indie', 29), - ('source-files/osmandapp/osmand/build.gradle', 'free', 5), - ('source-files/eu.siacs.conversations/build.gradle', 'free', 24), - ('source-files/org.mozilla.rocket/app/build.gradle', 'focus', 42), - ('source-files/com.jens.automation2/app/build.gradle', 'fdroidFlavor', 9), + ('source-files/fdroid/fdroidclient/build.gradle', 'yes', 15), + ('source-files/com.nextcloud.client/build.gradle', 'generic', 24), + ('source-files/com.kunzisoft.testcase/build.gradle', 'libre', 3), + ('source-files/cn.wildfirechat.chat/chat/build.gradle', 'yes', 30), + ('source-files/org.tasks/app/build.gradle.kts', 'generic', 41), + ('source-files/at.bitfire.davdroid/build.gradle', 'standard', 15), + ('source-files/se.manyver/android/app/build.gradle', 'indie', 26), + ('source-files/osmandapp/osmand/build.gradle', 'free', 2), + ('source-files/eu.siacs.conversations/build.gradle', 'free', 21), + ('source-files/org.mozilla.rocket/app/build.gradle', 'focus', 40), + ('source-files/com.jens.automation2/app/build.gradle', 'fdroidFlavor', 5), + ('source-files/flavor.test/build.gradle', ['foss', 'prod'], 7), ] for f, flavor, count in test_files: i = 0 build = fdroidserver.metadata.Build() - build.gradle = [flavor] - regexs = fdroidserver.scanner.get_gradle_compile_commands(build) + if isinstance(flavor, list): + build.gradle = flavor + else: + build.gradle = [flavor] + regexs = fdroidserver.scanner.get_gradle_compile_commands_without_catalog( + build + ) with open(f, encoding='utf-8') as fp: for line in fp.readlines(): for regex in regexs: @@ -99,6 +130,61 @@ class ScannerTest(unittest.TestCase): i += 1 self.assertEqual(count, i) + def test_get_gradle_compile_commands_with_catalog(self): + test_files = [ + ('source-files/com.lolo.io.onelist/build.gradle.kts', 'yes', 5), + ('source-files/com.lolo.io.onelist/app/build.gradle.kts', 'yes', 26), + ('source-files/catalog.test/build.gradle.kts', 'yes', 3), + ('source-files/catalog.test/app/build.gradle', 'yes', 2), + ] + + for f, flavor, count in test_files: + i = 0 + build = fdroidserver.metadata.Build() + build.gradle = [flavor] + regexs = fdroidserver.scanner.get_gradle_compile_commands_with_catalog( + build, "libs" + ) + with open(f, encoding='utf-8') as fp: + for line in fp.readlines(): + for regex in regexs: + m = regex.match(line) + if m: + i += 1 + self.assertEqual(count, i) + + def test_catalog(self): + accessor_coordinate_pairs = { + 'firebase.crash': ['com.google.firebase:firebase-crash:1.1.1'], + 'firebase.core': ['com.google.firebase:firebase-core:2.2.2'], + 'play.service.ads': ['com.google.android.gms:play-services-ads:1.2.1'], + 'jacoco': ['org.jacoco:org.jacoco.core:0.8.7'], + 'plugins.google.services': ['com.google.gms.google-services:1.2.1'], + 'plugins.firebase.crashlytics': ['com.google.firebase.crashlytics:1.1.1'], + 'bundles.firebase': [ + 'com.google.firebase:firebase-crash:1.1.1', + 'com.google.firebase:firebase-core:2.2.2', + ], + 'plugins.androidApplication.asLibraryDependency': [ + 'com.android.application:8.12.0' + ], + } + with open('source-files/catalog.test/gradle/libs.versions.toml', 'rb') as f: + catalog = fdroidserver.scanner.GradleVersionCatalog(tomllib.load(f)) + for accessor, coordinate in accessor_coordinate_pairs.items(): + self.assertEqual(catalog.get_coordinate(accessor), coordinate) + + def test_get_catalogs(self): + test_files = [ + ('source-files/com.lolo.io.onelist/', 1), + ('source-files/catalog.test/', 3), + ('source-files/org.piepmeyer.gauguin/', 1), + ('source-files/com.infomaniak.mail/', 2), + ] + + for root, count in test_files: + self.assertEqual(count, len(fdroidserver.scanner.get_catalogs(root))) + def test_scan_source_files_sneaky_maven(self): """Check for sneaking in banned maven repos""" os.chdir(self.testdir) @@ -120,7 +206,8 @@ class ScannerTest(unittest.TestCase): """ ) ) - count = fdroidserver.scanner.scan_source(self.testdir) + with self.assertLogs(level=logging.ERROR): + count = fdroidserver.scanner.scan_source(self.testdir) self.assertEqual(2, count, 'there should be this many errors') def test_scan_source_file_types(self): @@ -159,8 +246,7 @@ class ScannerTest(unittest.TestCase): fp.write(b'\x00\x00') fp.write(uuid.uuid4().bytes) shutil.copyfile('binary.out', 'fake.png') - os.chmod('fake.png', 0o755) - os.system('ls -l binary.out') + os.chmod('fake.png', 0o755) # nosec B103 with open('snippet.png', 'wb') as fp: fp.write( b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x000\x00\x00' @@ -168,15 +254,15 @@ class ScannerTest(unittest.TestCase): b'IT\x08\x08\x08\x08|\x08d\x88\x00\x00\x00\tpHYs\x00\x00\n' b'a\x00\x00\na\x01\xfc\xccJ%\x00\x00\x00\x19tEXtSoftware' ) - os.chmod('snippet.png', 0o755) - os.system('ls -l fake.png') + os.chmod('snippet.png', 0o755) # nosec B103 # run scanner as if from `fdroid build` os.chdir(self.testdir) json_per_build = fdroidserver.scanner.MessageStore() - count = fdroidserver.scanner.scan_source( - build_dir, json_per_build=json_per_build - ) + with self.assertLogs(level=logging.ERROR): + count = fdroidserver.scanner.scan_source( + build_dir, json_per_build=json_per_build + ) self.assertEqual(6, count, 'there should be this many errors') os.chdir(build_dir) @@ -271,9 +357,15 @@ class ScannerTest(unittest.TestCase): with mock.patch('fdroidserver.common.replace_build_vars', wraps=make_fake_apk): with mock.patch('fdroidserver.common.get_native_code', return_value='x86'): - with mock.patch( - 'fdroidserver.common.get_apk_id', - return_value=(app.id, build.versionCode, build.versionName), + with ( + mock.patch( + 'fdroidserver.common.get_apk_id', + return_value=(app.id, build.versionCode, build.versionName), + ), + mock.patch( + 'fdroidserver.common.get_source_date_epoch', + lambda f: '1234567890', + ), ): with mock.patch( 'fdroidserver.common.is_debuggable_or_testOnly', @@ -299,7 +391,7 @@ class ScannerTest(unittest.TestCase): def test_gradle_maven_url_regex(self): """Check the regex can find all the cases""" - with open(os.path.join(self.basedir, 'gradle-maven-blocks.yaml')) as fp: + with open(basedir / 'gradle-maven-blocks.yaml') as fp: data = yaml.safe_load(fp) urls = [] @@ -339,6 +431,8 @@ class ScannerTest(unittest.TestCase): config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) + if not _dexdump_found(): + self.skipTest('Some Debian arches lack dexdump') for f in ( 'apk.embedded_1.apk', 'bad-unicode-πÇÇ现代通用字-български-عربي1.apk', @@ -384,7 +478,6 @@ class ScannerTest(unittest.TestCase): config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) - print('basedir') for f in ( 'Norway_bouvet_europe_2.obf.zip', 'repo/fake.ota.update_1234.zip', @@ -395,18 +488,17 @@ class ScannerTest(unittest.TestCase): 'should return not results for ' + f, ) - @unittest.skipIf( - sys.hexversion < 0x03090000, 'Python < 3.9 has a limited zipfile.is_zipfile()' - ) def test_get_embedded_classes_secret_apk(self): """Try to hide an APK+DEX in an APK and see if we can find it""" config = dict() fdroidserver.common.config = config fdroidserver.common.fill_config_defaults(config) + if not _dexdump_found(): + self.skipTest('Some Debian arches lack dexdump') apk = 'urzip.apk' mapzip = 'Norway_bouvet_europe_2.obf.zip' secretfile = os.path.join( - self.basedir, 'org.bitbucket.tickytacky.mirrormirror_1.apk' + basedir, 'org.bitbucket.tickytacky.mirrormirror_1.apk' ) with tempfile.TemporaryDirectory() as tmpdir: shutil.copy(apk, tmpdir) @@ -437,12 +529,14 @@ class ScannerTest(unittest.TestCase): class Test_scan_binary(unittest.TestCase): def setUp(self): - self.basedir = os.path.join(localmodule, 'tests') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.common.options = mock.Mock() + if not _dexdump_found(): + self.skipTest('Some Debian arches lack dexdump') + fdroidserver.scanner._SCANNER_TOOL = mock.Mock() fdroidserver.scanner._SCANNER_TOOL.regexs = {} fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { @@ -453,10 +547,12 @@ class Test_scan_binary(unittest.TestCase): fdroidserver.scanner._SCANNER_TOOL.regexs['warn_code_signatures'] = {} def test_code_signature_match(self): - apkfile = os.path.join(self.basedir, 'no_targetsdk_minsdk1_unsigned.apk') + apkfile = os.path.join(basedir, 'no_targetsdk_minsdk1_unsigned.apk') + with self.assertLogs(level=logging.CRITICAL): + problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, - fdroidserver.scanner.scan_binary(apkfile), + problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' @@ -465,14 +561,8 @@ class Test_scan_binary(unittest.TestCase): ), ) - @unittest.skipIf( - sys.version_info < (3, 9), - "Our implementation for traversing zip files will silently fail to work" - "on older python versions, also see: " - "https://gitlab.com/fdroid/fdroidserver/-/merge_requests/1110#note_932026766", - ) def test_bottom_level_embedded_apk_code_signature(self): - apkfile = os.path.join(self.basedir, 'apk.embedded_1.apk') + apkfile = os.path.join(basedir, 'apk.embedded_1.apk') fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { "org/bitbucket/tickytacky/mirrormirror/MainActivity": re.compile( r'.*org/bitbucket/tickytacky/mirrormirror/MainActivity', @@ -480,9 +570,11 @@ class Test_scan_binary(unittest.TestCase): ) } + with self.assertLogs(level=logging.CRITICAL): + problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, - fdroidserver.scanner.scan_binary(apkfile), + problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' @@ -492,15 +584,17 @@ class Test_scan_binary(unittest.TestCase): ) def test_top_level_signature_embedded_apk_present(self): - apkfile = os.path.join(self.basedir, 'apk.embedded_1.apk') + apkfile = os.path.join(basedir, 'apk.embedded_1.apk') fdroidserver.scanner._SCANNER_TOOL.regexs['err_code_signatures'] = { "org/fdroid/ci/BuildConfig": re.compile( r'.*org/fdroid/ci/BuildConfig', re.IGNORECASE | re.UNICODE ) } + with self.assertLogs(level=logging.CRITICAL): + problems = fdroidserver.scanner.scan_binary(apkfile) self.assertEqual( 1, - fdroidserver.scanner.scan_binary(apkfile), + problems, "Did not find expected code signature '{}' in binary '{}'".format( fdroidserver.scanner._SCANNER_TOOL.regexs[ 'err_code_signatures' @@ -511,7 +605,6 @@ class Test_scan_binary(unittest.TestCase): class Test_SignatureDataController(unittest.TestCase): - # __init__ def test_init(self): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' @@ -526,7 +619,7 @@ class Test_SignatureDataController(unittest.TestCase): sdc = fdroidserver.scanner.SignatureDataController( 'nnn', 'fff.yml', 'https://example.com/test.json' ) - sdc.data['last_updated'] = datetime.utcnow().timestamp() + sdc.data['last_updated'] = datetime.now(timezone.utc).timestamp() sdc.check_last_updated() def test_check_last_updated_exception_cache_outdated(self): @@ -534,7 +627,9 @@ class Test_SignatureDataController(unittest.TestCase): 'nnn', 'fff.yml', 'https://example.com/test.json' ) sdc.cache_duration = timedelta(days=7) - sdc.data['last_updated'] = (datetime.utcnow() - timedelta(days=30)).timestamp() + sdc.data['last_updated'] = ( + datetime.now(timezone.utc) - timedelta(days=30) + ).timestamp() with self.assertRaises(fdroidserver.scanner.SignatureDataOutdatedException): sdc.check_last_updated() @@ -584,15 +679,19 @@ class Test_SignatureDataController(unittest.TestCase): func_lfc = mock.Mock() func_vd = mock.Mock() func_clu = mock.Mock() - with mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_cache', - func_lfc, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.verify_data', - func_vd, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.check_last_updated', - func_clu, + with ( + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_cache', + func_lfc, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.verify_data', + func_vd, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.check_last_updated', + func_clu, + ), ): sdc.load() func_lfc.assert_called_once_with() @@ -607,12 +706,15 @@ class Test_SignatureDataController(unittest.TestCase): side_effect=fdroidserver.scanner.SignatureDataCacheMissException ) func_lfd = mock.Mock() - with mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_cache', - func_lfc, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_defaults', - func_lfd, + with ( + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_cache', + func_lfc, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_defaults', + func_lfd, + ), ): sdc.load() func_lfc.assert_called_once_with() @@ -629,21 +731,27 @@ class Test_SignatureDataController(unittest.TestCase): ) func_fsfw = mock.Mock() func_wtc = mock.Mock() - with mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_cache', - func_lfc, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.verify_data', - func_vd, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.check_last_updated', - func_clu, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', - func_fsfw, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.write_to_cache', - func_wtc, + with ( + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_cache', + func_lfc, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.verify_data', + func_vd, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.check_last_updated', + func_clu, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', + func_fsfw, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.write_to_cache', + func_wtc, + ), ): sdc.load() func_lfc.assert_called_once_with() @@ -664,18 +772,23 @@ class Test_SignatureDataController(unittest.TestCase): ) func_fsfw = mock.Mock() func_wtc = mock.Mock() - with mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_cache', - func_lfc, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.load_from_defaults', - func_lfd, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', - func_fsfw, - ), mock.patch( - 'fdroidserver.scanner.SignatureDataController.write_to_cache', - func_wtc, + with ( + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_cache', + func_lfc, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.load_from_defaults', + func_lfd, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.fetch_signatures_from_web', + func_fsfw, + ), + mock.patch( + 'fdroidserver.scanner.SignatureDataController.write_to_cache', + func_wtc, + ), ): sdc.load() func_lfc.assert_called_once_with() @@ -694,9 +807,12 @@ class Test_SignatureDataController(unittest.TestCase): ) sdc.data = {"mocked": "data"} - with mock.patch("builtins.open", open_func), mock.patch( - "fdroidserver.scanner._scanner_cachedir", - return_value=pathlib.Path('.'), + with ( + mock.patch("builtins.open", open_func), + mock.patch( + "fdroidserver.scanner._scanner_cachedir", + return_value=pathlib.Path('.'), + ), ): sdc.write_to_cache() @@ -708,15 +824,15 @@ class Test_ScannerTool(unittest.TestCase): def setUp(self): fdroidserver.common.options = None fdroidserver.common.config = None - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name + fdroidserver.scanner.ScannerTool.refresh_allowed = True def tearDown(self): fdroidserver.common.options = None fdroidserver.common.config = None - os.chdir(self.basedir) + os.chdir(basedir) self._td.cleanup() def test_load(self): @@ -748,7 +864,7 @@ class Test_ScannerTool(unittest.TestCase): def test_refresh_from_config(self): os.chdir(self.testdir) - pathlib.Path('config.yml').write_text('refresh_scanner: true') + fdroidserver.common.write_config_file('refresh_scanner: true\n') with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_called_once() @@ -757,7 +873,7 @@ class Test_ScannerTool(unittest.TestCase): fdroidserver.common.options = mock.Mock() fdroidserver.common.options.refresh_scanner = True os.chdir(self.testdir) - pathlib.Path('config.yml').write_text('refresh_scanner: false') + fdroidserver.common.write_config_file('refresh_scanner: false\n') with mock.patch('fdroidserver.scanner.ScannerTool.refresh') as refresh: fdroidserver.scanner.ScannerTool() refresh.assert_called_once() @@ -771,38 +887,38 @@ class Test_main(unittest.TestCase): self.scan_binary_func = mock.Mock(return_value=0) def test_parsing_appid(self): - """ - This test verifies that app id get parsed correctly + """This test verifies that app id get parsed correctly (doesn't test how they get processed) """ self.args = ["com.example.app"] - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch( - "sys.exit", self.exit_func - ), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch( - "fdroidserver.common.read_app_args", self.read_app_args_func - ), mock.patch( - "fdroidserver.scanner.scan_binary", self.scan_binary_func + with ( + tempfile.TemporaryDirectory() as tmpdir, + TmpCwd(tmpdir), + mock.patch("sys.exit", self.exit_func), + mock.patch("sys.argv", ["fdroid scanner", *self.args]), + mock.patch("fdroidserver.common.read_app_args", self.read_app_args_func), + mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func), ): fdroidserver.scanner.main() self.exit_func.assert_not_called() self.read_app_args_func.assert_called_once_with( - ['com.example.app'], collections.OrderedDict(), True + ['com.example.app'], allow_version_codes=True ) self.scan_binary_func.assert_not_called() def test_parsing_apkpath(self): - """ - This test verifies that apk paths get parsed correctly + """This test verifies that apk paths get parsed correctly (doesn't test how they get processed) """ self.args = ["local.application.apk"] - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir), mock.patch( - "sys.exit", self.exit_func - ), mock.patch("sys.argv", ["fdroid scanner", *self.args]), mock.patch( - "fdroidserver.common.read_app_args", self.read_app_args_func - ), mock.patch( - "fdroidserver.scanner.scan_binary", self.scan_binary_func + with ( + tempfile.TemporaryDirectory() as tmpdir, + TmpCwd(tmpdir), + mock.patch("sys.exit", self.exit_func), + mock.patch("sys.argv", ["fdroid scanner", *self.args]), + mock.patch("fdroidserver.common.read_app_args", self.read_app_args_func), + mock.patch("fdroidserver.scanner.scan_binary", self.scan_binary_func), ): pathlib.Path(self.args[0]).touch() fdroidserver.scanner.main() @@ -810,30 +926,3 @@ class Test_main(unittest.TestCase): self.exit_func.assert_not_called() self.read_app_args_func.assert_not_called() self.scan_binary_func.assert_called_once_with('local.application.apk') - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTests( - [ - unittest.makeSuite(ScannerTest), - unittest.makeSuite(Test_scan_binary), - unittest.makeSuite(Test_SignatureDataController), - unittest.makeSuite(Test_main), - ] - ) - unittest.main(failfast=False) diff --git a/tests/test_signatures.py b/tests/test_signatures.py new file mode 100755 index 00000000..4f7bd105 --- /dev/null +++ b/tests/test_signatures.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 + +import hashlib +import os +import sys +import unittest +from tempfile import TemporaryDirectory + +from fdroidserver import common, signatures + +from .shared_test_code import TmpCwd + +basedir = os.path.dirname(__file__) + + +class SignaturesTest(unittest.TestCase): + def setUp(self): + common.config = None + config = common.read_config() + config['jarsigner'] = common.find_sdk_tools_cmd('jarsigner') + common.config = config + + @unittest.skipIf(sys.byteorder == 'big', "androguard is not ported to big-endian") + def test_main(self): + class OptionsFixture: + APK = [os.path.join(basedir, 'repo', 'com.politedroid_3.apk')] + + with TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): + signatures.extract(OptionsFixture) + + # check if extracted signatures are where they are supposed to be + # also verify weather if extracted file contain what they should + filesAndHashes = ( + ( + os.path.join( + 'metadata', 'com.politedroid', 'signatures', '3', 'MANIFEST.MF' + ), + '7dcd83f0c41a75457fd2311bf3c4578f80d684362d74ba8dc52838d353f31cf2', + ), + ( + os.path.join( + 'metadata', 'com.politedroid', 'signatures', '3', 'RELEASE.RSA' + ), + '883ef3d5a6e0bf69d2a58d9e255a7930f08a49abc38e216ed054943c99c8fdb4', + ), + ( + os.path.join( + 'metadata', 'com.politedroid', 'signatures', '3', 'RELEASE.SF' + ), + '99fbb3211ef5d7c1253f3a7ad4836eadc9905103ce6a75916c40de2831958284', + ), + ) + for path, checksum in filesAndHashes: + self.assertTrue( + os.path.isfile(path), + f'check whether {path!r} was extracted correctly.', + ) + with open(path, 'rb') as f: + self.assertEqual(hashlib.sha256(f.read()).hexdigest(), checksum) diff --git a/tests/signindex.TestCase b/tests/test_signindex.py similarity index 89% rename from tests/signindex.TestCase rename to tests/test_signindex.py index f66e9c18..21d54585 100755 --- a/tests/signindex.TestCase +++ b/tests/test_signindex.py @@ -1,26 +1,16 @@ #!/usr/bin/env python3 -import inspect import json -import logging import os import shutil import subprocess -import sys import tempfile import unittest - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -from fdroidserver import apksigcopier, common, exception, signindex, update from pathlib import Path from unittest.mock import patch +from fdroidserver import apksigcopier, common, exception, signindex, update + class Options: allow_disabled_algorithms = False @@ -46,7 +36,6 @@ class SignindexTest(unittest.TestCase): config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' signindex.config = config - logging.basicConfig(level=logging.DEBUG) self.tempdir = tempfile.TemporaryDirectory() os.chdir(self.tempdir.name) self.repodir = Path('repo') @@ -187,23 +176,3 @@ class SignindexTest(unittest.TestCase): ['jarsigner', '-verify', '-verbose', f], stdout=subprocess.PIPE ) self.assertFalse(b'SHA1withRSA' in cp.stdout) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - common.options = common.parse_args(parser) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(SignindexTest)) - unittest.main(failfast=False) diff --git a/tests/update.TestCase b/tests/test_update.py similarity index 86% rename from tests/update.TestCase rename to tests/test_update.py index dbabcdd0..623f48cc 100755 --- a/tests/update.TestCase +++ b/tests/test_update.py @@ -1,12 +1,8 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - import copy -import git import glob import hashlib -import inspect import json import logging import os @@ -15,16 +11,18 @@ import shutil import string import subprocess import sys -import tempfile -import unittest -import yaml -import zipfile import textwrap +import time +import unittest +import zipfile from binascii import hexlify from datetime import datetime from pathlib import Path from unittest import mock +import git +import yaml + try: # these were moved in androguard 4.0 from androguard.core.apk import APK @@ -47,12 +45,7 @@ except ImportError: except ImportError: from yaml import Loader as FullLoader -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) +from PIL import PngImagePlugin import fdroidserver.common import fdroidserver.exception @@ -60,11 +53,14 @@ import fdroidserver.metadata import fdroidserver.update from fdroidserver.common import CATEGORIES_CONFIG_NAME from fdroidserver.looseversion import LooseVersion -from testcommon import TmpCwd, mkdtemp, parse_args_for_test +from .shared_test_code import TmpCwd, mkdtemp DONATION_FIELDS = ('Donate', 'Liberapay', 'OpenCollective') +logging.getLogger(PngImagePlugin.__name__).setLevel(logging.INFO) +basedir = Path(__file__).parent + class Options: allow_disabled_algorithms = False @@ -76,16 +72,12 @@ class Options: verbose = False +@unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') class UpdateTest(unittest.TestCase): '''fdroid update''' def setUp(self): - logging.basicConfig(level=logging.INFO) - from PIL import PngImagePlugin - - logging.getLogger(PngImagePlugin.__name__).setLevel(logging.INFO) - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) + os.chdir(basedir) self._td = mkdtemp() self.testdir = self._td.name @@ -93,7 +85,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.options = None def tearDown(self): - os.chdir(self.basedir) + os.chdir(basedir) self._td.cleanup() def test_insert_store_metadata(self): @@ -103,24 +95,22 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) fdroidserver.update.config = config - repo_dir = os.path.join(self.basedir, 'repo') + repo_dir = basedir / 'repo' os.mkdir('metadata') for packageName in ( 'obb.mainpatch.current', 'org.videolan.vlc', ): shutil.copytree( - os.path.join(repo_dir, packageName), os.path.join('repo', packageName) + repo_dir / packageName, os.path.join('repo', packageName) ) for packageName in ( 'info.guardianproject.checkey', 'info.guardianproject.urzip', 'org.smssecure.smssecure', ): - if not os.path.exists('metadata'): - os.mkdir('metadata') shutil.copytree( - os.path.join(self.basedir, 'metadata', packageName), + basedir / 'metadata' / packageName, os.path.join('metadata', packageName), ) for packageName in ( @@ -129,12 +119,12 @@ class UpdateTest(unittest.TestCase): 'eu.siacs.conversations', ): shutil.copytree( - os.path.join(self.basedir, 'source-files', packageName), + basedir / 'source-files' / packageName, os.path.join(self.testdir, 'build', packageName), ) testfilename = 'icon_yAfSvPRJukZzMMfUzvbYqwaD1XmHXNtiPBtuPVHW-6s=.png' - testfile = os.path.join(repo_dir, 'org.videolan.vlc', 'en-US', 'icon.png') + testfile = repo_dir / 'org.videolan.vlc/en-US/icon.png' cpdir = os.path.join('metadata', 'org.videolan.vlc', 'en-US') cpfile = os.path.join(cpdir, testfilename) os.makedirs(cpdir, exist_ok=True) @@ -171,7 +161,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.insert_localized_app_metadata(apps) fdroidserver.update.ingest_screenshots_from_repo_dir(apps) - appdir = os.path.join('repo', 'info.guardianproject.urzip', 'en-US') + appdir = Path('repo/info.guardianproject.urzip/en-US') self.assertTrue( os.path.isfile( os.path.join( @@ -190,8 +180,8 @@ class UpdateTest(unittest.TestCase): self.assertEqual(6, len(apps)) for packageName, app in apps.items(): - self.assertTrue('localized' in app, packageName) - self.assertTrue('en-US' in app['localized']) + self.assertIn('localized', app, packageName) + self.assertIn('en-US', app['localized']) self.assertEqual(1, len(app['localized'])) if packageName == 'info.guardianproject.urzip': self.assertEqual(7, len(app['localized']['en-US'])) @@ -265,9 +255,116 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.insert_localized_app_metadata(apps) self.assertEqual('42', apps[app.id]['localized']['en-US']['whatsNew']) + def test_fastlane_with_subdir(self): + """Test if fastlane in simple one-level subdir is found.""" + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'com.example.app' + build_dir = f'build/{app.id}' + flavor = 'flavor' + subdir = 'subproject' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = [flavor] + build.subdir = subdir + app['Builds'] = [build] + + first_value = 'first' + first_dir = Path(f'{build_dir}/src/{flavor}/fastlane/metadata/android/en-US') + first_dir.mkdir(parents=True) + (first_dir / 'title.txt').write_text(first_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name']) + + second_value = 'second' + second_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US') + second_dir.mkdir(parents=True) + (second_dir / 'title.txt').write_text(second_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name']) + + def test_fastlane_with_schildichat(self): + """Test if fastlane is found in this tangle of dirs and symlinks. + + https://github.com/SchildiChat/schildichat-android-next/tree/sc_v0.10.3-ex_25_6_2 + """ + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'chat.schildi.android' + build_dir = f'build/{app.id}' + flavors = ['fdroid', 'sc', 'default'] + subdir = 'app' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = flavors + build.subdir = subdir + app['Builds'] = [build] + + wrong_value = 'wrong' + wrong_dir = Path(f'{build_dir}/upstream_infra/fastlane/metadata/android/en-US') + wrong_dir.mkdir(parents=True) + (wrong_dir / 'title.txt').write_text(wrong_value) + + right_value = 'right' + right_dir = Path(f'{build_dir}/metadata/en-US') + right_dir.mkdir(parents=True) + (right_dir / 'title.txt').write_text(right_value) + _fastlane = Path('.fastlane/metadata') + _fastlane.mkdir(parents=True) + os.symlink('../../metadata', _fastlane / 'android') + os.symlink('.fastlane', 'fastlane') + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(right_value, apps[app.id]['localized']['en-US']['name']) + + def test_fastlane_with_multi_level_subdir(self): + """Test if fastlane in multi-level subdir is found.""" + os.chdir(self.testdir) + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.update.config = config + + app = fdroidserver.metadata.App() + app.id = 'org.videolan.vlc' + build_dir = f'build/{app.id}' + subdir = 'application/app' + apps = {app.id: app} + build = fdroidserver.metadata.Build() + build.versionCode = 42 + build.gradle = ['yes'] + build.subdir = subdir + app['Builds'] = [build] + + first_value = 'first' + first_dir = Path(f'{build_dir}/{subdir}/fastlane/metadata/android/en-US') + first_dir.mkdir(parents=True) + (first_dir / 'title.txt').write_text(first_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(first_value, apps[app.id]['localized']['en-US']['name']) + + # I'm not sure that it is correct behavior for this path to + # override the above path, but it is how it is working now. It + # seems to me it should be the other way around, but that is + # really hard to implement using the current algorithm. + second_value = 'second' + second_dir = Path(f'{build_dir}/fastlane/metadata/android/en-US') + second_dir.mkdir(parents=True) + (second_dir / 'title.txt').write_text(second_value) + fdroidserver.update.insert_localized_app_metadata(apps) + self.assertEqual(second_value, apps[app.id]['localized']['en-US']['name']) + def test_name_title_scraping(self): """metadata file --> fdroiddata localized files --> fastlane/triple-t in app source --> APK""" - shutil.copytree(self.basedir, self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir, self.testdir, dirs_exist_ok=True) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -356,7 +453,7 @@ class UpdateTest(unittest.TestCase): def test_insert_missing_app_names_from_apks_from_repo(self): os.chdir(self.testdir) - shutil.copytree(self.basedir, self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir, self.testdir, dirs_exist_ok=True) config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -405,10 +502,10 @@ class UpdateTest(unittest.TestCase): repoapps['info.guardianproject.urzip']['localized']['en-US']['name']) def test_insert_triple_t_metadata(self): - importer = os.path.join(self.basedir, 'tmp', 'importer') + importer = basedir / 'tmp/importer' packageName = 'org.fdroid.ci.test.app' if not os.path.isdir(importer): - logging.warning('skipping test_insert_triple_t_metadata, import.TestCase must run first!') + logging.warning('skipping test_insert_triple_t_metadata, test_import.py must run first!') return packageDir = os.path.join(self.testdir, 'build', packageName) shutil.copytree(importer, packageDir) @@ -435,7 +532,7 @@ class UpdateTest(unittest.TestCase): apps = fdroidserver.metadata.read_metadata() fdroidserver.update.copy_triple_t_store_metadata(apps) - # TODO ideally, this would compare the whole dict like in metadata.TestCase's test_read_metadata() + # TODO ideally, this would compare the whole dict like in test_metadata.test_read_metadata() correctlocales = [ 'ar', 'ast_ES', 'az', 'ca', 'ca_ES', 'cs-CZ', 'cs_CZ', 'da', 'da-DK', 'de', 'de-DE', 'el', 'en-US', 'es', 'es-ES', 'es_ES', 'et', @@ -446,12 +543,30 @@ class UpdateTest(unittest.TestCase): 'ru_RU', 'sv-SE', 'sv_SE', 'te', 'tr', 'tr-TR', 'uk', 'uk_UA', 'vi', 'vi_VN', 'zh-CN', 'zh_CN', 'zh_TW', ] - locales = sorted(list(apps['org.fdroid.ci.test.app']['localized'].keys())) + locales = sorted(apps['org.fdroid.ci.test.app']['localized']) self.assertEqual(correctlocales, locales) + def test_insert_triple_t_1_graphics(self): + packageName = 'de.wivewa.dialer' + shutil.copytree(basedir / 'triple-t-1-graphics', self.testdir, dirs_exist_ok=True) + os.chdir(self.testdir) + + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.common.config = config + fdroidserver.update.config = config + + apps = fdroidserver.metadata.read_metadata() + fdroidserver.update.copy_triple_t_store_metadata(apps) + + os.chdir(os.path.join('repo', packageName)) + self.assertTrue(os.path.exists(os.path.join('en-US', 'icon.png'))) + self.assertTrue(os.path.exists(os.path.join('en-US', 'featureGraphic.png'))) + self.assertTrue(os.path.exists(os.path.join('en-US', 'phoneScreenshots', '1.png'))) + def test_insert_triple_t_2_metadata(self): packageName = 'org.piwigo.android' - shutil.copytree(os.path.join(self.basedir, 'triple-t-2'), self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir / 'triple-t-2', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) config = dict() @@ -489,7 +604,7 @@ class UpdateTest(unittest.TestCase): packages = ('com.anysoftkeyboard.languagepack.dutch', 'com.menny.android.anysoftkeyboard') names = ('Dutch for AnySoftKeyboard', 'AnySoftKeyboard') - shutil.copytree(os.path.join(self.basedir, 'triple-t-anysoftkeyboard'), self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir / 'triple-t-anysoftkeyboard', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) for packageName, name in zip(packages, names): @@ -510,7 +625,7 @@ class UpdateTest(unittest.TestCase): packages = ('verifier', 'wallet') names = dict(verifier='COVID Certificate Check', wallet='COVID Certificate') - shutil.copytree(os.path.join(self.basedir, 'triple-t-multiple'), self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir / 'triple-t-multiple', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) for p in packages: @@ -530,7 +645,7 @@ class UpdateTest(unittest.TestCase): def test_insert_triple_t_flutter(self): packageName = 'fr.emersion.goguma' - shutil.copytree(os.path.join(self.basedir, 'triple-t-flutter'), self.testdir, dirs_exist_ok=True) + shutil.copytree(basedir / 'triple-t-flutter', self.testdir, dirs_exist_ok=True) os.chdir(self.testdir) config = dict() @@ -602,8 +717,8 @@ class UpdateTest(unittest.TestCase): def testScanApksAndObbs(self): os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') - shutil.copytree(os.path.join(self.basedir, 'metadata'), 'metadata') + shutil.copytree(basedir / 'repo', 'repo') + shutil.copytree(basedir / 'metadata', 'metadata') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() @@ -618,7 +733,7 @@ class UpdateTest(unittest.TestCase): apps = fdroidserver.metadata.read_metadata() knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) - self.assertEqual(len(apks), 17) + self.assertEqual(len(apks), 18) apk = apks[1] self.assertEqual(apk['packageName'], 'com.politedroid') self.assertEqual(apk['versionCode'], 3) @@ -657,7 +772,7 @@ class UpdateTest(unittest.TestCase): def test_apkcache_json(self): """test the migration from pickle to json""" os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() @@ -681,7 +796,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.options.clean = False read_from_json = fdroidserver.update.get_cache() - self.assertEqual(19, len(read_from_json)) + self.assertEqual(20, len(read_from_json)) for f in glob.glob('repo/*.apk'): self.assertTrue(os.path.basename(f) in read_from_json) @@ -697,14 +812,10 @@ class UpdateTest(unittest.TestCase): os.chdir(self.testdir) os.mkdir('repo') - os.mkdir('stats') - with open(os.path.join('stats', 'known_apks.txt'), 'w') as fp: - fp.write('se.manyver_30.apk se.manyver 2018-10-10\n') filename = 'Norway_bouvet_europe_2.obf.zip' - shutil.copy(os.path.join(self.basedir, filename), 'repo') + shutil.copy(basedir / filename, 'repo') knownapks = fdroidserver.common.KnownApks() files, fcachechanged = fdroidserver.update.scan_repo_files(dict(), 'repo', knownapks, False) - knownapks.writeifchanged() self.assertTrue(fcachechanged) info = files[0] @@ -718,7 +829,7 @@ class UpdateTest(unittest.TestCase): def test_read_added_date_from_all_apks(self): os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -731,7 +842,7 @@ class UpdateTest(unittest.TestCase): def test_apply_info_from_latest_apk(self): os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -748,7 +859,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config - os.chdir(self.basedir) + os.chdir(basedir) if 'apksigner' in config: apk_info = fdroidserver.update.scan_apk('v2.only.sig_2.apk') @@ -856,7 +967,7 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config - os.chdir(self.basedir) + os.chdir(basedir) if os.path.basename(os.getcwd()) != 'tests': raise Exception('This test must be run in the "tests/" subdir') @@ -904,10 +1015,10 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): + with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') apkfile = 'repo/SystemWebView-repack.apk' - shutil.copy(os.path.join(self.basedir, os.path.basename(apkfile)), apkfile) + shutil.copy(basedir / os.path.basename(apkfile), apkfile) fdroidserver.update.scan_apk(apkfile) def test_scan_apk_bad_namespace_in_manifest(self): @@ -927,10 +1038,10 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config fdroidserver.update.config = config - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): + with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('repo') apkfile = 'repo/org.sajeg.fallingblocks_3.apk' - shutil.copy(os.path.join(self.basedir, os.path.basename(apkfile)), apkfile) + shutil.copy(basedir / os.path.basename(apkfile), apkfile) fdroidserver.update.scan_apk(apkfile) def test_process_apk(self): @@ -939,7 +1050,7 @@ class UpdateTest(unittest.TestCase): return dumper.represent_dict(data) os.chdir(self.testdir) - shutil.copytree(self.basedir, 'tests') + shutil.copytree(basedir, 'tests') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -993,12 +1104,12 @@ class UpdateTest(unittest.TestCase): TestLoader = FullLoader try: testyaml = '- !!python/object/new:fdroidserver.update.UsesPermission\n - test\n - null' - from_yaml = yaml.load(testyaml, Loader=TestLoader) + from_yaml = yaml.load(testyaml, Loader=TestLoader) # nosec B506 except yaml.constructor.ConstructorError: from yaml import UnsafeLoader as TestLoader with open(savepath, 'r') as f: - from_yaml = yaml.load(f, Loader=TestLoader) + from_yaml = yaml.load(f, Loader=TestLoader) # nosec B506 self.maxDiff = None if not config.get('ipfs_cid'): del from_yaml['ipfsCIDv1'] # handle when ipfs_cid is not installed @@ -1021,7 +1132,7 @@ class UpdateTest(unittest.TestCase): knownapks = fdroidserver.common.KnownApks() - with tempfile.TemporaryDirectory() as tmptestsdir, TmpCwd(tmptestsdir): + with mkdtemp() as tmptestsdir, TmpCwd(tmptestsdir): os.mkdir('repo') os.mkdir('archive') # setup the repo, create icons dirs, etc. @@ -1030,7 +1141,7 @@ class UpdateTest(unittest.TestCase): disabledsigs = ['org.bitbucket.tickytacky.mirrormirror_2.apk'] for apkName in disabledsigs: - shutil.copy(os.path.join(self.basedir, apkName), + shutil.copy(basedir / apkName, os.path.join(tmptestsdir, 'repo')) skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', @@ -1085,7 +1196,7 @@ class UpdateTest(unittest.TestCase): badsigs = ['urzip-badcert.apk', 'urzip-badsig.apk', 'urzip-release-unsigned.apk', ] for apkName in badsigs: - shutil.copy(os.path.join(self.basedir, apkName), + shutil.copy(basedir / apkName, os.path.join(self.testdir, 'repo')) skip, apk, cachechanged = fdroidserver.update.process_apk({}, apkName, 'repo', @@ -1097,7 +1208,7 @@ class UpdateTest(unittest.TestCase): self.assertFalse(cachechanged) def test_process_invalid_apk(self): - os.chdir(self.basedir) + os.chdir(basedir) if os.path.basename(os.getcwd()) != 'tests': raise Exception('This test must be run in the "tests/" subdir') @@ -1121,7 +1232,7 @@ class UpdateTest(unittest.TestCase): def test_get_apks_without_allowed_signatures(self): """Test when no AllowedAPKSigningKeys is specified""" os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -1132,6 +1243,11 @@ class UpdateTest(unittest.TestCase): knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks) apkfile = 'v1.v2.sig_1020.apk' + self.assertIn( + apkfile, + os.listdir('repo'), + f'{apkfile} was archived or otherwise removed from "repo"', + ) (skip, apk, cachechanged) = fdroidserver.update.process_apk( {}, apkfile, 'repo', knownapks, False ) @@ -1142,7 +1258,7 @@ class UpdateTest(unittest.TestCase): def test_get_apks_without_allowed_signatures_allowed(self): """Test when the APK matches the specified AllowedAPKSigningKeys""" os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -1167,7 +1283,7 @@ class UpdateTest(unittest.TestCase): def test_get_apks_without_allowed_signatures_blocked(self): """Test when the APK does not match any specified AllowedAPKSigningKeys""" os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') + shutil.copytree(basedir / 'repo', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) fdroidserver.common.config = config @@ -1194,12 +1310,12 @@ class UpdateTest(unittest.TestCase): os.chdir(self.testdir) os.mkdir('repo') testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) os.mkdir('metadata') metadatafile = os.path.join('metadata', 'com.politedroid.yml') # Copy and manipulate metadata file - shutil.copy(os.path.join(self.basedir, metadatafile), metadatafile) + shutil.copy(basedir / metadatafile, metadatafile) with open(metadatafile, 'a') as fp: fp.write( '\n\nAllowedAPKSigningKeys: 32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6\n' @@ -1213,7 +1329,7 @@ class UpdateTest(unittest.TestCase): config['repo_keyalias'] = 'sova' config['keystorepass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' config['keypass'] = 'r9aquRHYoI8+dYz6jKrLntQ5/NJNASFBacJh7Jv2BlI=' - config['keystore'] = os.path.join(self.basedir, 'keystore.jks') + config['keystore'] = os.path.join(basedir, 'keystore.jks') self.assertTrue(os.path.exists(testapk)) @@ -1223,7 +1339,7 @@ class UpdateTest(unittest.TestCase): self.assertTrue(os.path.exists(testapk)) # Copy and manipulate metadata file again - shutil.copy(os.path.join(self.basedir, metadatafile), metadatafile) + shutil.copy(basedir / metadatafile, metadatafile) with open(metadatafile, 'a') as fp: fp.write( '\n\nAllowedAPKSigningKeys: fa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edeadfa4edead\n' @@ -1236,8 +1352,8 @@ class UpdateTest(unittest.TestCase): def test_translate_per_build_anti_features(self): os.chdir(self.testdir) - shutil.copytree(os.path.join(self.basedir, 'repo'), 'repo') - shutil.copytree(os.path.join(self.basedir, 'metadata'), 'metadata') + shutil.copytree(basedir / 'repo', 'repo') + shutil.copytree(basedir / 'metadata', 'metadata') config = dict() fdroidserver.common.fill_config_defaults(config) config['ndk_paths'] = dict() @@ -1253,13 +1369,13 @@ class UpdateTest(unittest.TestCase): knownapks = fdroidserver.common.KnownApks() apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) fdroidserver.update.translate_per_build_anti_features(apps, apks) - self.assertEqual(len(apks), 17) + self.assertEqual(len(apks), 18) foundtest = False for apk in apks: if apk['packageName'] == 'com.politedroid' and apk['versionCode'] == 3: antiFeatures = apk.get('antiFeatures') self.assertTrue('KnownVuln' in antiFeatures) - self.assertEqual(3, len(antiFeatures)) + self.assertEqual(2, len(antiFeatures)) foundtest = True self.assertTrue(foundtest) @@ -1267,7 +1383,7 @@ class UpdateTest(unittest.TestCase): os.chdir(self.testdir) os.mkdir('repo') os.mkdir('metadata') - shutil.copy(os.path.join(localmodule, 'tests', 'urzip.apk'), 'repo') + shutil.copy(basedir / 'urzip.apk', 'repo') config = dict() fdroidserver.common.fill_config_defaults(config) @@ -1306,7 +1422,7 @@ class UpdateTest(unittest.TestCase): # test using external template.yml os.remove(testfile) self.assertFalse(os.path.exists(testfile)) - shutil.copy(os.path.join(localmodule, 'examples', 'template.yml'), self.testdir) + shutil.copy(basedir.with_name('examples') / 'template.yml', self.testdir) fdroidserver.update.create_metadata_from_template(apk) self.assertTrue(os.path.exists(testfile)) apps = fdroidserver.metadata.read_metadata() @@ -1358,22 +1474,72 @@ class UpdateTest(unittest.TestCase): # pylint: disable=protected-access icons_src = fdroidserver.update._get_apk_icons_src('urzip-release.apk', None) - assert not icons_src + self.assertFalse(icons_src) def test_strip_and_copy_image(self): - in_file = os.path.join(self.basedir, 'metadata', 'info.guardianproject.urzip', 'en-US', 'images', 'icon.png') + in_file = basedir / 'metadata/info.guardianproject.urzip/en-US/images/icon.png' out_file = os.path.join(self.testdir, 'icon.png') - fdroidserver.update._strip_and_copy_image(in_file, out_file) + with self.assertLogs(level=logging.DEBUG): + fdroidserver.update._strip_and_copy_image(in_file, out_file) self.assertTrue(os.path.exists(out_file)) - in_file = os.path.join(self.basedir, 'corrupt-featureGraphic.png') + def test_strip_and_copy_image_bad_filename(self): + in_file = basedir / 'corrupt-featureGraphic.png' out_file = os.path.join(self.testdir, 'corrupt-featureGraphic.png') - fdroidserver.update._strip_and_copy_image(in_file, out_file) + with self.assertLogs(level=logging.DEBUG): + fdroidserver.update._strip_and_copy_image(in_file, out_file) self.assertFalse(os.path.exists(out_file)) + def test_strip_and_copy_image_unchanged(self): + in_file = basedir / 'metadata/info.guardianproject.urzip/en-US/images/icon.png' + out_file = os.path.join(self.testdir, 'icon.png') + shutil.copy2(in_file, out_file) + ctime = os.path.getctime(out_file) + delta = 0.01 + time.sleep(delta) # ensure reliable failure if file isn't preserved + with self.assertLogs(level=logging.DEBUG): # suppress log output + fdroidserver.update._strip_and_copy_image(in_file, out_file) + self.assertAlmostEqual(ctime, os.path.getctime(out_file), delta=delta) + + def test_strip_and_copy_image_in_file_ctime_changed(self): + out_file = os.path.join(self.testdir, 'icon.png') + with open(out_file, 'w') as fp: + fp.write('to be replaced') + size = os.path.getsize(out_file) + delta = 0.01 + time.sleep(delta) # ensure reliable failure when testing ctime + src_file = basedir / 'metadata/info.guardianproject.urzip/en-US/images/icon.png' + in_file = os.path.join(self.testdir, 'in-icon.png') + shutil.copy(src_file, in_file) + time.sleep(delta) # ensure reliable failure when testing ctime + with self.assertLogs(level=logging.DEBUG): # suppress log output + fdroidserver.update._strip_and_copy_image(in_file, out_file) + self.assertNotEqual(size, os.path.getsize(out_file)) + self.assertTrue(os.path.getctime(in_file) <= os.path.getctime(out_file)) + # _strip_and_copy_image syncs mtime from in_file to out_file + self.assertAlmostEqual( + os.path.getmtime(in_file), os.path.getmtime(out_file), delta=delta + ) + + def test_strip_and_copy_image_in_file_mtime_changed(self): + in_file = basedir / 'metadata/info.guardianproject.urzip/en-US/images/icon.png' + out_file = os.path.join(self.testdir, 'icon.png') + shutil.copy(in_file, out_file) + os.utime(out_file, (12345, 12345)) # set atime/mtime to something old + with self.assertLogs(level=logging.DEBUG): # suppress log output + fdroidserver.update._strip_and_copy_image(in_file, out_file) + delta = 0.01 + self.assertNotAlmostEqual( + os.path.getctime(in_file), os.path.getctime(out_file), delta=delta + ) + # _strip_and_copy_image syncs mtime from in_file to out_file + self.assertAlmostEqual( + os.path.getmtime(in_file), os.path.getmtime(out_file), delta=delta + ) + def test_create_metadata_from_template_empty_keys(self): apk = {'packageName': 'rocks.janicerand'} - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): + with mkdtemp() as tmpdir, TmpCwd(tmpdir): os.mkdir('metadata') with open('template.yml', 'w') as f: f.write( @@ -1390,7 +1556,6 @@ class UpdateTest(unittest.TestCase): Translation: Changelog: Donate: - FlattrID: Bitcoin: Litecoin: Name: @@ -1435,7 +1600,6 @@ class UpdateTest(unittest.TestCase): 'CurrentVersionCode': None, 'Disabled': '', 'Donate': '', - 'FlattrID': '', 'IssueTracker': '', 'License': '', 'Litecoin': '', @@ -1560,7 +1724,7 @@ class UpdateTest(unittest.TestCase): self.assertIsNone(app.get(field)) def test_sanitize_funding_yml(self): - with open(os.path.join(self.basedir, 'funding-usernames.yaml')) as fp: + with open(basedir / 'funding-usernames.yaml') as fp: data = yaml.load(fp, Loader=SafeLoader) for k, entries in data.items(): for entry in entries: @@ -1574,7 +1738,7 @@ class UpdateTest(unittest.TestCase): self.assertIsNotNone(m) self.assertIsNone(fdroidserver.update.sanitize_funding_yml_entry('foo\nbar')) self.assertIsNone(fdroidserver.update.sanitize_funding_yml_entry( - ''.join(chr(random.randint(65, 90)) for _ in range(2049)))) + ''.join(chr(random.randint(65, 90)) for _ in range(2049)))) # nosec B311 # not recommended but valid entries self.assertIsNotNone(fdroidserver.update.sanitize_funding_yml_entry(12345)) @@ -1599,7 +1763,7 @@ class UpdateTest(unittest.TestCase): for f, key in files.items(): limit = config['char_limits'][key] with open(f, 'w') as fp: - fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) + fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) # nosec B311 locale = 'ru_US' app = dict() fdroidserver.update._set_localized_text_entry(app, locale, key, f) @@ -1634,7 +1798,7 @@ class UpdateTest(unittest.TestCase): limit = config['char_limits']['author'] for key in ('authorEmail', 'authorPhone', 'authorWebSite'): with open(f, 'w') as fp: - fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) + fp.write(''.join(random.choice(string.ascii_letters) for i in range(limit + 100))) # nosec B311 app = dict() fdroidserver.update._set_author_entry(app, key, f) self.assertEqual(limit, len(app[key])) @@ -1649,10 +1813,10 @@ class UpdateTest(unittest.TestCase): fdroidserver.common.config = {} fdroidserver.update.config = {} fdroidserver.update.options = Options - with tempfile.TemporaryDirectory() as tmpdir: + with mkdtemp() as tmpdir: os.chdir(tmpdir) with mock.patch('sys.argv', ['fdroid update', '']): - fdroidserver.update.status_update_json([], []) + fdroidserver.update.status_update_json({}, [], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertTrue('apksigner' in data) @@ -1660,14 +1824,14 @@ class UpdateTest(unittest.TestCase): fdroidserver.update.config = { 'apksigner': 'apksigner', } - fdroidserver.update.status_update_json([], []) + fdroidserver.update.status_update_json({}, [], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertEqual(shutil.which(fdroidserver.update.config['apksigner']), data['apksigner']) fdroidserver.update.config = {} fdroidserver.common.fill_config_defaults(fdroidserver.update.config) - fdroidserver.update.status_update_json([], []) + fdroidserver.update.status_update_json({}, [], []) with open('repo/status/update.json') as fp: data = json.load(fp) self.assertEqual(fdroidserver.update.config.get('apksigner'), data['apksigner']) @@ -1743,7 +1907,7 @@ class UpdateTest(unittest.TestCase): os.mkdir('repo') testapk = os.path.join('repo', 'com.politedroid_6.apk') testapk_new = os.path.join('repo', 'Politedroid-1.5.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk_new) + shutil.copy(basedir / testapk, testapk_new) config = dict() fdroidserver.common.fill_config_defaults(config) @@ -1802,7 +1966,9 @@ class UpdateTest(unittest.TestCase): def test_categories_txt_is_removed_by_delete_unknown(self): """categories.txt used to be a part of this system, now its nothing.""" os.chdir(self.testdir) - Path('config.yml').write_text('repo_pubkey: ffffffffffffffffffffffffffffffffffffffff') + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' + ) categories_txt = Path('repo/categories.txt') categories_txt.parent.mkdir() @@ -1818,31 +1984,31 @@ class UpdateTest(unittest.TestCase): os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') - Path('config.yml').write_text( - 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff' + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Name: Polite') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): fdroidserver.update.main() with open('repo/index-v2.json') as fp: index = json.load(fp) - self.assertFalse(CATEGORIES_CONFIG_NAME in index['repo']) + self.assertNotIn(CATEGORIES_CONFIG_NAME, index['repo']) def test_auto_defined_categories(self): """Repos that don't define categories in config/ should use auto-generated.""" os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') - Path('config.yml').write_text( - 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff' + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): @@ -1854,20 +2020,55 @@ class UpdateTest(unittest.TestCase): index['repo'][CATEGORIES_CONFIG_NAME], ) + def test_categories_with_only_icon_defined(self): + """If cateogories.yml only includes the icon, the name should be added.""" + os.chdir(self.testdir) + os.mkdir('config') + os.mkdir('metadata') + os.mkdir('repo') + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' + ) + testvalue = 'Time' + Path('config/time.png').write_text('placeholder') + Path('config/categories.yml').write_text(testvalue + ': {icon: time.png}') + + testapk = os.path.join('repo', 'com.politedroid_6.apk') + shutil.copy(basedir / testapk, testapk) + Path('metadata/com.politedroid.yml').write_text(f'Categories: [{testvalue}]') + + with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): + fdroidserver.update.main() + with open('repo/index-v2.json') as fp: + index = json.load(fp) + self.assertEqual( + { + 'icon': { + 'en-US': { + 'name': '/icons/time.png', + 'sha256': '4097889236a2af26c293033feb964c4cf118c0224e0d063fec0a89e9d0569ef2', + 'size': 11, + } + }, + 'name': {'en-US': testvalue}, + }, + index['repo'][CATEGORIES_CONFIG_NAME][testvalue], + ) + def test_auto_defined_categories_two_apps(self): """Repos that don't define categories in config/ should use auto-generated.""" os.chdir(self.testdir) os.mkdir('metadata') os.mkdir('repo') - Path('config.yml').write_text( - 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff' + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [bar]') testapk = os.path.join('repo', 'souch.smsbypass_9.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/souch.smsbypass.yml').write_text('Categories: [foo, bar]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): @@ -1886,15 +2087,15 @@ class UpdateTest(unittest.TestCase): Path('config/categories.yml').write_text('System: {name: System Apps}') os.mkdir('metadata') os.mkdir('repo') - Path('config.yml').write_text( - 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff' + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') testapk = os.path.join('repo', 'souch.smsbypass_9.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/souch.smsbypass.yml').write_text('Categories: [System, Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): @@ -1916,12 +2117,12 @@ class UpdateTest(unittest.TestCase): Path('config/categories.yml').write_text('System: {name: S}\nTime: {name: T}\n') os.mkdir('metadata') os.mkdir('repo') - Path('config.yml').write_text( - 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff' + fdroidserver.common.write_config_file( + 'repo_pubkey: ffffffffffffffffffffffffffffffffffffffff\n' ) testapk = os.path.join('repo', 'com.politedroid_6.apk') - shutil.copy(os.path.join(self.basedir, testapk), testapk) + shutil.copy(basedir / testapk, testapk) Path('metadata/com.politedroid.yml').write_text('Categories: [Time]') with mock.patch('sys.argv', ['fdroid update', '--delete-unknown', '--nosign']): @@ -1943,12 +2144,8 @@ class TestParseIpa(unittest.TestCase): biplist # silence the linters except ImportError as e: self.skipTest(str(e)) - ipa_path = os.path.join( - os.path.dirname(os.path.abspath(__file__)), - 'com.fake.IpaApp_1000000000001.ipa', - ) + ipa_path = os.path.join(basedir, 'com.fake.IpaApp_1000000000001.ipa') result = fdroidserver.update.parse_ipa(ipa_path, 'fake_size', 'fake_sha') - self.maxDiff = None self.assertDictEqual( result, { @@ -2013,12 +2210,10 @@ class TestUpdateVersionStringToInt(unittest.TestCase): class TestScanRepoForIpas(unittest.TestCase): - def setUp(self): - self.maxDiff = None - def test_scan_repo_for_ipas_no_cache(self): self.maxDiff = None - with tempfile.TemporaryDirectory() as tmpdir, TmpCwd(tmpdir): + with mkdtemp() as tmpdir: + os.chdir(tmpdir) os.mkdir("repo") with open('repo/abc.Def_123.ipa', 'w') as f: f.write('abc') @@ -2026,7 +2221,6 @@ class TestScanRepoForIpas(unittest.TestCase): f.write('xyz') apkcache = mock.MagicMock() - # apkcache['a'] = 1 repodir = "repo" knownapks = mock.MagicMock() @@ -2054,12 +2248,10 @@ class TestScanRepoForIpas(unittest.TestCase): knownapks.recordapk.call_count = 2 self.assertTrue( - unittest.mock.call('abc.Def_123.ipa', 'abc') - in knownapks.recordapk.mock_calls + unittest.mock.call('abc.Def_123.ipa') in knownapks.recordapk.mock_calls ) self.assertTrue( - unittest.mock.call('xyz.XXX_123.ipa', 'xyz') - in knownapks.recordapk.mock_calls + unittest.mock.call('xyz.XXX_123.ipa') in knownapks.recordapk.mock_calls ) @@ -2137,7 +2329,7 @@ class TestDiscoverIosScreenshots(unittest.TestCase): def test_discover_ios_screenshots(self): self.maxDiff = None - with tempfile.TemporaryDirectory() as fastlane_dir: + with mkdtemp() as fastlane_dir: fastlane_dir = Path(fastlane_dir) (fastlane_dir / "screenshots/en-US").mkdir(parents=True) with open(fastlane_dir / "screenshots/en-US/iPhone 8+ @ iOS 16-1.png", 'w') as f: @@ -2174,6 +2366,14 @@ class TestDiscoverIosScreenshots(unittest.TestCase): class TestCopyIosScreenshotsToRepo(unittest.TestCase): + def setUp(self): + self._td = mkdtemp() + os.chdir(self._td.name) + + def tearDown(self): + os.chdir(basedir) + self._td.cleanup() + def test_copy_ios_screenshots_to_repo(self): self.maxDiff = None @@ -2226,7 +2426,7 @@ class TestGetIpaIcon(unittest.TestCase): def test_get_ipa_icon(self): self.maxDiff = None - with tempfile.TemporaryDirectory() as tmpdir: + with mkdtemp() as tmpdir: tmpdir = Path(tmpdir) (tmpdir / 'OnionBrowser.xcodeproj').mkdir() with open(tmpdir / 'OnionBrowser.xcodeproj/project.pbxproj', "w") as f: @@ -2253,7 +2453,7 @@ class TestParseFromPbxproj(unittest.TestCase): def test_parse_from_pbxproj(self): self.maxDiff = None - with tempfile.TemporaryDirectory() as tmpdir: + with mkdtemp() as tmpdir: with open(Path(tmpdir) / "asdf.pbxproj", 'w', encoding="utf-8") as f: f.write(""" 230jfaod=flc' @@ -2265,29 +2465,3 @@ class TestParseFromPbxproj(unittest.TestCase): "ASSETCATALOG_COMPILER_APPICON_NAME" ) self.assertEqual(v, "MyIcon") - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(UpdateTest)) - newSuite.addTest(unittest.makeSuite(TestUpdateVersionStringToInt)) - newSuite.addTest(unittest.makeSuite(TestScanRepoForIpas)) - newSuite.addTest(unittest.makeSuite(TestParseIosScreenShotName)) - newSuite.addTest(unittest.makeSuite(TestInsertLocalizedIosAppMetadata)) - newSuite.addTest(unittest.makeSuite(TestDiscoverIosScreenshots)) - newSuite.addTest(unittest.makeSuite(TestGetIpaIcon)) - unittest.main(failfast=False) diff --git a/tests/vcs.TestCase b/tests/test_vcs.py similarity index 66% rename from tests/vcs.TestCase rename to tests/test_vcs.py index 86f67ae1..a007feae 100755 --- a/tests/vcs.TestCase +++ b/tests/test_vcs.py @@ -1,45 +1,27 @@ #!/usr/bin/env python3 -# http://www.drdobbs.com/testing/unit-testing-with-python/240165163 - -import inspect -import logging import os -import sys import unittest from git import Repo -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -import fdroidserver.build import fdroidserver.common import fdroidserver.metadata -import fdroidserver.scanner -from testcommon import mkdtemp, parse_args_for_test + +from .shared_test_code import VerboseFalseOptions, mkdtemp class VCSTest(unittest.TestCase): """For some reason the VCS classes are in fdroidserver/common.py""" def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.basedir = os.path.join(localmodule, 'tests') - os.chdir(self.basedir) self._td = mkdtemp() - self.testdir = self._td.name + os.chdir(self._td.name) def tearDown(self): self._td.cleanup() - os.chdir(self.basedir) def test_remote_set_head_can_fail(self): - os.chdir(self.testdir) # First create an upstream repo with one commit upstream_repo = Repo.init("upstream_repo") with open(upstream_repo.working_dir + "/file", 'w') as f: @@ -72,6 +54,8 @@ class VCSTest(unittest.TestCase): build.androidupdate = ['no'] vcs, build_dir = fdroidserver.common.setup_vcs(app) # force an init of the repo, the remote head error only occurs on the second gotorevision call + + fdroidserver.common.options = VerboseFalseOptions vcs.gotorevision(build.commit) fdroidserver.common.prepare_source( vcs, @@ -82,23 +66,3 @@ class VCSTest(unittest.TestCase): extlib_dir="ignore", ) self.assertTrue(os.path.isfile("build/com.gpl.rpg.AndorsTrail/file")) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - parse_args_for_test(parser, sys.argv) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(VCSTest)) - unittest.main(failfast=False) diff --git a/tests/test_verify.py b/tests/test_verify.py new file mode 100755 index 00000000..e5a2f7c4 --- /dev/null +++ b/tests/test_verify.py @@ -0,0 +1,169 @@ +#!/usr/bin/env python3 + +import json +import os +import shutil +import sys +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from fdroidserver import verify + +TEST_APP_ENTRY = { + "1539780240.3885746": { + "local": { + "file": "unsigned/com.politedroid_6.apk", + "packageName": "com.politedroid", + "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", + "timestamp": 1234567.8900000, + "versionCode": "6", + "versionName": "1.5", + }, + "remote": { + "file": "tmp/com.politedroid_6.apk", + "packageName": "com.politedroid", + "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", + "timestamp": 1234567.8900000, + "versionCode": "6", + "versionName": "1.5", + }, + "url": "https://f-droid.org/repo/com.politedroid_6.apk", + "verified": True, + } +} + +basedir = Path(__file__).parent + + +class VerifyTest(unittest.TestCase): + def setUp(self): + self.tempdir = tempfile.TemporaryDirectory() + os.chdir(self.tempdir.name) + self.repodir = Path('repo') + self.repodir.mkdir() + self.apk_reports_json = basedir / 'org.fdroid.fdroid_1019051.apk.json' + + def tearDown(self): + self.tempdir.cleanup() + + def test_get_verified_json_creation(self): + self.assertEqual({'packages': {}}, verify.get_verified_json('does-not-exist')) + + def test_get_verified_json_existing(self): + f = 'verified.json' + reports = {'packages': {'placeholder': {}}} + with open(f, 'w') as fp: + json.dump(reports, fp) + self.assertEqual(reports, verify.get_verified_json(f)) + + def test_get_verified_json_pull_in_one_report(self): + shutil.copy(self.apk_reports_json, self.tempdir.name) + with open(self.apk_reports_json) as fp: + reports = json.load(fp) + self.assertEqual( + {'packages': {'org.fdroid.fdroid': [reports['1708238023.6572325']]}}, + verify.get_verified_json('does-not-exist'), + ) + + def test_get_verified_json_ignore_corrupt(self): + f = 'verified.json' + with open(f, 'w') as fp: + fp.write("""{"packages": {"placeholder": {""") + shutil.copy(self.apk_reports_json, self.tempdir.name) + with open(self.apk_reports_json) as fp: + reports = json.load(fp) + self.assertEqual( + {'packages': {'org.fdroid.fdroid': [reports['1708238023.6572325']]}}, + verify.get_verified_json(f), + ) + + def test_get_verified_json_ignore_apk_reports(self): + """When an intact verified.json exists, it should ignore the .apk.json reports.""" + f = 'verified.json' + placeholder = {'packages': {'placeholder': {}}} + with open(f, 'w') as fp: + json.dump(placeholder, fp) + shutil.copy(self.apk_reports_json, self.tempdir.name) + with open(self.apk_reports_json) as fp: + json.load(fp) + self.assertEqual(placeholder, verify.get_verified_json(f)) + + @unittest.skipIf(sys.byteorder == 'big', 'androguard is not ported to big-endian') + @patch('fdroidserver.common.sha256sum') + def test_write_json_report(self, sha256sum): + sha256sum.return_value = ( + '70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d' + ) + os.mkdir('tmp') + os.mkdir('unsigned') + verified_json = Path('unsigned/verified.json') + packageName = 'com.politedroid' + apk_name = packageName + '_6.apk' + remote_apk = 'tmp/' + apk_name + unsigned_apk = 'unsigned/' + apk_name + # TODO common.use apk_strip_v1_signatures() on unsigned_apk + shutil.copy(basedir / 'repo' / apk_name, remote_apk) + shutil.copy(basedir / 'repo' / apk_name, unsigned_apk) + url = TEST_APP_ENTRY['1539780240.3885746']['url'] + + self.assertFalse(verified_json.exists()) + verify.write_json_report(url, remote_apk, unsigned_apk, {}) + self.assertTrue(verified_json.exists()) + # smoke check status JSON + with verified_json.open() as fp: + firstpass = json.load(fp) + + verify.write_json_report(url, remote_apk, unsigned_apk, {}) + with verified_json.open() as fp: + secondpass = json.load(fp) + + self.assertEqual(firstpass, secondpass) + + @patch('fdroidserver.common.sha256sum') + @patch('fdroidserver.verify.write_verified_json', lambda s: s) + def test_write_json_report_appid_json(self, sha256sum): + sha256sum.return_value = ( + '70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d' + ) + os.mkdir('tmp') + os.mkdir('unsigned') + appid = 'com.politedroid' + apk_name = f'{appid}_6.apk' + remote_apk = 'tmp/' + apk_name + unsigned_apk = 'unsigned/' + apk_name + shutil.copy(basedir / 'repo' / apk_name, remote_apk) + shutil.copy(basedir / 'repo' / apk_name, unsigned_apk) + url = TEST_APP_ENTRY['1539780240.3885746']['url'] + with open(f'unsigned/{apk_name}.json', 'w') as fp: + json.dump(TEST_APP_ENTRY, fp) + + # make a fake existing report where the newer one broke verifiability + with open(f'unsigned/{appid}_16.apk.json', 'w') as fp: + json.dump( + { + "1444444444.4444444": { + 'local': {'versionCode': 16}, + 'verified': False, + }, + "1333333333.3333333": { + 'local': {'versionCode': 16}, + 'verified': True, + }, + }, + fp, + ) + + verify.write_json_report(url, remote_apk, unsigned_apk, {'fake': 'fail'}) + with open(f'unsigned/{appid}.json') as fp: + self.assertEqual( + { + 'apkReports': [ + 'unsigned/com.politedroid_6.apk.json', + 'unsigned/com.politedroid_16.apk.json', + ], + 'lastRunVerified': False, + }, + json.load(fp), + ) diff --git a/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/featureGraphic/play_store_feature_graphic.png b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/featureGraphic/play_store_feature_graphic.png new file mode 100644 index 00000000..0d5e3591 Binary files /dev/null and b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/featureGraphic/play_store_feature_graphic.png differ diff --git a/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/icon/icon.png b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/icon/icon.png new file mode 100644 index 00000000..17a31d54 Binary files /dev/null and b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/icon/icon.png differ diff --git a/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/phoneScreenshots/1.png b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/phoneScreenshots/1.png new file mode 100644 index 00000000..717be319 Binary files /dev/null and b/tests/triple-t-1-graphics/build/de.wivewa.dialer/app/src/main/play/en-US/listing/phoneScreenshots/1.png differ diff --git a/tests/triple-t-1-graphics/metadata/de.wivewa.dialer.yml b/tests/triple-t-1-graphics/metadata/de.wivewa.dialer.yml new file mode 100644 index 00000000..a86e2c53 --- /dev/null +++ b/tests/triple-t-1-graphics/metadata/de.wivewa.dialer.yml @@ -0,0 +1,25 @@ +Categories: + - Phone & SMS + - System +License: GPL-3.0-only +AuthorEmail: welefon@jolo.software +SourceCode: https://codeberg.org/wivewa/wivewa-dialer-android +IssueTracker: https://codeberg.org/wivewa/wivewa-dialer-android/issues + +AutoName: Welefon + +RepoType: git +Repo: https://codeberg.org/wivewa/wivewa-dialer-android.git + +Builds: + - versionName: 1.7.0 + versionCode: 13 + commit: 3550193fa6b6f7836876f2ca9bf5819a34eef404 + subdir: app + gradle: + - yes + +AutoUpdateMode: Version +UpdateCheckMode: Tags +CurrentVersion: 1.7.0 +CurrentVersionCode: 13 diff --git a/tests/verify.TestCase b/tests/verify.TestCase deleted file mode 100755 index eee8e9e8..00000000 --- a/tests/verify.TestCase +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python3 - -import inspect -import json -import logging -import os -import shutil -import sys -import tempfile -import unittest - -from pathlib import Path -from unittest.mock import patch - -localmodule = os.path.realpath( - os.path.join(os.path.dirname(inspect.getfile(inspect.currentframe())), '..') -) -print('localmodule: ' + localmodule) -if localmodule not in sys.path: - sys.path.insert(0, localmodule) - -from fdroidserver import common, verify - - -TEST_APP_ENTRY = { - "1539780240.3885746": { - "local": { - "file": "unsigned/com.politedroid_6.apk", - "packageName": "com.politedroid", - "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", - "timestamp": 1234567.8900000, - "versionCode": "6", - "versionName": "1.5", - }, - "remote": { - "file": "tmp/com.politedroid_6.apk", - "packageName": "com.politedroid", - "sha256": "70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d", - "timestamp": 1234567.8900000, - "versionCode": "6", - "versionName": "1.5", - }, - "url": "https://f-droid.org/repo/com.politedroid_6.apk", - "verified": True, - } -} - - -class VerifyTest(unittest.TestCase): - basedir = Path(__file__).resolve().parent - - def setUp(self): - logging.basicConfig(level=logging.DEBUG) - self.tempdir = tempfile.TemporaryDirectory() - os.chdir(self.tempdir.name) - self.repodir = Path('repo') - self.repodir.mkdir() - - def tearDown(self): - self.tempdir.cleanup() - - @patch('fdroidserver.common.sha256sum') - def test_write_json_report(self, sha256sum): - sha256sum.return_value = ( - '70c2f776a2bac38a58a7d521f96ee0414c6f0fb1de973c3ca8b10862a009247d' - ) - os.mkdir('tmp') - os.mkdir('unsigned') - verified_json = Path('unsigned/verified.json') - packageName = 'com.politedroid' - apk_name = packageName + '_6.apk' - remote_apk = 'tmp/' + apk_name - unsigned_apk = 'unsigned/' + apk_name - # TODO common.use apk_strip_v1_signatures() on unsigned_apk - shutil.copy(str(self.basedir / 'repo' / apk_name), remote_apk) - shutil.copy(str(self.basedir / 'repo' / apk_name), unsigned_apk) - url = TEST_APP_ENTRY['1539780240.3885746']['url'] - - self.assertFalse(verified_json.exists()) - verify.write_json_report(url, remote_apk, unsigned_apk, {}) - self.assertTrue(verified_json.exists()) - # smoke check status JSON - with verified_json.open() as fp: - firstpass = json.load(fp) - - verify.write_json_report(url, remote_apk, unsigned_apk, {}) - with verified_json.open() as fp: - secondpass = json.load(fp) - - self.assertEqual(firstpass, secondpass) - - -if __name__ == "__main__": - os.chdir(os.path.dirname(__file__)) - - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "-v", - "--verbose", - action="store_true", - default=False, - help="Spew out even more information than normal", - ) - common.options = common.parse_args(parser) - - newSuite = unittest.TestSuite() - newSuite.addTest(unittest.makeSuite(VerifyTest)) - unittest.main(failfast=False)