mirror of
https://gitlab.com/fdroid/fdroidserver.git
synced 2024-09-21 04:10:37 +02:00
Compare commits
235 Commits
da5ff1c928
...
8ec3a2a3db
Author | SHA1 | Date | |
---|---|---|---|
|
8ec3a2a3db | ||
|
8caee19dd6 | ||
|
cb18d10197 | ||
|
4c0e096a99 | ||
|
b48e297ec2 | ||
|
9244189ce5 | ||
|
b164241026 | ||
|
f27ecd1674 | ||
|
f321f62904 | ||
|
01990411c7 | ||
|
77c3f83fd7 | ||
|
5ff6cdd53b | ||
|
b74c848d6e | ||
|
bd2eaa5868 | ||
|
c190b7fb56 | ||
|
9c30b087c4 | ||
|
4941e699df | ||
|
04987a021b | ||
|
e8e8f8b9f0 | ||
|
d619fbff26 | ||
|
0e3bd6f63e | ||
|
d1c881e2c3 | ||
|
097f81a565 | ||
|
abf4c93a7b | ||
|
0e781913b8 | ||
|
7bfcb21ba6 | ||
|
1331d089ce | ||
|
cda322445f | ||
|
0eefa6fbe5 | ||
|
2f37cfb9a2 | ||
|
b4cfbd26e9 | ||
|
1d8f404ef1 | ||
|
dbd6e4237e | ||
|
2bc584d442 | ||
|
4689da8d08 | ||
|
4c32be112c | ||
|
d30e7a0169 | ||
|
fcba5a4227 | ||
|
fd7adaa61f | ||
|
bc2838829b | ||
|
489944a503 | ||
|
3e67622736 | ||
|
4acab21d81 | ||
|
ca5e9a089c | ||
|
99a3823621 | ||
|
76432199be | ||
|
df28c1e6c3 | ||
|
0ea0a3de78 | ||
|
f2fcfeabe5 | ||
|
a4247eea0d | ||
|
221739b653 | ||
|
c7574037a9 | ||
|
359661a332 | ||
|
cc75f2f9a4 | ||
|
e22f7e52a8 | ||
|
7840d0dc35 | ||
|
1f3f02765d | ||
|
91cf352b96 | ||
|
5e3b474a1c | ||
|
160c23a547 | ||
|
2b6542b231 | ||
|
742381a923 | ||
|
3b58c386a4 | ||
|
7071cc6f6d | ||
|
3ec997d58e | ||
|
bd62007b54 | ||
|
2c361f6cee | ||
|
1cf0185508 | ||
|
3dee7e915d | ||
|
f50e5a806d | ||
|
7aabfbcbf0 | ||
|
eadbf06d48 | ||
|
feafe2812d | ||
|
b3748aa3f1 | ||
|
98f935493e | ||
|
df97ebe052 | ||
|
18c9bc6e01 | ||
|
afb9b7570e | ||
|
25b1a77424 | ||
|
4c0fa1d0a9 | ||
|
c37a26bcd2 | ||
|
b45b31b927 | ||
|
2f148b4407 | ||
|
6bebd8b160 | ||
|
7e1b2e0788 | ||
|
34dd9a75e4 | ||
|
f6235831ae | ||
|
99841bf7c5 | ||
|
c7f1bdd14c | ||
|
25278801de | ||
|
8d9c048505 | ||
|
64c9154fff | ||
|
5745ed4753 | ||
|
18f3acc32e | ||
|
685efa23d4 | ||
|
1e5699e90c | ||
|
717df09be0 | ||
|
92a3f4b191 | ||
|
1eaba25021 | ||
|
8208841460 | ||
|
660f8756e5 | ||
|
dbdefe200c | ||
|
df27405d8b | ||
|
1c70758940 | ||
|
4109e8fb03 | ||
|
97346a2cba | ||
|
6c27fec94b | ||
|
5d8c6b8cd5 | ||
|
9f62445f38 | ||
|
80705579c2 | ||
|
ad9f0a9022 | ||
|
fc4a9c96a5 | ||
|
accdd65f91 | ||
|
9a327b5097 | ||
|
a8fd360a88 | ||
|
6f5fd2b132 | ||
|
312f822764 | ||
|
2fea71a6c7 | ||
|
93f361c623 | ||
|
4666330a4d | ||
|
7104411296 | ||
|
99bd544ab9 | ||
|
5df3d27126 | ||
|
1b65e33835 | ||
|
299e3e5f4c | ||
|
1cb1394de3 | ||
|
9a9b5beeaa | ||
|
14c8647909 | ||
|
d243cbd030 | ||
|
08c553e1cb | ||
|
f82d648cb1 | ||
|
79586fd9e3 | ||
|
6f07538cdc | ||
|
32ef77ecb6 | ||
|
be59b38ac1 | ||
|
ef4ec74882 | ||
|
1c84f63247 | ||
|
5b7abc0423 | ||
|
7a144a4762 | ||
|
cdc7c98707 | ||
|
a742df3758 | ||
|
e45e37b2df | ||
|
005a33732c | ||
|
bd6afa4365 | ||
|
07929ffe66 | ||
|
79f148167a | ||
|
cb04d801d8 | ||
|
eacfb8095b | ||
|
9716b5e1ab | ||
|
d00a87ed6c | ||
|
f2118b35a3 | ||
|
45efb88f85 | ||
|
86db8c93cc | ||
|
f742799a9d | ||
|
450765490b | ||
|
a21ed39117 | ||
|
301f0c8273 | ||
|
2658c22933 | ||
|
519c3c1fcf | ||
|
93e7cc9092 | ||
|
fb33ae58e2 | ||
|
e24640da85 | ||
|
1fa376a9dc | ||
|
6ab1fd9945 | ||
|
443973c6f1 | ||
|
954c136506 | ||
|
4e491830cc | ||
|
a90191949d | ||
|
e8a980ea9c | ||
|
0d12b5ffba | ||
|
b08ae68706 | ||
|
44f4317ff8 | ||
|
98d880fe1c | ||
|
6ba048d660 | ||
|
d6bbebddbb | ||
|
d62b8cc2ed | ||
|
c23af7984c | ||
|
18fe76ced9 | ||
|
4389168588 | ||
|
b53c498fcd | ||
|
d9f59536cf | ||
|
6a84fe1ae8 | ||
|
b6482f19a6 | ||
|
6152abee08 | ||
|
bbf17ee59c | ||
|
806a07b719 | ||
|
53185ea2e7 | ||
|
293caf5ff9 | ||
|
c166a8a2b7 | ||
|
c1500e4ca1 | ||
|
d20e0adab4 | ||
|
faf1090214 | ||
|
be673c56cf | ||
|
0ced053eaf | ||
|
9c65bed4a5 | ||
|
0cf1749ec3 | ||
|
e269e41b12 | ||
|
4c03082d14 | ||
|
1f28fce1ea | ||
|
6ab4b99a5f | ||
|
082df1d9b6 | ||
|
f7ca36a66b | ||
|
6781525ddd | ||
|
f003492574 | ||
|
ac4694fcd3 | ||
|
b20a14af09 | ||
|
f2bdf5214a | ||
|
1bd35fc37f | ||
|
0a3f785254 | ||
|
a0a766cc8e | ||
|
cf74ca5f56 | ||
|
2fc9564ebe | ||
|
5dc327e867 | ||
|
5733545972 | ||
|
27206162d4 | ||
|
d31856b6c7 | ||
|
f30dcf5069 | ||
|
9105738427 | ||
|
6d71690946 | ||
|
980ff3c20a | ||
|
edb2d76e25 | ||
|
b222275d77 | ||
|
a002e46997 | ||
|
07a0bd7314 | ||
|
3560a2522a | ||
|
7b45ea7898 | ||
|
2f556a9026 | ||
|
cff3364fdf | ||
|
9749282b44 | ||
|
7904f12d05 | ||
|
074dda4b61 | ||
|
261be20109 | ||
|
617a9e75c7 | ||
|
9dc14674f1 | ||
|
76d9eddb3a |
@ -76,7 +76,13 @@ metadata_v0:
|
||||
'Dpkg::Use-Pty "0";'
|
||||
'quiet "1";'
|
||||
>> /etc/apt/apt.conf.d/99gitlab
|
||||
# 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:, ; }
|
||||
- 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
|
||||
|
||||
|
||||
@ -121,7 +127,7 @@ ubuntu_lts_ppa:
|
||||
- export ANDROID_HOME=/usr/lib/android-sdk
|
||||
- apt-get install gnupg
|
||||
- while ! apt-key adv --keyserver keyserver.ubuntu.com --recv-key 9AAC253193B65D4DF1D0A13EEC4632C79C5E0151; do sleep 15; done
|
||||
- export RELEASE=`sed -n 's,^deb [^ ][^ ]* \([a-z]*\).*,\1,p' /etc/apt/sources.list | head -1`
|
||||
- export RELEASE=$(sed -n 's,^Suites\x3a \([a-z]*\).*,\1,p' /etc/apt/sources.list.d/*.sources | head -1)
|
||||
- echo "deb http://ppa.launchpad.net/fdroid/fdroidserver/ubuntu $RELEASE main" >> /etc/apt/sources.list
|
||||
- apt-get update
|
||||
- apt-get dist-upgrade
|
||||
@ -193,7 +199,7 @@ arch_pip_install:
|
||||
# The gradlew-fdroid tests are isolated from the rest of the test
|
||||
# suite, so they run as their own job.
|
||||
gradlew-fdroid:
|
||||
image: debian:bullseye-slim
|
||||
image: debian:bookworm-slim
|
||||
<<: *apt-template
|
||||
only:
|
||||
changes:
|
||||
@ -279,9 +285,7 @@ black:
|
||||
- black --check --diff --color $CI_PROJECT_DIR
|
||||
|
||||
fedora_latest:
|
||||
image: fedora:latest
|
||||
only:
|
||||
- master@fdroid/fdroidserver
|
||||
image: fedora:39 # support ends on 2024-11-12
|
||||
script:
|
||||
# tricks to hopefully make runs more reliable
|
||||
- echo "timeout=600" >> /etc/dnf/dnf.conf
|
||||
@ -358,14 +362,14 @@ macOS:
|
||||
- /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 pycountry
|
||||
- $(brew --prefix fdroidserver)/libexec/bin/python3 -m pip install biplist oscrypto pycountry
|
||||
|
||||
# test fdroidserver from git with current package's dependencies
|
||||
- fdroid="$(brew --prefix fdroidserver)/libexec/bin/python3 $PWD/fdroid" ./tests/run-tests
|
||||
|
||||
|
||||
gradle:
|
||||
image: debian:bullseye
|
||||
image: debian:bookworm-slim
|
||||
<<: *apt-template
|
||||
variables:
|
||||
GIT_DEPTH: 1000
|
||||
@ -463,7 +467,7 @@ fdroid build:
|
||||
# fdroiddata because that one is known to work, and this is a CI job,
|
||||
# so it should be isolated from the normal churn of fdroiddata.
|
||||
plugin_fetchsrclibs:
|
||||
image: debian:bullseye
|
||||
image: debian:bookworm-slim
|
||||
<<: *apt-template
|
||||
only:
|
||||
changes:
|
||||
@ -507,7 +511,7 @@ plugin_fetchsrclibs:
|
||||
|
||||
# test a full update and deploy cycle to gitlab.com
|
||||
servergitmirrors:
|
||||
image: debian:bullseye-backports
|
||||
image: debian:bookworm-slim
|
||||
<<: *apt-template
|
||||
only:
|
||||
- master@fdroid/fdroidserver
|
||||
@ -528,7 +532,7 @@ servergitmirrors:
|
||||
python3-venv
|
||||
rsync
|
||||
wget
|
||||
- apt-get install -t bullseye-backports apksigner
|
||||
- apt-get install apksigner
|
||||
- python3 -m venv --system-site-packages env
|
||||
- . env/bin/activate
|
||||
- export PYTHONPATH=`pwd`
|
||||
@ -551,7 +555,7 @@ servergitmirrors:
|
||||
- diff repo/index-v1.jar index-v1.jar
|
||||
|
||||
Build documentation:
|
||||
image: debian:bookworm
|
||||
image: debian:bookworm-slim
|
||||
<<: *apt-template
|
||||
script:
|
||||
- apt-get install make python3-sphinx python3-numpydoc python3-pydata-sphinx-theme pydocstyle fdroidserver
|
||||
@ -641,7 +645,7 @@ docker:
|
||||
- buildserver/*
|
||||
variables:
|
||||
- $CI_COMMIT_BRANCH == "master" || $CI_PROJECT_NAMESPACE != "fdroid"
|
||||
image: docker:git
|
||||
image: docker:dind
|
||||
services:
|
||||
- docker:dind
|
||||
variables:
|
||||
@ -652,7 +656,7 @@ docker:
|
||||
- cd buildserver
|
||||
- docker build -t $TEST_IMAGE --build-arg GIT_REV_PARSE_HEAD=$(git rev-parse HEAD) .
|
||||
- docker tag $TEST_IMAGE $RELEASE_IMAGE
|
||||
- docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bullseye
|
||||
- docker tag $TEST_IMAGE ${RELEASE_IMAGE}-bookworm
|
||||
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin registry.gitlab.com
|
||||
# This avoids filling up gitlab.com free tier accounts with unused docker images.
|
||||
- if test -z "$FDROID_PUSH_DOCKER_IMAGE"; then
|
||||
@ -662,4 +666,4 @@ docker:
|
||||
exit 0;
|
||||
fi
|
||||
- docker push $RELEASE_IMAGE
|
||||
- docker push $RELEASE_IMAGE-bullseye
|
||||
- docker push $RELEASE_IMAGE-bookworm
|
||||
|
@ -20,3 +20,6 @@ security:
|
||||
63687:
|
||||
reason: Only affects Windows https://security-tracker.debian.org/tracker/CVE-2024-22190
|
||||
expires: '2026-01-31'
|
||||
67599:
|
||||
reason: Only affects pip when using --extra-index-url, which is never the case in fdroidserver CI.
|
||||
expires: '2026-05-31'
|
||||
|
@ -15,6 +15,13 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
* 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.
|
||||
|
||||
## [2.2.2] - 2024-04-24
|
||||
|
||||
### Added
|
||||
|
||||
* Include sdkmanager as dep in setup.py for Homebrew package.
|
||||
https://github.com/Homebrew/homebrew-core/pull/164510
|
||||
|
||||
## [2.2.1] - 2023-03-09
|
||||
|
||||
### Added
|
||||
|
@ -591,6 +591,11 @@ 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
|
||||
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
|
||||
@ -723,6 +728,8 @@ 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
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
FROM debian:bullseye
|
||||
FROM debian:bookworm
|
||||
|
||||
ENV LANG=C.UTF-8 \
|
||||
DEBIAN_FRONTEND=noninteractive
|
||||
@ -41,7 +41,7 @@ RUN printf "path-exclude=/usr/share/locale/*\npath-exclude=/usr/share/man/*\npat
|
||||
&& mkdir -p /usr/share/man/man1 \
|
||||
&& apt-get update \
|
||||
&& apt-get install ca-certificates \
|
||||
&& sed -i 's,http:,https:,' /etc/apt/sources.list \
|
||||
&& sed -i 's,http:,https:,' /etc/apt/sources.list.d/debian.sources \
|
||||
&& apt-get upgrade \
|
||||
&& apt-get dist-upgrade \
|
||||
&& apt-get install openssh-client iproute2 python3 openssh-server sudo \
|
||||
|
10
buildserver/Vagrantfile
vendored
10
buildserver/Vagrantfile
vendored
@ -35,7 +35,7 @@ Vagrant.configure("2") do |config|
|
||||
config.cache.enable :chef
|
||||
end
|
||||
|
||||
config.vm.box = "fdroid/bullseye64"
|
||||
config.vm.box = "debian/bookworm64"
|
||||
|
||||
if not configfile.has_key? "vm_provider" or configfile["vm_provider"] == "virtualbox"
|
||||
# default to VirtualBox if not set
|
||||
@ -53,6 +53,8 @@ Vagrant.configure("2") do |config|
|
||||
libvirt.uri = "qemu:///system"
|
||||
libvirt.cpus = configfile["cpus"]
|
||||
libvirt.memory = configfile["memory"]
|
||||
# Debian Vagrant image is only 20G, so allocate more
|
||||
libvirt.machine_virtual_size = 1024
|
||||
if configfile.has_key? "libvirt_disk_bus"
|
||||
libvirt.disk_bus = configfile["libvirt_disk_bus"]
|
||||
end
|
||||
@ -86,6 +88,12 @@ Vagrant.configure("2") do |config|
|
||||
# necessary with 9p synced folders
|
||||
Dir.mkdir('cache') unless File.exists?('cache')
|
||||
|
||||
# Root partition needs to be resized to the new allocated space
|
||||
config.vm.provision "shell", inline: <<-SHELL
|
||||
growpart -v -u auto /dev/vda 1
|
||||
resize2fs /dev/vda1
|
||||
SHELL
|
||||
|
||||
config.vm.provision "shell", name: "setup-env-vars", path: "setup-env-vars",
|
||||
args: ["/opt/android-sdk"]
|
||||
config.vm.provision "shell", name: "apt-get-install", path: "provision-apt-get-install",
|
||||
|
@ -39,28 +39,29 @@ if echo $debian_mirror | grep '^https' 2>&1 > /dev/null; then
|
||||
fi
|
||||
|
||||
cat << EOF > /etc/apt/sources.list
|
||||
deb ${debian_mirror} bullseye main
|
||||
deb https://security.debian.org/debian-security bullseye-security main
|
||||
deb ${debian_mirror} bullseye-updates main
|
||||
deb ${debian_mirror} bookworm main
|
||||
deb https://security.debian.org/debian-security bookworm-security main
|
||||
deb ${debian_mirror} bookworm-updates main
|
||||
EOF
|
||||
echo "deb ${debian_mirror} bullseye-backports main" > /etc/apt/sources.list.d/backports.list
|
||||
echo "deb ${debian_mirror} bookworm-backports main" > /etc/apt/sources.list.d/backports.list
|
||||
|
||||
apt-get update || apt-get update
|
||||
|
||||
# purge things that might come from the base box, but we don't want
|
||||
# https://salsa.debian.org/cloud-team/debian-vagrant-images/-/tree/master/config_space/package_config
|
||||
# cat config_space/package_config/* | sort -u | grep -v '[A-Z#]'
|
||||
|
||||
purge="
|
||||
apt-listchanges
|
||||
apt-utils
|
||||
bash-completion
|
||||
bind9-*
|
||||
bsdextrautils
|
||||
build-essential
|
||||
bzip2
|
||||
chrony
|
||||
cloud-utils
|
||||
cron
|
||||
cron-daemon-common
|
||||
dbus
|
||||
debconf-i18n
|
||||
debian-faq
|
||||
@ -69,6 +70,7 @@ purge="
|
||||
fdisk
|
||||
file
|
||||
groff-base
|
||||
inetutils-telnet
|
||||
krb5-locales
|
||||
less
|
||||
locales
|
||||
@ -82,14 +84,13 @@ purge="
|
||||
reportbug
|
||||
rsyslog
|
||||
tasksel
|
||||
telnet
|
||||
traceroute
|
||||
unattended-upgrades
|
||||
usrmerge
|
||||
vim-*
|
||||
wamerican
|
||||
wget
|
||||
whiptail
|
||||
xxd
|
||||
xz-utils
|
||||
"
|
||||
# clean up files packages to be purged, then purge the packages
|
||||
@ -106,6 +107,7 @@ packages="
|
||||
apksigner
|
||||
default-jdk-headless
|
||||
default-jre-headless
|
||||
curl
|
||||
dexdump
|
||||
fdroidserver
|
||||
git-svn
|
||||
@ -114,8 +116,9 @@ packages="
|
||||
patch
|
||||
python3-packaging
|
||||
rsync
|
||||
sdkmanager
|
||||
sdkmanager/bookworm-backports
|
||||
sudo
|
||||
unzip
|
||||
"
|
||||
|
||||
apt-get install $packages --download-only
|
||||
|
@ -267,10 +267,20 @@
|
||||
# sync_from_local_copy_dir: true
|
||||
|
||||
|
||||
# To upload the repo to an Amazon S3 bucket using `fdroid server
|
||||
# update`. Warning, this deletes and recreates the whole fdroid/
|
||||
# directory each time. This prefers s3cmd, but can also use
|
||||
# apache-libcloud. To customize how s3cmd interacts with the cloud
|
||||
# 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)
|
||||
#
|
||||
# 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
|
||||
@ -279,6 +289,47 @@
|
||||
# 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
|
||||
#
|
||||
# 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.
|
||||
|
@ -23,12 +23,11 @@ def main():
|
||||
help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"),
|
||||
)
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
common.options = options
|
||||
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)
|
||||
common.read_config(options)
|
||||
common.read_config()
|
||||
|
||||
for appid, app in apps.items():
|
||||
if "Builds" in app and len(app["Builds"]) > 0:
|
||||
|
@ -25,8 +25,8 @@ def main():
|
||||
global config
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
config = common.read_config(options)
|
||||
common.parse_args(parser)
|
||||
config = common.read_config()
|
||||
destkeystore = config['keystore'].replace('.jks', '.p12').replace('/', '_')
|
||||
exportkeystore = config['keystore'].replace('.jks', '.pem').replace('/', '_')
|
||||
if os.path.exists(destkeystore) or os.path.exists(exportkeystore):
|
||||
|
@ -14,8 +14,8 @@ fdroid_summary = 'export the keystore in standard PEM format'
|
||||
def main():
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
config = common.read_config(options)
|
||||
common.parse_args(parser)
|
||||
config = common.read_config()
|
||||
env_vars = {'LC_ALL': 'C.UTF-8',
|
||||
'FDROID_KEY_STORE_PASS': config['keystorepass'],
|
||||
'FDROID_KEY_PASS': config['keypass']}
|
||||
|
@ -12,8 +12,8 @@ fdroid_summary = 'export the keystore in standard PEM format'
|
||||
def main():
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
common.config = common.read_config(options)
|
||||
common.parse_args(parser)
|
||||
common.read_config()
|
||||
pubkey, repo_pubkey_fingerprint = index.extract_pubkey()
|
||||
print('repo_pubkey = "%s"' % pubkey.decode())
|
||||
|
||||
|
@ -18,12 +18,11 @@ def main():
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument("appid", nargs='*', help=_("applicationId with optional versionCode in the form APPID[:VERCODE]"))
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
common.options = options
|
||||
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)
|
||||
common.read_config(options)
|
||||
common.read_config()
|
||||
srclib_dir = os.path.join('build', 'srclib')
|
||||
os.makedirs(srclib_dir, exist_ok=True)
|
||||
srclibpaths = []
|
||||
|
@ -11,8 +11,8 @@ fdroid_summary = 'import the local keystore into a SmartCard HSM'
|
||||
def main():
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
config = common.read_config(options)
|
||||
common.parse_args(parser)
|
||||
config = common.read_config()
|
||||
env_vars = {
|
||||
'LC_ALL': 'C.UTF-8',
|
||||
'FDROID_KEY_STORE_PASS': config['keystorepass'],
|
||||
|
@ -182,7 +182,7 @@ def main():
|
||||
"can not be specified at the same time."))
|
||||
sys.exit(1)
|
||||
|
||||
# Trick optparse into displaying the right usage when --help is used.
|
||||
# Trick argparse into displaying the right usage when --help is used.
|
||||
sys.argv[0] += ' ' + command
|
||||
|
||||
del sys.argv[1]
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Update the binary transparency log for a URL."""
|
||||
#
|
||||
# btlog.py - part of the FDroid server tools
|
||||
# Copyright (C) 2017, Hans-Christoph Steiner <hans@eds.org>
|
||||
@ -26,7 +27,6 @@
|
||||
# client app so its not easy for the server to distinguish this from
|
||||
# the F-Droid client.
|
||||
|
||||
|
||||
import collections
|
||||
import defusedxml.minidom
|
||||
import git
|
||||
@ -39,6 +39,7 @@ import shutil
|
||||
import tempfile
|
||||
import zipfile
|
||||
from argparse import ArgumentParser
|
||||
from typing import Optional
|
||||
|
||||
from . import _
|
||||
from . import common
|
||||
@ -46,18 +47,31 @@ from . import deploy
|
||||
from .exception import FDroidException
|
||||
|
||||
|
||||
options = None
|
||||
|
||||
|
||||
def make_binary_transparency_log(
|
||||
repodirs, btrepo='binary_transparency', url=None, commit_title='fdroid update'
|
||||
repodirs: collections.abc.Iterable,
|
||||
btrepo: str = 'binary_transparency',
|
||||
url: Optional[str] = None,
|
||||
commit_title: str = 'fdroid update',
|
||||
):
|
||||
"""Log the indexes in a standalone git repo to serve as a "binary transparency" log.
|
||||
|
||||
References
|
||||
Parameters
|
||||
----------
|
||||
https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies
|
||||
repodirs
|
||||
The directories of the F-Droid repository to generate the binary
|
||||
transparency log for.
|
||||
btrepo
|
||||
The path to the Git repository of the binary transparency log.
|
||||
url
|
||||
The URL of the F-Droid repository to generate the binary transparency
|
||||
log for.
|
||||
commit_title
|
||||
The commit title for commits in the binary transparency log Git
|
||||
repository.
|
||||
|
||||
Notes
|
||||
-----
|
||||
Also see https://www.eff.org/deeplinks/2014/02/open-letter-to-tech-companies .
|
||||
"""
|
||||
logging.info('Committing indexes to ' + btrepo)
|
||||
if os.path.exists(os.path.join(btrepo, '.git')):
|
||||
@ -149,8 +163,17 @@ For more info on this idea:
|
||||
|
||||
|
||||
def main():
|
||||
global options
|
||||
"""Generate or update a binary transparency log for a F-Droid repository.
|
||||
|
||||
The behaviour of this function is influenced by the configuration file as
|
||||
well as command line parameters.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If the specified or default Git repository does not exist.
|
||||
|
||||
"""
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument(
|
||||
@ -169,7 +192,7 @@ def main():
|
||||
default=None,
|
||||
help=_("Push the log to this git remote repository"),
|
||||
)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
|
||||
if options.verbose:
|
||||
logging.getLogger("requests").setLevel(logging.INFO)
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Build a package from source."""
|
||||
#
|
||||
# build.py - part of the FDroid server tools
|
||||
# Copyright (C) 2010-2014, Ciaran Gultnieks, ciaran@ciarang.com
|
||||
@ -59,15 +60,30 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||
Parameters
|
||||
----------
|
||||
app
|
||||
app metadata dict
|
||||
The metadata of the app to build.
|
||||
build
|
||||
The build of the app to build.
|
||||
vcs
|
||||
version control system controller object
|
||||
The version control system controller object of the app.
|
||||
build_dir
|
||||
local source-code checkout of app
|
||||
The local source-code checkout directory of the app.
|
||||
output_dir
|
||||
target folder for the build result
|
||||
The target folder for the build result.
|
||||
log_dir
|
||||
The directory in the VM where the build logs are getting stored.
|
||||
force
|
||||
Don't refresh the already cloned repository and make the build stop on
|
||||
exceptions.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.BuildException`
|
||||
If Paramiko is not installed, a srclib directory or srclib metadata
|
||||
file is unexpectedly missing, the build process in the VM failed or
|
||||
output files of the build process are missing.
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If the Buildserver ID could not be obtained or copying a directory to
|
||||
the server failed.
|
||||
"""
|
||||
global buildserverid, ssh_channel
|
||||
|
||||
@ -115,8 +131,8 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||
# Put all the necessary files in place...
|
||||
ftp.chdir(homedir)
|
||||
|
||||
# Helper to copy the contents of a directory to the server...
|
||||
def send_dir(path):
|
||||
"""Copy the contents of a directory to the server."""
|
||||
logging.debug("rsyncing %s to %s" % (path, ftp.getcwd()))
|
||||
# TODO this should move to `vagrant rsync` from >= v1.5
|
||||
try:
|
||||
@ -316,6 +332,15 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
|
||||
|
||||
|
||||
def force_gradle_build_tools(build_dir, build_tools):
|
||||
"""Manipulate build tools version used in top level gradle file.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
build_dir
|
||||
The directory to start looking for gradle files.
|
||||
build_tools
|
||||
The build tools version that should be forced to use.
|
||||
"""
|
||||
for root, dirs, files in os.walk(build_dir):
|
||||
for filename in files:
|
||||
if not filename.endswith('.gradle'):
|
||||
@ -342,6 +367,31 @@ def get_metadata_from_apk(app, build, apkfile):
|
||||
"""Get the required metadata from the built APK.
|
||||
|
||||
VersionName is allowed to be a blank string, i.e. ''
|
||||
|
||||
Parameters
|
||||
----------
|
||||
app
|
||||
The app metadata used to build the APK.
|
||||
build
|
||||
The build that resulted in the APK.
|
||||
apkfile
|
||||
The path of the APK file.
|
||||
|
||||
Returns
|
||||
-------
|
||||
versionCode
|
||||
The versionCode from the APK or from the metadata is build.novcheck is
|
||||
set.
|
||||
versionName
|
||||
The versionName from the APK or from the metadata is build.novcheck is
|
||||
set.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.BuildException`
|
||||
If native code should have been built but was not packaged, no version
|
||||
information or no package ID could be found or there is a mismatch
|
||||
between the package ID in the metadata and the one found in the APK.
|
||||
"""
|
||||
appid, versionCode, versionName = common.get_apk_id(apkfile)
|
||||
native_code = common.get_native_code(apkfile)
|
||||
@ -362,7 +412,56 @@ def get_metadata_from_apk(app, build, apkfile):
|
||||
|
||||
|
||||
def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, extlib_dir, tmp_dir, force, onserver, refresh):
|
||||
"""Do a build locally."""
|
||||
"""Do a build locally.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
app
|
||||
The metadata of the app to build.
|
||||
build
|
||||
The build of the app to build.
|
||||
vcs
|
||||
The version control system controller object of the app.
|
||||
build_dir
|
||||
The local source-code checkout directory of the app.
|
||||
output_dir
|
||||
The target folder for the build result.
|
||||
log_dir
|
||||
The directory in the VM where the build logs are getting stored.
|
||||
srclib_dir
|
||||
The path to the srclibs directory, usually 'build/srclib'.
|
||||
extlib_dir
|
||||
The path to the extlibs directory, usually 'build/extlib'.
|
||||
tmp_dir
|
||||
The temporary directory for building the source tarball.
|
||||
force
|
||||
Don't refresh the already cloned repository and make the build stop on
|
||||
exceptions.
|
||||
onserver
|
||||
Assume the build is happening inside the VM.
|
||||
refresh
|
||||
Enable fetching the latest refs from the VCS remote.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.BuildException`
|
||||
If running a `sudo` command failed, locking the root account failed,
|
||||
`sudo` couldn't be removed, cleaning the build environment failed,
|
||||
skipping the scanning has been requested but `scandelete` is present,
|
||||
errors occurred during scanning, running the `build` commands from the
|
||||
metadata failed, building native code failed, building with the
|
||||
specified build method failed, no output could be found with build
|
||||
method `maven`, more or less than one APK were found with build method
|
||||
`gradle`, less or more than one APKs match the `output` glob specified
|
||||
in the metadata, running a `postbuild` command specified in the
|
||||
metadata failed, the built APK is debuggable, the unsigned APK is not
|
||||
at the expected location, the APK does not contain the expected
|
||||
`versionName` and `versionCode` or undesired package names have been
|
||||
found in the APK.
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If no Android NDK version could be found and the build isn't run in a
|
||||
builder VM, the selected Android NDK is not a directory.
|
||||
"""
|
||||
ndk_path = build.ndk_path()
|
||||
if build.ndk or (build.buildjni and build.buildjni != ['no']):
|
||||
if not ndk_path:
|
||||
@ -720,8 +819,10 @@ def build_local(app, build, vcs, build_dir, output_dir, log_dir, srclib_dir, ext
|
||||
f"{app.id}:{build.versionName}", p.output)
|
||||
|
||||
# Make sure it's not debuggable...
|
||||
if common.is_apk_and_debuggable(src):
|
||||
raise BuildException("APK is debuggable")
|
||||
if common.is_debuggable_or_testOnly(src):
|
||||
raise BuildException(
|
||||
"%s: debuggable or testOnly set in AndroidManifest.xml" % src
|
||||
)
|
||||
|
||||
# By way of a sanity check, make sure the version and version
|
||||
# code in our new APK match what we expect...
|
||||
@ -764,23 +865,47 @@ def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir,
|
||||
|
||||
Parameters
|
||||
----------
|
||||
app
|
||||
The metadata of the app to build.
|
||||
build
|
||||
The build of the app to build.
|
||||
build_dir
|
||||
The local source-code checkout directory of the app.
|
||||
output_dir
|
||||
The directory where the build output will go.
|
||||
Usually this is the 'unsigned' directory.
|
||||
The directory where the build output will go. Usually this is the
|
||||
'unsigned' directory.
|
||||
log_dir
|
||||
The directory in the VM where the build logs are getting stored.
|
||||
also_check_dir
|
||||
An additional location for checking if the build is necessary (usually
|
||||
the archive repo).
|
||||
srclib_dir
|
||||
The path to the srclibs directory, usually 'build/srclib'.
|
||||
extlib_dir
|
||||
The path to the extlibs directory, usually 'build/extlib'.
|
||||
tmp_dir
|
||||
The temporary directory for building the source tarball of the app to
|
||||
build.
|
||||
repo_dir
|
||||
The repo directory - used for checking if the build is necessary.
|
||||
also_check_dir
|
||||
An additional location for checking if the build
|
||||
is necessary (usually the archive repo)
|
||||
vcs
|
||||
The version control system controller object of the app to build.
|
||||
test
|
||||
True if building in test mode, in which case the build will
|
||||
always happen, even if the output already exists. In test mode, the
|
||||
output directory should be a temporary location, not any of the real
|
||||
ones.
|
||||
True if building in test mode, in which case the build will always
|
||||
happen, even if the output already exists. In test mode, the output
|
||||
directory should be a temporary location, not any of the real ones.
|
||||
server
|
||||
Use buildserver VM for building.
|
||||
force
|
||||
Build app regardless of disabled state or scanner errors.
|
||||
onserver
|
||||
Assume the build is happening inside the VM.
|
||||
refresh
|
||||
Enable fetching the latest refs from the VCS remote.
|
||||
|
||||
Returns
|
||||
-------
|
||||
Boolean
|
||||
status
|
||||
True if the build was done, False if it wasn't necessary.
|
||||
"""
|
||||
dest_file = common.get_release_filename(app, build)
|
||||
@ -819,7 +944,13 @@ def trybuild(app, build, build_dir, output_dir, log_dir, also_check_dir,
|
||||
|
||||
|
||||
def force_halt_build(timeout):
|
||||
"""Halt the currently running Vagrant VM, to be called from a Timer."""
|
||||
"""Halt the currently running Vagrant VM, to be called from a Timer.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
timeout
|
||||
The timeout in seconds.
|
||||
"""
|
||||
logging.error(_('Force halting build after {0} sec timeout!').format(timeout))
|
||||
timeout_event.set()
|
||||
if ssh_channel:
|
||||
@ -843,7 +974,9 @@ def parse_commandline():
|
||||
Returns
|
||||
-------
|
||||
options
|
||||
The resulting options parsed from the command line arguments.
|
||||
parser
|
||||
The argument parser.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
|
||||
common.setup_global_opts(parser)
|
||||
@ -881,7 +1014,7 @@ def parse_commandline():
|
||||
parser.add_argument("-w", "--wiki", default=False, action="store_true",
|
||||
help=argparse.SUPPRESS)
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
# Force --stop with --on-server to get correct exit code
|
||||
@ -903,6 +1036,22 @@ timeout_event = threading.Event()
|
||||
|
||||
|
||||
def main():
|
||||
"""Build a package from source.
|
||||
|
||||
The behaviour of this function is influenced by the configuration file as
|
||||
well as command line parameters.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If more than one local metadata file has been found, no app metadata
|
||||
has been found, there are no apps to process, downloading binaries for
|
||||
checking the reproducibility of a built binary failed, the built binary
|
||||
is different from supplied reference binary, the reference binary is
|
||||
signed with a different signing key than expected, a VCS error occured
|
||||
while building an app or a different error occured while building an
|
||||
app.
|
||||
"""
|
||||
global options, config, buildserverid, fdroidserverid
|
||||
|
||||
options, parser = parse_commandline()
|
||||
@ -927,7 +1076,7 @@ def main():
|
||||
if not options.appid and not options.all:
|
||||
parser.error("option %s: If you really want to build all the apps, use --all" % "all")
|
||||
|
||||
config = common.read_config(opts=options)
|
||||
config = common.read_config()
|
||||
|
||||
if config['build_server_always']:
|
||||
options.server = True
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Check for updates to applications."""
|
||||
#
|
||||
# checkupdates.py - part of the FDroid server tools
|
||||
# Copyright (C) 2010-2015, Ciaran Gultnieks, ciaran@ciarang.com
|
||||
@ -505,7 +506,7 @@ def operate_vercode(operation: str, vercode: int) -> int:
|
||||
return vercode
|
||||
|
||||
|
||||
def checkupdates_app(app: metadata.App) -> None:
|
||||
def checkupdates_app(app: metadata.App, auto: bool, commit: bool = False) -> None:
|
||||
"""Check for new versions and updated name of a single app.
|
||||
|
||||
Also write back changes to the metadata file and create a Git commit if
|
||||
@ -581,7 +582,7 @@ def checkupdates_app(app: metadata.App) -> None:
|
||||
logging.info('...updating to version %s' % ver)
|
||||
commitmsg = 'Update CurrentVersion of %s to %s' % (name, ver)
|
||||
|
||||
if options.auto:
|
||||
if auto:
|
||||
mode = app.AutoUpdateMode
|
||||
if not app.CurrentVersionCode:
|
||||
raise MetaDataException(
|
||||
@ -617,19 +618,24 @@ def checkupdates_app(app: metadata.App) -> None:
|
||||
if not gotcur:
|
||||
newbuilds = copy.deepcopy(builds[-len(vercodes):])
|
||||
|
||||
bullseye_blocklist = [
|
||||
# These are either built-in or invalid in newer system versions
|
||||
bookworm_blocklist = [
|
||||
'apt-get install -y openjdk-11-jdk',
|
||||
'apt-get install openjdk-11-jdk-headless',
|
||||
'apt-get install -y openjdk-11-jdk-headless',
|
||||
'apt-get install -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless',
|
||||
'apt-get install -y -t stretch-backports openjdk-11-jdk-headless openjdk-11-jre-headless',
|
||||
'apt-get install -y openjdk-17-jdk',
|
||||
'apt-get install openjdk-17-jdk-headless',
|
||||
'apt-get install -y openjdk-17-jdk-headless',
|
||||
'update-alternatives --auto java',
|
||||
'update-java-alternatives -a',
|
||||
]
|
||||
|
||||
for build in newbuilds:
|
||||
if "sudo" in build:
|
||||
if any("openjdk-11" in line for line in build["sudo"]):
|
||||
build["sudo"] = [line for line in build["sudo"] if line not in bullseye_blocklist]
|
||||
if any("openjdk-11" in line for line in build["sudo"]) or any("openjdk-17" in line for line in build["sudo"]):
|
||||
build["sudo"] = [line for line in build["sudo"] if line not in bookworm_blocklist]
|
||||
if build["sudo"] == ['apt-get update']:
|
||||
build["sudo"] = ''
|
||||
|
||||
@ -659,7 +665,7 @@ def checkupdates_app(app: metadata.App) -> None:
|
||||
|
||||
if commitmsg:
|
||||
metadata.write_metadata(app.metadatapath, app)
|
||||
if options.commit:
|
||||
if commit:
|
||||
logging.info("Commiting update for " + app.metadatapath)
|
||||
gitcmd = ["git", "commit", "-m", commitmsg]
|
||||
if 'auto_author' in config:
|
||||
@ -689,7 +695,6 @@ def status_update_json(processed: list, failed: dict) -> None:
|
||||
|
||||
|
||||
config = None
|
||||
options = None
|
||||
start_timestamp = time.gmtime()
|
||||
|
||||
|
||||
@ -699,7 +704,7 @@ def main():
|
||||
The behaviour of this function is influenced by the configuration file as
|
||||
well as command line parameters.
|
||||
"""
|
||||
global config, options
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser()
|
||||
@ -714,10 +719,10 @@ def main():
|
||||
parser.add_argument("--allow-dirty", action="store_true", default=False,
|
||||
help=_("Run on git repo that has uncommitted changes"))
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
if not options.allow_dirty:
|
||||
status = subprocess.check_output(['git', 'status', '--porcelain'])
|
||||
@ -743,7 +748,7 @@ def main():
|
||||
logging.info(msg)
|
||||
|
||||
try:
|
||||
checkupdates_app(app)
|
||||
checkupdates_app(app, options.auto, options.commit)
|
||||
processed.append(appid)
|
||||
except Exception as e:
|
||||
msg = _("...checkupdate failed for {appid} : {error}").format(appid=appid, error=e)
|
||||
|
@ -55,16 +55,13 @@ from pathlib import Path
|
||||
|
||||
import defusedxml.ElementTree as XMLElementTree
|
||||
|
||||
from asn1crypto import cms
|
||||
from base64 import urlsafe_b64encode
|
||||
from binascii import hexlify
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from queue import Queue
|
||||
from zipfile import ZipFile
|
||||
|
||||
from pyasn1.codec.der import decoder, encoder
|
||||
from pyasn1_modules import rfc2315
|
||||
from pyasn1.error import PyAsn1Error
|
||||
|
||||
import fdroidserver.metadata
|
||||
import fdroidserver.lint
|
||||
from fdroidserver import _
|
||||
@ -135,11 +132,27 @@ env = None
|
||||
orig_path = None
|
||||
|
||||
|
||||
def get_default_cachedir():
|
||||
"""Get a cachedir, using appdirs for cross-platform, but works without.
|
||||
|
||||
Once appdirs is installed everywhere, this function can be
|
||||
removed.
|
||||
|
||||
"""
|
||||
appname = __name__.split('.')[0]
|
||||
try:
|
||||
import appdirs
|
||||
|
||||
return appdirs.user_cache_dir(appname, 'F-Droid')
|
||||
except ImportError:
|
||||
return str(Path.home() / '.cache' / appname)
|
||||
|
||||
|
||||
# All paths in the config must be strings, never pathlib.Path instances
|
||||
default_config = {
|
||||
'sdk_path': "$ANDROID_HOME",
|
||||
'ndk_paths': {},
|
||||
'cachedir': str(Path.home() / '.cache/fdroidserver'),
|
||||
'cachedir': get_default_cachedir(),
|
||||
'java_paths': None,
|
||||
'scan_binary': False,
|
||||
'ant': "ant",
|
||||
@ -179,6 +192,34 @@ default_config = {
|
||||
}
|
||||
|
||||
|
||||
def get_options():
|
||||
"""Return options as set up by parse_args().
|
||||
|
||||
This provides an easy way to get the global instance without
|
||||
having to think about very confusing import and submodule
|
||||
visibility. The code should be probably refactored so it does not
|
||||
need this. If each individual option value was always passed to
|
||||
functions as args, for example.
|
||||
|
||||
https://docs.python.org/3/reference/import.html#submodules
|
||||
|
||||
"""
|
||||
return fdroidserver.common.options
|
||||
|
||||
|
||||
def parse_args(parser):
|
||||
"""Call parser.parse_args(), store result in module-level variable and return it.
|
||||
|
||||
This is needed to set up the copy of the options instance in the
|
||||
fdroidserver.common module. A subcommand only needs to call this
|
||||
if it uses functions from fdroidserver.common that expect the
|
||||
"options" variable to be initialized.
|
||||
|
||||
"""
|
||||
fdroidserver.common.options = parser.parse_args()
|
||||
return fdroidserver.common.options
|
||||
|
||||
|
||||
def setup_global_opts(parser):
|
||||
try: # the buildserver VM might not have PIL installed
|
||||
from PIL import PngImagePlugin
|
||||
@ -193,6 +234,31 @@ def setup_global_opts(parser):
|
||||
help=_("Restrict output to warnings and errors"))
|
||||
|
||||
|
||||
def set_console_logging(verbose=False):
|
||||
"""Globally set logging to output nicely to the console."""
|
||||
|
||||
class _StdOutFilter(logging.Filter):
|
||||
def filter(self, record):
|
||||
return record.levelno < logging.ERROR
|
||||
|
||||
if verbose:
|
||||
level = logging.DEBUG
|
||||
else:
|
||||
level = logging.ERROR
|
||||
|
||||
stdout_handler = logging.StreamHandler(sys.stdout)
|
||||
stdout_handler.addFilter(_StdOutFilter())
|
||||
stdout_handler.setFormatter(logging.Formatter('%(message)s'))
|
||||
|
||||
stderr_handler = logging.StreamHandler(sys.stderr)
|
||||
stderr_handler.setLevel(logging.ERROR)
|
||||
stderr_handler.setFormatter(logging.Formatter(_('ERROR: %(message)s')))
|
||||
|
||||
logging.basicConfig(
|
||||
force=True, level=level, handlers=[stdout_handler, stderr_handler]
|
||||
)
|
||||
|
||||
|
||||
def _add_java_paths_to_config(pathlist, thisconfig):
|
||||
def path_version_key(s):
|
||||
versionlist = []
|
||||
@ -336,20 +402,38 @@ def fill_config_defaults(thisconfig):
|
||||
thisconfig['gradle_version_dir'] = str(Path(thisconfig['cachedir']) / 'gradle')
|
||||
|
||||
|
||||
def get_config(opts=None):
|
||||
"""Get config instace. This function takes care of initializing config data before returning it."""
|
||||
global config, options
|
||||
def get_config():
|
||||
"""Get the initalized, singleton config instance.
|
||||
|
||||
config and options are intertwined in read_config(), so they have
|
||||
to be here too. In the current ugly state of things, there are
|
||||
multiple potential instances of config and options in use:
|
||||
|
||||
* global
|
||||
* module-level in the subcommand module (e.g. fdroidserver/build.py)
|
||||
* module-level in fdroidserver.common
|
||||
|
||||
There are some insane parts of the code that are probably
|
||||
referring to multiple instances of these at different points.
|
||||
This can be super confusing and maddening.
|
||||
|
||||
The current intermediate refactoring step is to move all
|
||||
subcommands to always get/set config and options via this function
|
||||
so that there is no longer a distinction between the global and
|
||||
module-level instances. Then there can be only one module-level
|
||||
instance in fdroidserver.common.
|
||||
|
||||
"""
|
||||
global config
|
||||
|
||||
if config is not None:
|
||||
return config
|
||||
|
||||
common.read_config(opts=opts)
|
||||
read_config()
|
||||
|
||||
# make sure these values are available in common.py even if they didn't
|
||||
# declare global in a scope
|
||||
common.config = config
|
||||
if opts is not None:
|
||||
common.options = opts
|
||||
|
||||
return config
|
||||
|
||||
@ -382,7 +466,7 @@ def config_type_check(path, data):
|
||||
)
|
||||
|
||||
|
||||
def read_config(opts=None):
|
||||
def read_config():
|
||||
"""Read the repository config.
|
||||
|
||||
The config is read from config_file, which is in the current
|
||||
@ -401,13 +485,11 @@ def read_config(opts=None):
|
||||
in git, it makes sense to use a globally standard encoding.
|
||||
|
||||
"""
|
||||
global config, options
|
||||
global config
|
||||
|
||||
if config is not None:
|
||||
return config
|
||||
|
||||
options = opts
|
||||
|
||||
config = {}
|
||||
config_file = 'config.yml'
|
||||
old_config_file = 'config.py'
|
||||
@ -440,8 +522,8 @@ def read_config(opts=None):
|
||||
# smartcardoptions must be a list since its command line args for Popen
|
||||
smartcardoptions = config.get('smartcardoptions')
|
||||
if isinstance(smartcardoptions, str):
|
||||
options = re.sub(r'\s+', r' ', config['smartcardoptions']).split(' ')
|
||||
config['smartcardoptions'] = [i.strip() for i in options if i]
|
||||
sco_items = re.sub(r'\s+', r' ', config['smartcardoptions']).split(' ')
|
||||
config['smartcardoptions'] = [i.strip() for i in sco_items if i]
|
||||
elif not smartcardoptions and 'keystore' in config and config['keystore'] == 'NONE':
|
||||
# keystore='NONE' means use smartcard, these are required defaults
|
||||
config['smartcardoptions'] = ['-storetype', 'PKCS11', '-providerName',
|
||||
@ -462,14 +544,7 @@ def read_config(opts=None):
|
||||
fill_config_defaults(config)
|
||||
|
||||
if 'serverwebroot' in config:
|
||||
if isinstance(config['serverwebroot'], str):
|
||||
roots = [{'url': config['serverwebroot']}]
|
||||
elif all(isinstance(item, str) for item in config['serverwebroot']):
|
||||
roots = [{'url': i} for i in config['serverwebroot']]
|
||||
elif all(isinstance(item, dict) for item in config['serverwebroot']):
|
||||
roots = config['serverwebroot']
|
||||
else:
|
||||
raise TypeError(_('only accepts strings, lists, and tuples'))
|
||||
roots = parse_mirrors_config(config['serverwebroot'])
|
||||
rootlist = []
|
||||
for d in roots:
|
||||
# since this is used with rsync, where trailing slashes have
|
||||
@ -482,15 +557,7 @@ def read_config(opts=None):
|
||||
config['serverwebroot'] = rootlist
|
||||
|
||||
if 'servergitmirrors' in config:
|
||||
if isinstance(config['servergitmirrors'], str):
|
||||
roots = [{"url": config['servergitmirrors']}]
|
||||
elif all(isinstance(item, str) for item in config['servergitmirrors']):
|
||||
roots = [{'url': i} for i in config['servergitmirrors']]
|
||||
elif all(isinstance(item, dict) for item in config['servergitmirrors']):
|
||||
roots = config['servergitmirrors']
|
||||
else:
|
||||
raise TypeError(_('only accepts strings, lists, and tuples'))
|
||||
config['servergitmirrors'] = roots
|
||||
config['servergitmirrors'] = parse_mirrors_config(config['servergitmirrors'])
|
||||
|
||||
limit = config['git_mirror_size_limit']
|
||||
config['git_mirror_size_limit'] = parse_human_readable_size(limit)
|
||||
@ -533,10 +600,22 @@ def read_config(opts=None):
|
||||
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
|
||||
else:
|
||||
raise TypeError(_('only accepts strings, lists, and tuples'))
|
||||
|
||||
|
||||
def file_entry(filename, hash_value=None):
|
||||
meta = {}
|
||||
meta["name"] = "/" + filename.split("/", 1)[1]
|
||||
meta["sha256"] = hash_value or common.sha256sum(filename)
|
||||
meta["name"] = "/" + Path(filename).as_posix().split("/", 1)[1]
|
||||
meta["sha256"] = hash_value or sha256sum(filename)
|
||||
meta["size"] = os.stat(filename).st_size
|
||||
return meta
|
||||
|
||||
@ -2317,6 +2396,8 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
|
||||
gradlefile = build_gradle
|
||||
elif os.path.exists(build_gradle_kts):
|
||||
gradlefile = build_gradle_kts
|
||||
else:
|
||||
raise BuildException("No gradle file found")
|
||||
regsub_file(r'compileSdkVersion[ =]+[0-9]+',
|
||||
r'compileSdkVersion %s' % n,
|
||||
gradlefile)
|
||||
@ -2592,31 +2673,48 @@ def get_file_extension(filename):
|
||||
return os.path.splitext(filename)[1].lower()[1:]
|
||||
|
||||
|
||||
def use_androguard():
|
||||
"""Report if androguard is available, and config its debug logging."""
|
||||
def _androguard_logging_level(level=logging.ERROR):
|
||||
"""Tames androguard's default debug output.
|
||||
|
||||
There should be no debug output when the functions are being used
|
||||
via the API. Otherwise, the output is controlled by the --verbose
|
||||
flag.
|
||||
|
||||
To get coverage across the full range of androguard >= 3.3.5, this
|
||||
includes all known logger names that are relevant. So some of
|
||||
these names might not be present in the version of androguard
|
||||
currently in use.
|
||||
|
||||
"""
|
||||
if options and options.verbose:
|
||||
level = logging.WARNING
|
||||
|
||||
for name in (
|
||||
'androguard.apk',
|
||||
'androguard.axml',
|
||||
'androguard.core.api_specific_resources',
|
||||
'androguard.core.apk',
|
||||
'androguard.core.axml',
|
||||
):
|
||||
logging.getLogger(name).setLevel(level)
|
||||
|
||||
# some parts of androguard 4.x use loguru instead of logging
|
||||
try:
|
||||
import androguard
|
||||
if use_androguard.show_path:
|
||||
logging.debug(_('Using androguard from "{path}"').format(path=androguard.__file__))
|
||||
use_androguard.show_path = False
|
||||
if options and options.verbose:
|
||||
logging.getLogger("androguard.axml").setLevel(logging.INFO)
|
||||
logging.getLogger("androguard.core.api_specific_resources").setLevel(logging.ERROR)
|
||||
return True
|
||||
from loguru import logger
|
||||
logger.remove()
|
||||
except ImportError:
|
||||
return False
|
||||
pass
|
||||
|
||||
|
||||
use_androguard.show_path = True # type: ignore
|
||||
|
||||
|
||||
def _get_androguard_APK(apkfile):
|
||||
def get_androguard_APK(apkfile, skip_analysis=False):
|
||||
try:
|
||||
# these were moved in androguard 4.0
|
||||
from androguard.core.apk import APK
|
||||
except ImportError:
|
||||
from androguard.core.bytecodes.apk import APK
|
||||
except ImportError as exc:
|
||||
raise FDroidException("androguard library is not installed") from exc
|
||||
_androguard_logging_level()
|
||||
|
||||
return APK(apkfile)
|
||||
return APK(apkfile, skip_analysis=skip_analysis)
|
||||
|
||||
|
||||
def ensure_final_value(packageName, arsc, value):
|
||||
@ -2640,10 +2738,13 @@ def ensure_final_value(packageName, arsc, value):
|
||||
return ''
|
||||
|
||||
|
||||
def is_apk_and_debuggable(apkfile):
|
||||
"""Return True if the given file is an APK and is debuggable.
|
||||
def is_debuggable_or_testOnly(apkfile):
|
||||
"""Return True if the given file is an APK and is debuggable or testOnly.
|
||||
|
||||
Parse only <application android:debuggable=""> from the APK.
|
||||
These two settings should never be enabled in release builds. This
|
||||
parses <application android:debuggable="" android:testOnly="">
|
||||
from the APK and nothing else to run fast, since it is run on
|
||||
every APK as part of update.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@ -2653,7 +2754,13 @@ def is_apk_and_debuggable(apkfile):
|
||||
"""
|
||||
if get_file_extension(apkfile) != 'apk':
|
||||
return False
|
||||
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG
|
||||
try:
|
||||
# these were moved in androguard 4.0
|
||||
from androguard.core.axml import AXMLParser, format_value, START_TAG
|
||||
except ImportError:
|
||||
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG
|
||||
_androguard_logging_level()
|
||||
|
||||
with ZipFile(apkfile) as apk:
|
||||
with apk.open('AndroidManifest.xml') as manifest:
|
||||
axml = AXMLParser(manifest.read())
|
||||
@ -2662,7 +2769,7 @@ def is_apk_and_debuggable(apkfile):
|
||||
if _type == START_TAG and axml.getName() == 'application':
|
||||
for i in range(0, axml.getAttributeCount()):
|
||||
name = axml.getAttributeName(i)
|
||||
if name == 'debuggable':
|
||||
if name in ('debuggable', 'testOnly'):
|
||||
_type = axml.getAttributeValueType(i)
|
||||
_data = axml.getAttributeValueData(i)
|
||||
value = format_value(_type, _data, lambda _: axml.getAttributeValue(i))
|
||||
@ -2713,12 +2820,20 @@ def get_apk_id_androguard(apkfile):
|
||||
versionName is set to a Android String Resource (e.g. an integer
|
||||
hex value that starts with @).
|
||||
|
||||
This function is part of androguard as get_apkid(), so this
|
||||
vendored and modified to return versionCode as an integer.
|
||||
|
||||
"""
|
||||
if not os.path.exists(apkfile):
|
||||
raise FDroidException(_("Reading packageName/versionCode/versionName failed, APK invalid: '{apkfilename}'")
|
||||
.format(apkfilename=apkfile))
|
||||
|
||||
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
|
||||
try:
|
||||
# these were moved in androguard 4.0
|
||||
from androguard.core.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
|
||||
except ImportError:
|
||||
from androguard.core.bytecodes.axml import AXMLParser, format_value, START_TAG, END_TAG, TEXT, END_DOCUMENT
|
||||
_androguard_logging_level()
|
||||
|
||||
appid = None
|
||||
versionCode = None
|
||||
@ -2753,7 +2868,7 @@ def get_apk_id_androguard(apkfile):
|
||||
.format(path=apkfile))
|
||||
|
||||
if not versionName or versionName[0] == '@':
|
||||
a = _get_androguard_APK(apkfile)
|
||||
a = get_androguard_APK(apkfile)
|
||||
versionName = ensure_final_value(a.package, a.get_android_resources(), a.get_androidversion_name())
|
||||
if not versionName:
|
||||
versionName = '' # versionName is expected to always be a str
|
||||
@ -3091,10 +3206,7 @@ def signer_fingerprint_short(cert_encoded):
|
||||
|
||||
|
||||
def signer_fingerprint(cert_encoded):
|
||||
"""Obtain sha256 signing-key fingerprint for pkcs7 DER certificate.
|
||||
|
||||
Extracts hexadecimal sha256 signing-key fingerprint string
|
||||
for a given pkcs7 signature.
|
||||
"""Return SHA-256 signer fingerprint for PKCS#7 DER-encoded signature.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@ -3102,46 +3214,113 @@ def signer_fingerprint(cert_encoded):
|
||||
|
||||
Returns
|
||||
-------
|
||||
shortened signature fingerprint.
|
||||
Standard SHA-256 signer fingerprint.
|
||||
|
||||
"""
|
||||
return hashlib.sha256(cert_encoded).hexdigest()
|
||||
|
||||
|
||||
def get_first_signer_certificate(apkpath):
|
||||
"""Get the first signing certificate from the APK, DER-encoded."""
|
||||
certs = None
|
||||
cert_encoded = None
|
||||
with zipfile.ZipFile(apkpath, 'r') as apk:
|
||||
cert_files = [n for n in apk.namelist() if SIGNATURE_BLOCK_FILE_REGEX.match(n)]
|
||||
if len(cert_files) > 1:
|
||||
logging.error(_("Found multiple JAR Signature Block Files in {path}").format(path=apkpath))
|
||||
return None
|
||||
elif len(cert_files) == 1:
|
||||
cert_encoded = get_certificate(apk.read(cert_files[0]))
|
||||
"""Get the first signing certificate from the APK, DER-encoded.
|
||||
|
||||
if not cert_encoded and use_androguard():
|
||||
apkobject = _get_androguard_APK(apkpath)
|
||||
certs = apkobject.get_certificates_der_v2()
|
||||
if len(certs) > 0:
|
||||
logging.debug(_('Using APK Signature v2'))
|
||||
cert_encoded = certs[0]
|
||||
JAR and APK Signatures allow for multiple signers, though it is
|
||||
rarely used, and this is poorly documented. So this method only
|
||||
fetches the first certificate, and errors out if there are more.
|
||||
|
||||
Starting with targetSdkVersion 30, APK v2 Signatures are required.
|
||||
https://developer.android.com/about/versions/11/behavior-changes-11#minimum-signature-scheme
|
||||
|
||||
When a APK v2+ signature is present, the JAR signature is not
|
||||
verified. The verifier parses the signers from the v2+ signature
|
||||
and does not seem to look at the JAR signature.
|
||||
https://source.android.com/docs/security/features/apksigning/v2#apk-signature-scheme-v2-block
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#270
|
||||
|
||||
apksigner checks that the signers from all the APK signatures match:
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/ApkVerifier.java#383
|
||||
|
||||
apksigner verifies each signer's signature block file
|
||||
.(RSA|DSA|EC) against the corresponding signature file .SF
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#280
|
||||
|
||||
NoOverwriteDict is a workaround for:
|
||||
https://github.com/androguard/androguard/issues/1030
|
||||
|
||||
Lots more discusion here:
|
||||
https://gitlab.com/fdroid/fdroidserver/-/issues/1128
|
||||
|
||||
"""
|
||||
|
||||
class NoOverwriteDict(dict):
|
||||
def __setitem__(self, k, v):
|
||||
if k not in self:
|
||||
super().__setitem__(k, v)
|
||||
|
||||
cert_encoded = None
|
||||
found_certs = []
|
||||
apkobject = get_androguard_APK(apkpath)
|
||||
apkobject._v2_blocks = NoOverwriteDict()
|
||||
certs_v3 = apkobject.get_certificates_der_v3()
|
||||
if certs_v3:
|
||||
cert_v3 = certs_v3[0]
|
||||
found_certs.append(cert_v3)
|
||||
if not cert_encoded:
|
||||
certs = apkobject.get_certificates_der_v3()
|
||||
if len(certs) > 0:
|
||||
logging.debug(_('Using APK Signature v3'))
|
||||
cert_encoded = certs[0]
|
||||
logging.debug(_('Using APK Signature v3'))
|
||||
cert_encoded = cert_v3
|
||||
|
||||
certs_v2 = apkobject.get_certificates_der_v2()
|
||||
if certs_v2:
|
||||
cert_v2 = certs_v2[0]
|
||||
found_certs.append(cert_v2)
|
||||
if not cert_encoded:
|
||||
logging.debug(_('Using APK Signature v2'))
|
||||
cert_encoded = cert_v2
|
||||
|
||||
if get_min_sdk_version(apkobject) < 24 or (
|
||||
not (certs_v3 or certs_v2) and get_effective_target_sdk_version(apkobject) < 30
|
||||
):
|
||||
with zipfile.ZipFile(apkpath, 'r') as apk:
|
||||
cert_files = [
|
||||
n for n in apk.namelist() if SIGNATURE_BLOCK_FILE_REGEX.match(n)
|
||||
]
|
||||
if len(cert_files) > 1:
|
||||
logging.error(
|
||||
_("Found multiple JAR Signature Block Files in {path}").format(
|
||||
path=apkpath
|
||||
)
|
||||
)
|
||||
return
|
||||
elif len(cert_files) == 1:
|
||||
signature_block_file = cert_files[0]
|
||||
signature_file = (
|
||||
cert_files[0][: signature_block_file.rindex('.')] + '.SF'
|
||||
)
|
||||
cert_v1 = get_certificate(
|
||||
apk.read(signature_block_file),
|
||||
apk.read(signature_file),
|
||||
)
|
||||
found_certs.append(cert_v1)
|
||||
if not cert_encoded:
|
||||
logging.debug(_('Using JAR Signature'))
|
||||
cert_encoded = cert_v1
|
||||
|
||||
if not cert_encoded:
|
||||
logging.error(_("No signing certificates found in {path}").format(path=apkpath))
|
||||
return None
|
||||
return
|
||||
|
||||
if not all(cert == found_certs[0] for cert in found_certs):
|
||||
logging.error(
|
||||
_("APK signatures have different certificates in {path}:").format(
|
||||
path=apkpath
|
||||
)
|
||||
)
|
||||
return
|
||||
|
||||
return cert_encoded
|
||||
|
||||
|
||||
def apk_signer_fingerprint(apk_path):
|
||||
"""Obtain sha256 signing-key fingerprint for APK.
|
||||
|
||||
Extracts hexadecimal sha256 signing-key fingerprint string
|
||||
for a given APK.
|
||||
"""Get SHA-256 fingerprint string for the first signer from given APK.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@ -3150,7 +3329,8 @@ def apk_signer_fingerprint(apk_path):
|
||||
|
||||
Returns
|
||||
-------
|
||||
signature fingerprint
|
||||
Standard SHA-256 signer fingerprint
|
||||
|
||||
"""
|
||||
cert_encoded = get_first_signer_certificate(apk_path)
|
||||
if not cert_encoded:
|
||||
@ -3159,10 +3339,7 @@ def apk_signer_fingerprint(apk_path):
|
||||
|
||||
|
||||
def apk_signer_fingerprint_short(apk_path):
|
||||
"""Obtain shortened sha256 signing-key fingerprint for APK.
|
||||
|
||||
Extracts the first 7 hexadecimal digits of sha256 signing-key fingerprint
|
||||
for a given pkcs7 APK.
|
||||
"""Get 7 hex digit SHA-256 fingerprint string for the first signer from given APK.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
@ -3171,7 +3348,8 @@ def apk_signer_fingerprint_short(apk_path):
|
||||
|
||||
Returns
|
||||
-------
|
||||
shortened signing-key fingerprint
|
||||
first 7 chars of the standard SHA-256 signer fingerprint
|
||||
|
||||
"""
|
||||
return apk_signer_fingerprint(apk_path)[:7]
|
||||
|
||||
@ -3390,7 +3568,7 @@ def apk_extract_signatures(apkpath, outdir):
|
||||
|
||||
|
||||
def get_min_sdk_version(apk):
|
||||
"""Wrap the androguard function to always return and int.
|
||||
"""Wrap the androguard function to always return an integer.
|
||||
|
||||
Fall back to 1 if we can't get a valid minsdk version.
|
||||
|
||||
@ -3401,7 +3579,7 @@ def get_min_sdk_version(apk):
|
||||
|
||||
Returns
|
||||
-------
|
||||
minsdk: int
|
||||
minSdkVersion: int
|
||||
"""
|
||||
try:
|
||||
return int(apk.get_min_sdk_version())
|
||||
@ -3409,6 +3587,24 @@ def get_min_sdk_version(apk):
|
||||
return 1
|
||||
|
||||
|
||||
def get_effective_target_sdk_version(apk):
|
||||
"""Wrap the androguard function to always return an integer.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
apk
|
||||
androguard APK object
|
||||
|
||||
Returns
|
||||
-------
|
||||
targetSdkVersion: int
|
||||
"""
|
||||
try:
|
||||
return int(apk.get_effective_target_sdk_version())
|
||||
except TypeError:
|
||||
return get_min_sdk_version(apk)
|
||||
|
||||
|
||||
def get_apksigner_smartcardoptions(smartcardoptions):
|
||||
if '-providerName' in smartcardoptions.copy():
|
||||
pos = smartcardoptions.index('-providerName')
|
||||
@ -3820,14 +4016,33 @@ def get_cert_fingerprint(pubkey):
|
||||
return " ".join(ret)
|
||||
|
||||
|
||||
def get_certificate(signature_block_file):
|
||||
"""Extract a DER certificate from JAR Signature's "Signature Block File".
|
||||
def get_certificate(signature_block_file, signature_file=None):
|
||||
"""Extract a single DER certificate from JAR Signature's "Signature Block File".
|
||||
|
||||
If there is more than one signer certificate, this exits with an
|
||||
error, unless the signature_file is provided. If that is set, it
|
||||
will return the certificate that matches the Signature File, for
|
||||
example, if there is a certificate chain, like TLS does. In the
|
||||
fdroidserver use cases, there should always be a single signer.
|
||||
But rarely, some APKs include certificate chains.
|
||||
|
||||
This could be replaced by androguard's APK.get_certificate_der()
|
||||
provided the cert chain fix was merged there. Maybe in 4.1.2?
|
||||
https://github.com/androguard/androguard/pull/1038
|
||||
|
||||
https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file
|
||||
|
||||
Parameters
|
||||
----------
|
||||
signature_block_file
|
||||
file bytes (as string) representing the
|
||||
certificate, as read directly out of the APK/ZIP
|
||||
Bytes representing the PKCS#7 signer certificate and
|
||||
signature, as read directly out of the JAR/APK, e.g. CERT.RSA.
|
||||
|
||||
signature_file
|
||||
Bytes representing the manifest signed by the Signature Block
|
||||
File, e.g. CERT.SF. If this is not given, the assumption is
|
||||
there will be only a single certificate in
|
||||
signature_block_file, otherwise it is an error.
|
||||
|
||||
Returns
|
||||
-------
|
||||
@ -3835,18 +4050,107 @@ def get_certificate(signature_block_file):
|
||||
or None in case of error
|
||||
|
||||
"""
|
||||
content = decoder.decode(signature_block_file, asn1Spec=rfc2315.ContentInfo())[0]
|
||||
if content.getComponentByName('contentType') != rfc2315.signedData:
|
||||
return None
|
||||
content = decoder.decode(content.getComponentByName('content'),
|
||||
asn1Spec=rfc2315.SignedData())[0]
|
||||
try:
|
||||
certificates = content.getComponentByName('certificates')
|
||||
cert = certificates[0].getComponentByName('certificate')
|
||||
except PyAsn1Error:
|
||||
logging.error("Certificates not found.")
|
||||
return None
|
||||
return encoder.encode(cert)
|
||||
pkcs7obj = cms.ContentInfo.load(signature_block_file)
|
||||
certificates = pkcs7obj['content']['certificates']
|
||||
if len(certificates) == 1:
|
||||
return certificates[0].chosen.dump()
|
||||
elif not signature_file:
|
||||
logging.error(_('Found multiple Signer Certificates!'))
|
||||
return
|
||||
certificate = get_jar_signer_certificate(pkcs7obj, signature_file)
|
||||
if certificate:
|
||||
return certificate.chosen.dump()
|
||||
|
||||
|
||||
def _find_matching_certificate(signer_info, certificate):
|
||||
"""Find the certificates that matches signer_info using issuer and serial number.
|
||||
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#590
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/x509/Certificate.java#55
|
||||
|
||||
"""
|
||||
certificate_serial = certificate.chosen['tbs_certificate']['serial_number']
|
||||
expected_issuer_serial = signer_info['sid'].chosen
|
||||
return (
|
||||
expected_issuer_serial['issuer'] == certificate.chosen.issuer
|
||||
and expected_issuer_serial['serial_number'] == certificate_serial
|
||||
)
|
||||
|
||||
|
||||
def get_jar_signer_certificate(pkcs7obj: cms.ContentInfo, signature_file: bytes):
|
||||
"""Return the one certificate in a chain that actually signed the manifest.
|
||||
|
||||
PKCS#7-signed data can include certificate chains for use cases
|
||||
where an Certificate Authority (CA) is used. Android does not
|
||||
validate the certificate chain on APK signatures, so neither does
|
||||
this.
|
||||
https://android.googlesource.com/platform/tools/apksig/+/refs/tags/android-13.0.0_r3/src/main/java/com/android/apksig/internal/apk/v1/V1SchemeVerifier.java#512
|
||||
|
||||
Some useful fodder for understanding all this:
|
||||
https://docs.oracle.com/javase/tutorial/deployment/jar/intro.html
|
||||
https://technotes.shemyak.com/posts/jar-signature-block-file-format/
|
||||
https://docs.oracle.com/en/java/javase/21/docs/specs/man/jarsigner.html#the-signed-jar-file
|
||||
https://qistoph.blogspot.com/2012/01/manual-verify-pkcs7-signed-data-with.html
|
||||
|
||||
"""
|
||||
import oscrypto.asymmetric
|
||||
import oscrypto.errors
|
||||
|
||||
# Android attempts to verify all SignerInfos and then picks the first verified SignerInfo.
|
||||
first_verified_signer_info = None
|
||||
first_verified_signer_info_signing_certificate = None
|
||||
for signer_info in pkcs7obj['content']['signer_infos']:
|
||||
signature = signer_info['signature'].contents
|
||||
digest_algorithm = signer_info["digest_algorithm"]["algorithm"].native
|
||||
public_key = None
|
||||
for certificate in pkcs7obj['content']['certificates']:
|
||||
if _find_matching_certificate(signer_info, certificate):
|
||||
public_key = oscrypto.asymmetric.load_public_key(certificate.chosen.public_key)
|
||||
break
|
||||
if public_key is None:
|
||||
logging.info('No certificate found that matches signer info!')
|
||||
continue
|
||||
|
||||
signature_algo = signer_info['signature_algorithm'].signature_algo
|
||||
if signature_algo == 'rsassa_pkcs1v15':
|
||||
# ASN.1 - 1.2.840.113549.1.1.1
|
||||
verify_func = oscrypto.asymmetric.rsa_pkcs1v15_verify
|
||||
elif signature_algo == 'rsassa_pss':
|
||||
# ASN.1 - 1.2.840.113549.1.1.10
|
||||
verify_func = oscrypto.asymmetric.rsa_pss_verify
|
||||
elif signature_algo == 'dsa':
|
||||
# ASN.1 - 1.2.840.10040.4.1
|
||||
verify_func = oscrypto.asymmetric.dsa_verify
|
||||
elif signature_algo == 'ecdsa':
|
||||
# ASN.1 - 1.2.840.10045.4
|
||||
verify_func = oscrypto.asymmetric.ecdsa_verify
|
||||
else:
|
||||
logging.error(
|
||||
'Unknown signature algorithm %s:\n %s\n %s'
|
||||
% (
|
||||
signature_algo,
|
||||
hexlify(certificate.chosen.sha256).decode(),
|
||||
certificate.chosen.subject.human_friendly,
|
||||
),
|
||||
)
|
||||
return
|
||||
|
||||
try:
|
||||
verify_func(public_key, signature, signature_file, digest_algorithm)
|
||||
if not first_verified_signer_info:
|
||||
first_verified_signer_info = signer_info
|
||||
first_verified_signer_info_signing_certificate = certificate
|
||||
|
||||
except oscrypto.errors.SignatureError as e:
|
||||
logging.error(
|
||||
'"%s", skipping:\n %s\n %s' % (
|
||||
e,
|
||||
hexlify(certificate.chosen.sha256).decode(),
|
||||
certificate.chosen.subject.human_friendly),
|
||||
)
|
||||
|
||||
if first_verified_signer_info_signing_certificate:
|
||||
return first_verified_signer_info_signing_certificate
|
||||
|
||||
|
||||
def load_stats_fdroid_signing_key_fingerprints():
|
||||
@ -4125,7 +4429,12 @@ def is_repo_file(filename, for_gpg_signing=False):
|
||||
b'index_unsigned.jar',
|
||||
]
|
||||
if not for_gpg_signing:
|
||||
ignore_files += [b'entry.json', b'index-v1.json', b'index-v2.json']
|
||||
ignore_files += [
|
||||
b'altstore-index.json',
|
||||
b'entry.json',
|
||||
b'index-v1.json',
|
||||
b'index-v2.json',
|
||||
]
|
||||
|
||||
return (
|
||||
os.path.isfile(filename)
|
||||
|
@ -25,11 +25,12 @@ import re
|
||||
import subprocess
|
||||
import time
|
||||
import urllib
|
||||
from typing import Dict, Optional, List
|
||||
from typing import Dict, List
|
||||
from git import Repo
|
||||
import yaml
|
||||
from argparse import ArgumentParser, Namespace
|
||||
from argparse import ArgumentParser
|
||||
import logging
|
||||
from shlex import split
|
||||
import shutil
|
||||
import git
|
||||
from pathlib import Path
|
||||
@ -40,7 +41,6 @@ from . import index
|
||||
from .exception import FDroidException
|
||||
|
||||
config = None
|
||||
options: Optional[Namespace] = None
|
||||
start_timestamp = time.gmtime()
|
||||
|
||||
GIT_BRANCH = 'master'
|
||||
@ -49,9 +49,11 @@ 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+).*')
|
||||
|
||||
INDEX_FILES = [
|
||||
"altstore-index.json",
|
||||
"entry.jar",
|
||||
"entry.json",
|
||||
"entry.json.asc",
|
||||
@ -94,7 +96,7 @@ def _get_index_includes(base_dir):
|
||||
return index_includes
|
||||
|
||||
|
||||
def update_awsbucket(repo_section, is_index_only=False):
|
||||
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".
|
||||
|
||||
The contents of that subdir of the
|
||||
@ -102,11 +104,35 @@ def update_awsbucket(repo_section, is_index_only=False):
|
||||
|
||||
Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey
|
||||
"""
|
||||
logging.debug('Syncing "' + repo_section + '" to Amazon S3 bucket "'
|
||||
+ config['awsbucket'] + '"')
|
||||
logging.debug(
|
||||
f'''Syncing "{repo_section}" to Amazon S3 bucket "{config['awsbucket']}"'''
|
||||
)
|
||||
|
||||
if common.set_command_in_config('s3cmd'):
|
||||
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)
|
||||
|
||||
@ -122,17 +148,20 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
|
||||
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']))
|
||||
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))
|
||||
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, ('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
|
||||
@ -140,24 +169,34 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
|
||||
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))
|
||||
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))
|
||||
logging.error(
|
||||
_('Failed to create S3 bucket: {url}').format(url=s3bucketurl)
|
||||
)
|
||||
raise FDroidException()
|
||||
|
||||
s3cmd_sync = s3cmd + ['sync', '--acl-public']
|
||||
if options.verbose:
|
||||
options = common.get_options()
|
||||
if options and options.verbose:
|
||||
s3cmd_sync += ['--verbose']
|
||||
if options.quiet:
|
||||
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))
|
||||
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')
|
||||
@ -166,7 +205,9 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
|
||||
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])
|
||||
returncode = subprocess.call(
|
||||
s3cmd_sync + sync_indexes_flags + [repo_section, s3url]
|
||||
)
|
||||
if returncode != 0:
|
||||
raise FDroidException()
|
||||
else:
|
||||
@ -187,8 +228,11 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
|
||||
if returncode != 0:
|
||||
raise FDroidException()
|
||||
|
||||
logging.debug(_('s3cmd sync indexes {path} to {url} and delete')
|
||||
.format(path=repo_section, url=s3url))
|
||||
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:
|
||||
@ -199,6 +243,134 @@ def update_awsbucket_s3cmd(repo_section, is_index_only=False):
|
||||
raise FDroidException()
|
||||
|
||||
|
||||
def update_remote_storage_with_rclone(
|
||||
repo_section, is_index_only=False, verbose=False, quiet=False
|
||||
):
|
||||
"""
|
||||
Upload fdroid repo folder to remote storage using rclone sync.
|
||||
|
||||
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
|
||||
|
||||
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']))
|
||||
|
||||
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
|
||||
)
|
||||
)
|
||||
configfilename = USER_RCLONE_CONF
|
||||
else:
|
||||
logging.info('Custom configuration not found.')
|
||||
logging.info(
|
||||
'Using default configuration at {}'.format(
|
||||
subprocess.check_output('rclone config file')
|
||||
)
|
||||
)
|
||||
configfilename = None
|
||||
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('rclone config file')
|
||||
)
|
||||
)
|
||||
configfilename = None
|
||||
|
||||
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 is_index_only:
|
||||
sources = _get_index_file_paths(repo_section)
|
||||
else:
|
||||
sources = repo_section
|
||||
|
||||
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 = 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 = (
|
||||
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:
|
||||
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.
|
||||
|
||||
@ -210,22 +382,28 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
|
||||
|
||||
Requires AWS credentials set in config.yml: awsaccesskeyid, awssecretkey
|
||||
"""
|
||||
logging.debug(_('using Apache libcloud to sync with {url}')
|
||||
.format(url=config['awsbucket']))
|
||||
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!'))
|
||||
_(
|
||||
'To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.yml!'
|
||||
)
|
||||
)
|
||||
awsbucket = config['awsbucket']
|
||||
|
||||
if os.path.exists(USER_S3CFG):
|
||||
raise FDroidException(_('"{path}" exists but s3cmd is not installed!')
|
||||
.format(path=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'])
|
||||
@ -233,8 +411,7 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
|
||||
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))
|
||||
logging.info(_('Created new container "{name}"').format(name=container.name))
|
||||
|
||||
upload_dir = 'fdroid/' + repo_section
|
||||
objs = dict()
|
||||
@ -243,12 +420,22 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
|
||||
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]
|
||||
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))
|
||||
|
||||
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]
|
||||
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
|
||||
@ -282,13 +469,15 @@ def update_awsbucket_libcloud(repo_section, is_index_only=False):
|
||||
extra['content_type'] = 'application/pgp-signature'
|
||||
elif file_to_upload.endswith('.asc'):
|
||||
extra['content_type'] = 'application/pgp-signature'
|
||||
logging.info(' uploading ' + os.path.relpath(file_to_upload)
|
||||
+ ' to s3://' + awsbucket + '/' + object_name)
|
||||
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)
|
||||
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()
|
||||
@ -324,6 +513,7 @@ def update_serverwebroot(serverwebroot, repo_section):
|
||||
_('rsync is missing or broken: {error}').format(error=e)
|
||||
) from e
|
||||
rsyncargs = ['rsync', '--archive', '--delete-after', '--safe-links']
|
||||
options = common.get_options()
|
||||
if not options or not options.no_checksum:
|
||||
rsyncargs.append('--checksum')
|
||||
if options and options.verbose:
|
||||
@ -331,9 +521,15 @@ def update_serverwebroot(serverwebroot, repo_section):
|
||||
if options and options.quiet:
|
||||
rsyncargs += ['--quiet']
|
||||
if options and options.identity_file:
|
||||
rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file]
|
||||
rsyncargs += [
|
||||
'-e',
|
||||
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + options.identity_file,
|
||||
]
|
||||
elif config and config.get('identity_file'):
|
||||
rsyncargs += ['-e', 'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file']]
|
||||
rsyncargs += [
|
||||
'-e',
|
||||
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i ' + config['identity_file'],
|
||||
]
|
||||
url = serverwebroot['url']
|
||||
is_index_only = serverwebroot.get('index_only', False)
|
||||
logging.info('rsyncing ' + repo_section + ' to ' + url)
|
||||
@ -350,10 +546,15 @@ def update_serverwebroot(serverwebroot, repo_section):
|
||||
if subprocess.call(rsyncargs + [repo_section, url]) != 0:
|
||||
raise FDroidException()
|
||||
# upload "current version" symlinks if requested
|
||||
if config['make_current_version_link'] and repo_section == 'repo':
|
||||
if (
|
||||
config
|
||||
and config.get('make_current_version_link')
|
||||
and repo_section == 'repo'
|
||||
):
|
||||
links_to_upload = []
|
||||
for f in glob.glob('*.apk') \
|
||||
+ glob.glob('*.apk.asc') + glob.glob('*.apk.sig'):
|
||||
for f in (
|
||||
glob.glob('*.apk') + glob.glob('*.apk.asc') + glob.glob('*.apk.sig')
|
||||
):
|
||||
if os.path.islink(f):
|
||||
links_to_upload.append(f)
|
||||
if len(links_to_upload) > 0:
|
||||
@ -402,9 +603,11 @@ def sync_from_localcopy(repo_section, local_copy_dir):
|
||||
|
||||
# trailing slashes have a meaning in rsync which is not needed here, so
|
||||
# make sure both paths have exactly one trailing slash
|
||||
common.local_rsync(options,
|
||||
[os.path.join(local_copy_dir, repo_section).rstrip('/') + '/'],
|
||||
repo_section.rstrip('/') + '/')
|
||||
common.local_rsync(
|
||||
common.get_options(),
|
||||
[os.path.join(local_copy_dir, repo_section).rstrip('/') + '/'],
|
||||
repo_section.rstrip('/') + '/',
|
||||
)
|
||||
|
||||
offline_copy = os.path.join(local_copy_dir, BINARY_TRANSPARENCY_DIR)
|
||||
if os.path.exists(os.path.join(offline_copy, '.git')):
|
||||
@ -421,7 +624,7 @@ def update_localcopy(repo_section, local_copy_dir):
|
||||
|
||||
"""
|
||||
# local_copy_dir is guaranteed to have a trailing slash in main() below
|
||||
common.local_rsync(options, [repo_section], local_copy_dir)
|
||||
common.local_rsync(common.get_options(), [repo_section], local_copy_dir)
|
||||
|
||||
offline_copy = os.path.join(os.getcwd(), BINARY_TRANSPARENCY_DIR)
|
||||
if os.path.isdir(os.path.join(offline_copy, '.git')):
|
||||
@ -452,11 +655,14 @@ def update_servergitmirrors(servergitmirrors, repo_section):
|
||||
|
||||
"""
|
||||
from clint.textui import progress
|
||||
if config.get('local_copy_dir') \
|
||||
and not config.get('sync_from_local_copy_dir'):
|
||||
logging.debug(_('Offline machine, skipping git mirror generation until `fdroid deploy`'))
|
||||
|
||||
if config.get('local_copy_dir') and not config.get('sync_from_local_copy_dir'):
|
||||
logging.debug(
|
||||
_('Offline machine, skipping git mirror generation until `fdroid deploy`')
|
||||
)
|
||||
return
|
||||
|
||||
options = common.get_options()
|
||||
workspace_dir = Path(os.getcwd())
|
||||
|
||||
# right now we support only 'repo' git-mirroring
|
||||
@ -473,12 +679,18 @@ def update_servergitmirrors(servergitmirrors, repo_section):
|
||||
dotgit_size = _get_size(dotgit)
|
||||
dotgit_over_limit = dotgit_size > config['git_mirror_size_limit']
|
||||
if os.path.isdir(dotgit) and dotgit_over_limit:
|
||||
logging.warning(_('Deleting git-mirror history, repo is too big ({size} max {limit})')
|
||||
.format(size=dotgit_size, limit=config['git_mirror_size_limit']))
|
||||
logging.warning(
|
||||
_(
|
||||
'Deleting git-mirror history, repo is too big ({size} max {limit})'
|
||||
).format(size=dotgit_size, limit=config['git_mirror_size_limit'])
|
||||
)
|
||||
shutil.rmtree(dotgit)
|
||||
if options.no_keep_git_mirror_archive and dotgit_over_limit:
|
||||
logging.warning(_('Deleting archive, repo is too big ({size} max {limit})')
|
||||
.format(size=dotgit_size, limit=config['git_mirror_size_limit']))
|
||||
logging.warning(
|
||||
_('Deleting archive, repo is too big ({size} max {limit})').format(
|
||||
size=dotgit_size, limit=config['git_mirror_size_limit']
|
||||
)
|
||||
)
|
||||
archive_path = os.path.join(git_mirror_path, 'fdroid', 'archive')
|
||||
shutil.rmtree(archive_path, ignore_errors=True)
|
||||
|
||||
@ -496,6 +708,7 @@ def update_servergitmirrors(servergitmirrors, repo_section):
|
||||
def update(self, op_code, current, maximum=None, message=None):
|
||||
if isinstance(maximum, float):
|
||||
progressbar.show(current, maximum)
|
||||
|
||||
progress = MyProgressPrinter()
|
||||
else:
|
||||
progress = None
|
||||
@ -519,33 +732,42 @@ def update_servergitmirrors(servergitmirrors, repo_section):
|
||||
# trailing slashes have a meaning in rsync which is not needed here, so
|
||||
# make sure both paths have exactly one trailing slash
|
||||
if is_index_only:
|
||||
files_to_sync = [str(workspace_dir / repo_section / index_file) for index_file in INDEX_FILES]
|
||||
files_to_sync = [
|
||||
str(workspace_dir / repo_section / index_file)
|
||||
for index_file in INDEX_FILES
|
||||
]
|
||||
else:
|
||||
files_to_sync = [str(workspace_dir / repo_section).rstrip('/') + '/']
|
||||
common.local_rsync(options, files_to_sync, git_repodir.rstrip('/') + '/')
|
||||
common.local_rsync(
|
||||
common.get_options(), files_to_sync, git_repodir.rstrip('/') + '/'
|
||||
)
|
||||
|
||||
upload_to_servergitmirror(mirror_config=d,
|
||||
local_repo=repo,
|
||||
enabled_remotes=enabled_remotes,
|
||||
repo_section=repo_section,
|
||||
is_index_only=is_index_only,
|
||||
fdroid_dir=git_fdroiddir,
|
||||
git_mirror_path=str(git_mirror_path),
|
||||
ssh_cmd=ssh_cmd,
|
||||
progress=progress)
|
||||
upload_to_servergitmirror(
|
||||
mirror_config=d,
|
||||
local_repo=repo,
|
||||
enabled_remotes=enabled_remotes,
|
||||
repo_section=repo_section,
|
||||
is_index_only=is_index_only,
|
||||
fdroid_dir=git_fdroiddir,
|
||||
git_mirror_path=str(git_mirror_path),
|
||||
ssh_cmd=ssh_cmd,
|
||||
progress=progress,
|
||||
)
|
||||
if progress:
|
||||
progressbar.done()
|
||||
|
||||
|
||||
def upload_to_servergitmirror(mirror_config: Dict[str, str],
|
||||
local_repo: Repo,
|
||||
enabled_remotes: List[str],
|
||||
repo_section: str,
|
||||
is_index_only: bool,
|
||||
fdroid_dir: str,
|
||||
git_mirror_path: str,
|
||||
ssh_cmd: str,
|
||||
progress: git.RemoteProgress) -> None:
|
||||
def upload_to_servergitmirror(
|
||||
mirror_config: Dict[str, str],
|
||||
local_repo: Repo,
|
||||
enabled_remotes: List[str],
|
||||
repo_section: str,
|
||||
is_index_only: bool,
|
||||
fdroid_dir: str,
|
||||
git_mirror_path: str,
|
||||
ssh_cmd: str,
|
||||
progress: git.RemoteProgress,
|
||||
) -> None:
|
||||
remote_branch_name = GIT_BRANCH
|
||||
local_branch_name = local_repo.active_branch.name
|
||||
|
||||
@ -561,9 +783,10 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
|
||||
local_repo.create_remote(name, remote_url)
|
||||
logging.info('Mirroring to: ' + remote_url)
|
||||
|
||||
logging.info("git status:", local_repo.git.status())
|
||||
if is_index_only:
|
||||
local_repo.index.add(_get_index_file_paths(os.path.join('fdroid', repo_section)))
|
||||
local_repo.index.add(
|
||||
_get_index_file_paths(os.path.join('fdroid', repo_section))
|
||||
)
|
||||
else:
|
||||
# sadly index.add don't allow the --all parameter
|
||||
logging.debug('Adding all files to git mirror')
|
||||
@ -572,16 +795,13 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
|
||||
logging.debug('Committing files into git mirror')
|
||||
local_repo.index.commit("fdroidserver git-mirror")
|
||||
|
||||
|
||||
# only deploy to GitLab Artifacts if too big for GitLab Pages
|
||||
if common.get_dir_size(fdroid_dir) <= common.GITLAB_COM_PAGES_MAX_SIZE:
|
||||
gitlab_ci_job_name = 'pages'
|
||||
else:
|
||||
gitlab_ci_job_name = 'GitLab Artifacts'
|
||||
logging.warning(
|
||||
_(
|
||||
'Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!'
|
||||
)
|
||||
_('Skipping GitLab Pages mirror because the repo is too large (>%.2fGB)!')
|
||||
% (common.GITLAB_COM_PAGES_MAX_SIZE / 1000000000)
|
||||
)
|
||||
|
||||
@ -609,31 +829,42 @@ def upload_to_servergitmirror(mirror_config: Dict[str, str],
|
||||
local_repo.index.add(['.gitlab-ci.yml'])
|
||||
local_repo.index.commit("fdroidserver git-mirror: Deploy to GitLab Pages")
|
||||
|
||||
logging.info(_('Pushing to {url}').format(url=remote.url))
|
||||
logging.debug(_('Pushing to {url}').format(url=remote.url))
|
||||
with local_repo.git.custom_environment(GIT_SSH_COMMAND=ssh_cmd):
|
||||
pushinfos = remote.push(
|
||||
f"{local_branch_name}:{remote_branch_name}", force=True, set_upstream=True, progress=progress
|
||||
f"{local_branch_name}:{remote_branch_name}",
|
||||
force=True,
|
||||
set_upstream=True,
|
||||
progress=progress,
|
||||
)
|
||||
for pushinfo in pushinfos:
|
||||
if pushinfo.flags & (git.remote.PushInfo.ERROR
|
||||
| git.remote.PushInfo.REJECTED
|
||||
| git.remote.PushInfo.REMOTE_FAILURE
|
||||
| git.remote.PushInfo.REMOTE_REJECTED):
|
||||
if pushinfo.flags & (
|
||||
git.remote.PushInfo.ERROR
|
||||
| git.remote.PushInfo.REJECTED
|
||||
| git.remote.PushInfo.REMOTE_FAILURE
|
||||
| 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)
|
||||
raise FDroidException(remote.url + ' push failed: ' + str(pushinfo.flags)
|
||||
+ ' ' + pushinfo.summary)
|
||||
raise FDroidException(
|
||||
remote.url
|
||||
+ ' push failed: '
|
||||
+ str(pushinfo.flags)
|
||||
+ ' '
|
||||
+ pushinfo.summary
|
||||
)
|
||||
else:
|
||||
logging.debug(remote.url + ': ' + pushinfo.summary)
|
||||
|
||||
|
||||
def upload_to_android_observatory(repo_section):
|
||||
import requests
|
||||
|
||||
requests # stop unused import warning
|
||||
|
||||
if options.verbose:
|
||||
if common.get_options().verbose:
|
||||
logging.getLogger("requests").setLevel(logging.INFO)
|
||||
logging.getLogger("urllib3").setLevel(logging.INFO)
|
||||
else:
|
||||
@ -652,9 +883,12 @@ def upload_apk_to_android_observatory(path):
|
||||
from lxml.html import fromstring
|
||||
|
||||
apkfilename = os.path.basename(path)
|
||||
r = requests.post('https://androidobservatory.org/',
|
||||
data={'q': common.sha256sum(path), 'searchby': 'hash'},
|
||||
headers=net.HEADERS, timeout=300)
|
||||
r = requests.post(
|
||||
'https://androidobservatory.org/',
|
||||
data={'q': common.sha256sum(path), 'searchby': 'hash'},
|
||||
headers=net.HEADERS,
|
||||
timeout=300,
|
||||
)
|
||||
if r.status_code == 200:
|
||||
# from now on XPath will be used to retrieve the message in the HTML
|
||||
# androidobservatory doesn't have a nice API to talk with
|
||||
@ -671,22 +905,30 @@ def upload_apk_to_android_observatory(path):
|
||||
|
||||
page = 'https://androidobservatory.org'
|
||||
if href:
|
||||
message = (_('Found {apkfilename} at {url}')
|
||||
.format(apkfilename=apkfilename, url=(page + href)))
|
||||
message = _('Found {apkfilename} at {url}').format(
|
||||
apkfilename=apkfilename, url=(page + href)
|
||||
)
|
||||
logging.debug(message)
|
||||
return
|
||||
|
||||
# upload the file with a post request
|
||||
logging.info(_('Uploading {apkfilename} to androidobservatory.org')
|
||||
.format(apkfilename=apkfilename))
|
||||
r = requests.post('https://androidobservatory.org/upload',
|
||||
files={'apk': (apkfilename, open(path, 'rb'))},
|
||||
headers=net.HEADERS,
|
||||
allow_redirects=False, timeout=300)
|
||||
logging.info(
|
||||
_('Uploading {apkfilename} to androidobservatory.org').format(
|
||||
apkfilename=apkfilename
|
||||
)
|
||||
)
|
||||
r = requests.post(
|
||||
'https://androidobservatory.org/upload',
|
||||
files={'apk': (apkfilename, open(path, 'rb'))},
|
||||
headers=net.HEADERS,
|
||||
allow_redirects=False,
|
||||
timeout=300,
|
||||
)
|
||||
|
||||
|
||||
def upload_to_virustotal(repo_section, virustotal_apikey):
|
||||
import requests
|
||||
|
||||
requests # stop unused import warning
|
||||
|
||||
if repo_section == 'repo':
|
||||
@ -697,44 +939,47 @@ def upload_to_virustotal(repo_section, virustotal_apikey):
|
||||
with open(os.path.join(repo_section, 'index-v1.json')) as fp:
|
||||
data = json.load(fp)
|
||||
else:
|
||||
data, _ignored, _ignored = index.get_index_from_jar(os.path.join(repo_section, 'index-v1.jar'))
|
||||
local_jar = os.path.join(repo_section, 'index-v1.jar')
|
||||
data, _ignored, _ignored = index.get_index_from_jar(local_jar)
|
||||
|
||||
for packageName, packages in data['packages'].items():
|
||||
for package in packages:
|
||||
upload_apk_to_virustotal(virustotal_apikey, **package)
|
||||
|
||||
|
||||
def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
|
||||
versionCode, **kwargs):
|
||||
def upload_apk_to_virustotal(
|
||||
virustotal_apikey, packageName, apkName, hash, versionCode, **kwargs
|
||||
):
|
||||
import requests
|
||||
|
||||
logging.getLogger("urllib3").setLevel(logging.WARNING)
|
||||
logging.getLogger("requests").setLevel(logging.WARNING)
|
||||
|
||||
outputfilename = os.path.join('virustotal',
|
||||
packageName + '_' + str(versionCode)
|
||||
+ '_' + hash + '.json')
|
||||
outputfilename = os.path.join(
|
||||
'virustotal', packageName + '_' + str(versionCode) + '_' + hash + '.json'
|
||||
)
|
||||
if os.path.exists(outputfilename):
|
||||
logging.debug(apkName + ' results are in ' + outputfilename)
|
||||
return outputfilename
|
||||
repofilename = os.path.join('repo', apkName)
|
||||
logging.info('Checking if ' + repofilename + ' is on virustotal')
|
||||
|
||||
headers = {
|
||||
"User-Agent": "F-Droid"
|
||||
}
|
||||
headers = {"User-Agent": "F-Droid"}
|
||||
if 'headers' in kwargs:
|
||||
for k, v in kwargs['headers'].items():
|
||||
headers[k] = v
|
||||
|
||||
data = {
|
||||
apikey = {
|
||||
'apikey': virustotal_apikey,
|
||||
'resource': hash,
|
||||
}
|
||||
needs_file_upload = False
|
||||
while True:
|
||||
r = requests.get('https://www.virustotal.com/vtapi/v2/file/report?'
|
||||
+ urllib.parse.urlencode(data), headers=headers, timeout=300)
|
||||
report_url = (
|
||||
'https://www.virustotal.com/vtapi/v2/file/report?'
|
||||
+ urllib.parse.urlencode(apikey)
|
||||
)
|
||||
r = requests.get(report_url, headers=headers, timeout=300)
|
||||
if r.status_code == 200:
|
||||
response = r.json()
|
||||
if response['response_code'] == 0:
|
||||
@ -749,9 +994,12 @@ def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
|
||||
json.dump(response, fp, indent=2, sort_keys=True)
|
||||
|
||||
if response.get('positives', 0) > 0:
|
||||
logging.warning(repofilename + ' has been flagged by virustotal '
|
||||
+ str(response['positives']) + ' times:'
|
||||
+ '\n\t' + response['permalink'])
|
||||
logging.warning(
|
||||
_('{path} has been flagged by virustotal {count} times:').format(
|
||||
path=repofilename, count=response['positives']
|
||||
),
|
||||
+'\n\t' + response['permalink'],
|
||||
)
|
||||
break
|
||||
if r.status_code == 204:
|
||||
logging.warning(_('virustotal.com is rate limiting, waiting to retry...'))
|
||||
@ -763,32 +1011,48 @@ def upload_apk_to_virustotal(virustotal_apikey, packageName, apkName, hash,
|
||||
size = os.path.getsize(repofilename)
|
||||
if size > 200000000:
|
||||
# VirusTotal API 200MB hard limit
|
||||
logging.error(_('{path} more than 200MB, manually upload: {url}')
|
||||
.format(path=repofilename, url=manual_url))
|
||||
logging.error(
|
||||
_('{path} more than 200MB, manually upload: {url}').format(
|
||||
path=repofilename, url=manual_url
|
||||
)
|
||||
)
|
||||
elif size > 32000000:
|
||||
# VirusTotal API requires fetching a URL to upload bigger files
|
||||
r = requests.get('https://www.virustotal.com/vtapi/v2/file/scan/upload_url?'
|
||||
+ urllib.parse.urlencode(data), headers=headers, timeout=300)
|
||||
query_url = (
|
||||
'https://www.virustotal.com/vtapi/v2/file/scan/upload_url?'
|
||||
+ urllib.parse.urlencode(apikey)
|
||||
)
|
||||
r = requests.get(query_url, headers=headers, timeout=300)
|
||||
if r.status_code == 200:
|
||||
upload_url = r.json().get('upload_url')
|
||||
elif r.status_code == 403:
|
||||
logging.error(_('VirusTotal API key cannot upload files larger than 32MB, '
|
||||
+ 'use {url} to upload {path}.')
|
||||
.format(path=repofilename, url=manual_url))
|
||||
logging.error(
|
||||
_(
|
||||
'VirusTotal API key cannot upload files larger than 32MB, '
|
||||
+ 'use {url} to upload {path}.'
|
||||
).format(path=repofilename, url=manual_url)
|
||||
)
|
||||
else:
|
||||
r.raise_for_status()
|
||||
else:
|
||||
upload_url = 'https://www.virustotal.com/vtapi/v2/file/scan'
|
||||
|
||||
if upload_url:
|
||||
logging.info(_('Uploading {apkfilename} to virustotal')
|
||||
.format(apkfilename=repofilename))
|
||||
files = {
|
||||
'file': (apkName, open(repofilename, 'rb'))
|
||||
}
|
||||
r = requests.post(upload_url, data=data, headers=headers, files=files, timeout=300)
|
||||
logging.debug(_('If this upload fails, try manually uploading to {url}')
|
||||
.format(url=manual_url))
|
||||
logging.info(
|
||||
_('Uploading {apkfilename} to virustotal').format(apkfilename=repofilename)
|
||||
)
|
||||
r = requests.post(
|
||||
upload_url,
|
||||
data=apikey,
|
||||
headers=headers,
|
||||
files={'file': (apkName, open(repofilename, 'rb'))},
|
||||
timeout=300,
|
||||
)
|
||||
logging.debug(
|
||||
_('If this upload fails, try manually uploading to {url}').format(
|
||||
url=manual_url
|
||||
)
|
||||
)
|
||||
r.raise_for_status()
|
||||
response = r.json()
|
||||
logging.info(response['verbose_msg'] + " " + response['permalink'])
|
||||
@ -813,8 +1077,7 @@ def push_binary_transparency(git_repo_path, git_remote):
|
||||
"""
|
||||
import git
|
||||
|
||||
logging.info(_('Pushing binary transparency log to {url}')
|
||||
.format(url=git_remote))
|
||||
logging.info(_('Pushing binary transparency log to {url}').format(url=git_remote))
|
||||
|
||||
if os.path.isdir(os.path.dirname(git_remote)):
|
||||
# from offline machine to thumbdrive
|
||||
@ -843,24 +1106,47 @@ def push_binary_transparency(git_repo_path, git_remote):
|
||||
origin.set_url(git_remote)
|
||||
else:
|
||||
origin = gitrepo.create_remote('origin', git_remote)
|
||||
origin.push(GIT_BRANCH)
|
||||
for _i in range(3):
|
||||
try:
|
||||
origin.push(GIT_BRANCH)
|
||||
except git.GitCommandError as e:
|
||||
logging.error(e)
|
||||
continue
|
||||
break
|
||||
else:
|
||||
raise FDroidException(_("Pushing to remote server failed!"))
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument("-i", "--identity-file", default=None,
|
||||
help=_("Specify an identity file to provide to SSH for rsyncing"))
|
||||
parser.add_argument("--local-copy-dir", default=None,
|
||||
help=_("Specify a local folder to sync the repo to"))
|
||||
parser.add_argument("--no-checksum", action="store_true", default=False,
|
||||
help=_("Don't use rsync checksums"))
|
||||
parser.add_argument("--no-keep-git-mirror-archive", action="store_true", default=False,
|
||||
help=_("If a git mirror gets to big, allow the archive to be deleted"))
|
||||
options = parser.parse_args()
|
||||
config = common.read_config(options)
|
||||
parser.add_argument(
|
||||
"-i",
|
||||
"--identity-file",
|
||||
default=None,
|
||||
help=_("Specify an identity file to provide to SSH for rsyncing"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--local-copy-dir",
|
||||
default=None,
|
||||
help=_("Specify a local folder to sync the repo to"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-checksum",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help=_("Don't use rsync checksums"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"--no-keep-git-mirror-archive",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help=_("If a git mirror gets to big, allow the archive to be deleted"),
|
||||
)
|
||||
options = common.parse_args(parser)
|
||||
config = common.read_config()
|
||||
|
||||
if config.get('nonstandardwebroot') is True:
|
||||
standardwebroot = False
|
||||
@ -879,17 +1165,23 @@ def main():
|
||||
logging.error(_('local_copy_dir must be directory, not a file!'))
|
||||
sys.exit(1)
|
||||
if not os.path.exists(os.path.dirname(fdroiddir)):
|
||||
logging.error(_('The root dir for local_copy_dir "{path}" does not exist!')
|
||||
.format(path=os.path.dirname(fdroiddir)))
|
||||
logging.error(
|
||||
_('The root dir for local_copy_dir "{path}" does not exist!').format(
|
||||
path=os.path.dirname(fdroiddir)
|
||||
)
|
||||
)
|
||||
sys.exit(1)
|
||||
if not os.path.isabs(fdroiddir):
|
||||
logging.error(_('local_copy_dir must be an absolute path!'))
|
||||
sys.exit(1)
|
||||
repobase = os.path.basename(fdroiddir)
|
||||
if standardwebroot and repobase != 'fdroid':
|
||||
logging.error(_('local_copy_dir does not end with "fdroid", '
|
||||
+ 'perhaps you meant: "{path}"')
|
||||
.format(path=fdroiddir + '/fdroid'))
|
||||
logging.error(
|
||||
_(
|
||||
'local_copy_dir does not end with "fdroid", '
|
||||
+ 'perhaps you meant: "{path}"'
|
||||
).format(path=fdroiddir + '/fdroid')
|
||||
)
|
||||
sys.exit(1)
|
||||
if local_copy_dir[-1] != '/':
|
||||
local_copy_dir += '/'
|
||||
@ -897,16 +1189,20 @@ def main():
|
||||
if not os.path.exists(fdroiddir):
|
||||
os.mkdir(fdroiddir)
|
||||
|
||||
if not config.get('awsbucket') \
|
||||
and not config.get('serverwebroot') \
|
||||
and not config.get('servergitmirrors') \
|
||||
and not config.get('androidobservatory') \
|
||||
and not config.get('binary_transparency_remote') \
|
||||
and not config.get('virustotal_apikey') \
|
||||
and local_copy_dir is None:
|
||||
logging.warning(_('No option set! Edit your config.yml to set at least one of these:')
|
||||
+ '\nserverwebroot, servergitmirrors, local_copy_dir, awsbucket, '
|
||||
+ 'virustotal_apikey, androidobservatory, or binary_transparency_remote')
|
||||
if (
|
||||
not config.get('awsbucket')
|
||||
and not config.get('serverwebroot')
|
||||
and not config.get('servergitmirrors')
|
||||
and not config.get('androidobservatory')
|
||||
and not config.get('binary_transparency_remote')
|
||||
and not config.get('virustotal_apikey')
|
||||
and local_copy_dir is None
|
||||
):
|
||||
logging.warning(
|
||||
_('No option set! Edit your config.yml to set at least one of these:')
|
||||
+ '\nserverwebroot, servergitmirrors, local_copy_dir, awsbucket, '
|
||||
+ 'virustotal_apikey, androidobservatory, or binary_transparency_remote'
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
repo_sections = ['repo']
|
||||
@ -917,8 +1213,10 @@ def main():
|
||||
if config['per_app_repos']:
|
||||
repo_sections += common.get_per_app_repos()
|
||||
|
||||
if os.path.isdir('unsigned') or (local_copy_dir is not None
|
||||
and os.path.isdir(os.path.join(local_copy_dir, 'unsigned'))):
|
||||
if os.path.isdir('unsigned') or (
|
||||
local_copy_dir is not None
|
||||
and os.path.isdir(os.path.join(local_copy_dir, 'unsigned'))
|
||||
):
|
||||
repo_sections.append('unsigned')
|
||||
|
||||
for repo_section in repo_sections:
|
||||
@ -935,7 +1233,7 @@ 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'):
|
||||
update_awsbucket(repo_section)
|
||||
update_awsbucket(repo_section, options.verbose, options.quiet)
|
||||
if config.get('androidobservatory'):
|
||||
upload_to_android_observatory(repo_section)
|
||||
if config.get('virustotal_apikey'):
|
||||
@ -943,8 +1241,7 @@ def main():
|
||||
|
||||
binary_transparency_remote = config.get('binary_transparency_remote')
|
||||
if binary_transparency_remote:
|
||||
push_binary_transparency(BINARY_TRANSPARENCY_DIR,
|
||||
binary_transparency_remote)
|
||||
push_binary_transparency(BINARY_TRANSPARENCY_DIR, binary_transparency_remote)
|
||||
|
||||
common.write_status_json(common.setup_status_output(start_timestamp))
|
||||
sys.exit(0)
|
||||
|
@ -28,7 +28,6 @@ from .common import FDroidPopen
|
||||
from .exception import FDroidException
|
||||
|
||||
config = None
|
||||
options = None
|
||||
start_timestamp = time.gmtime()
|
||||
|
||||
|
||||
@ -42,14 +41,14 @@ def status_update_json(signed):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
common.parse_args(parser)
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
repodirs = ['repo']
|
||||
if config['archive_older'] != 0:
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract application metadata from a source repository."""
|
||||
#
|
||||
# import_subcommand.py - part of the FDroid server tools
|
||||
# Copyright (C) 2010-13, Ciaran Gultnieks, ciaran@ciarang.com
|
||||
@ -30,6 +31,7 @@ import yaml
|
||||
from argparse import ArgumentParser
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
try:
|
||||
from yaml import CSafeLoader as SafeLoader
|
||||
@ -43,7 +45,6 @@ from .exception import FDroidException
|
||||
|
||||
|
||||
config = None
|
||||
options = None
|
||||
|
||||
|
||||
def handle_retree_error_on_windows(function, path, excinfo):
|
||||
@ -53,7 +54,20 @@ def handle_retree_error_on_windows(function, path, excinfo):
|
||||
function(path)
|
||||
|
||||
|
||||
def clone_to_tmp_dir(app):
|
||||
def clone_to_tmp_dir(app: metadata.App, rev=None) -> Path:
|
||||
"""Clone the source repository of an app to a temporary directory for further processing.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
app
|
||||
The App instance to clone the source of.
|
||||
|
||||
Returns
|
||||
-------
|
||||
tmp_dir
|
||||
The (temporary) directory the apps source has been cloned into.
|
||||
|
||||
"""
|
||||
tmp_dir = Path('tmp')
|
||||
tmp_dir.mkdir(exist_ok=True)
|
||||
|
||||
@ -62,12 +76,12 @@ def clone_to_tmp_dir(app):
|
||||
if tmp_dir.exists():
|
||||
shutil.rmtree(str(tmp_dir), onerror=handle_retree_error_on_windows)
|
||||
vcs = common.getvcs(app.RepoType, app.Repo, tmp_dir)
|
||||
vcs.gotorevision(options.rev)
|
||||
vcs.gotorevision(rev)
|
||||
|
||||
return tmp_dir
|
||||
|
||||
|
||||
def getrepofrompage(url):
|
||||
def getrepofrompage(url: str) -> tuple[Optional[str], str]:
|
||||
"""Get the repo type and address from the given web page.
|
||||
|
||||
The page is scanned in a rather naive manner for 'git clone xxxx',
|
||||
@ -75,6 +89,17 @@ def getrepofrompage(url):
|
||||
that's the information we want. Returns repotype, address, or
|
||||
None, reason
|
||||
|
||||
Parameters
|
||||
----------
|
||||
url
|
||||
The url to look for repository information at.
|
||||
|
||||
Returns
|
||||
-------
|
||||
repotype_or_none
|
||||
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)))
|
||||
@ -120,13 +145,29 @@ def getrepofrompage(url):
|
||||
return (None, _("No information found.") + page)
|
||||
|
||||
|
||||
def get_app_from_url(url):
|
||||
def get_app_from_url(url: str) -> metadata.App:
|
||||
"""Guess basic app metadata from the URL.
|
||||
|
||||
The URL must include a network hostname, unless it is an lp:,
|
||||
file:, or git/ssh URL. This throws ValueError on bad URLs to
|
||||
match urlparse().
|
||||
|
||||
Parameters
|
||||
----------
|
||||
url
|
||||
The URL to look to look for app metadata at.
|
||||
|
||||
Returns
|
||||
-------
|
||||
app
|
||||
App instance with the found metadata.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If the VCS type could not be determined.
|
||||
:exc:`ValueError`
|
||||
If the URL is invalid.
|
||||
"""
|
||||
parsed = urllib.parse.urlparse(url)
|
||||
invalid_url = False
|
||||
@ -183,7 +224,21 @@ def get_app_from_url(url):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
"""Extract app metadata and write it to a file.
|
||||
|
||||
The behaviour of this function is influenced by the configuration file as
|
||||
well as command line parameters.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.FDroidException`
|
||||
If the repository already has local metadata, no URL is specified and
|
||||
the current directory is not a Git repository, no application ID could
|
||||
be found, no Gradle project could be found or there is already metadata
|
||||
for the found application ID.
|
||||
|
||||
"""
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser()
|
||||
@ -201,10 +256,10 @@ def main():
|
||||
parser.add_argument("--rev", default=None,
|
||||
help=_("Allows a different revision (or git branch) to be specified for the initial import"))
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
apps = metadata.read_metadata()
|
||||
app = None
|
||||
@ -235,7 +290,7 @@ def main():
|
||||
write_local_file = True
|
||||
elif options.url:
|
||||
app = get_app_from_url(options.url)
|
||||
tmp_importer_dir = clone_to_tmp_dir(app)
|
||||
tmp_importer_dir = clone_to_tmp_dir(app, options.rev)
|
||||
git_repo = git.Repo(tmp_importer_dir)
|
||||
|
||||
if not options.omit_disable:
|
||||
|
@ -125,6 +125,13 @@ def make(apps, apks, repodir, archive):
|
||||
make_v2(sortedapps, apks, repodir, repodict, requestsdict,
|
||||
fdroid_signing_key_fingerprints, archive)
|
||||
make_website(sortedapps, repodir, repodict)
|
||||
make_altstore(
|
||||
sortedapps,
|
||||
apks,
|
||||
common.config,
|
||||
repodir,
|
||||
pretty=common.options.pretty,
|
||||
)
|
||||
|
||||
|
||||
def _should_file_be_generated(path, magic_string):
|
||||
@ -195,10 +202,10 @@ def make_website(apps, repodir, repodict):
|
||||
<kbd>
|
||||
{number_of_apps}
|
||||
</kbd>
|
||||
apps. To add it to your F-Droid client, scan the QR code (click it to enlarge) or use this URL:
|
||||
apps. To add it to your F-Droid app, scan the QR code (click it to enlarge) or use this link:
|
||||
</p>
|
||||
<p class="center" style="margin-top:.5em">
|
||||
<a href="{link_fingerprinted}">
|
||||
<a href="https://fdroid.link/#{link_fingerprinted}">
|
||||
<code style="color:#000000;font-weight:bold;">
|
||||
{link}
|
||||
</code>
|
||||
@ -640,7 +647,15 @@ def convert_version(version, app, repodir):
|
||||
if version["versionCode"] > app["CurrentVersionCode"]:
|
||||
ver[RELEASECHANNELS_CONFIG_NAME] = ["Beta"]
|
||||
|
||||
for build in app.get('Builds', []):
|
||||
builds = app.get("Builds", [])
|
||||
|
||||
if len(builds) > 0 and version["versionCode"] == builds[-1]["versionCode"]:
|
||||
if "localized" in app:
|
||||
localized = {k: v["whatsNew"] for k, v in app["localized"].items() if "whatsNew" in v}
|
||||
if localized:
|
||||
ver["whatsNew"] = localized
|
||||
|
||||
for build in builds:
|
||||
if build['versionCode'] == version['versionCode'] and "whatsNew" in build:
|
||||
ver["whatsNew"] = build["whatsNew"]
|
||||
break
|
||||
@ -1742,3 +1757,100 @@ def get_public_key_from_jar(jar):
|
||||
public_key_fingerprint = common.get_cert_fingerprint(public_key).replace(' ', '')
|
||||
|
||||
return public_key, public_key_fingerprint
|
||||
|
||||
|
||||
def make_altstore(apps, apks, config, repodir, pretty=False):
|
||||
"""Assemble altstore-index.json for iOS (.ipa) apps.
|
||||
|
||||
builds index files based on:
|
||||
https://faq.altstore.io/distribute-your-apps/make-a-source
|
||||
https://faq.altstore.io/distribute-your-apps/updating-apps
|
||||
"""
|
||||
if not any(Path(repodir).glob('*.ipa')):
|
||||
# no IPA files present in repo, nothing to do here, exiting early
|
||||
return
|
||||
|
||||
indent = 2 if pretty else None
|
||||
# for now alt-store support is english only
|
||||
for lang in ['en']:
|
||||
|
||||
# prepare minimal altstore index
|
||||
idx = {
|
||||
'name': config['repo_name'],
|
||||
"apps": [],
|
||||
"news": [],
|
||||
}
|
||||
|
||||
# add optional values if available
|
||||
# idx["subtitle"] F-Droid doesn't have a corresponding value
|
||||
if config.get("repo_description"):
|
||||
idx['description'] = config['repo_description']
|
||||
if (Path(repodir) / 'icons' / config['repo_icon']).exists():
|
||||
idx['iconURL'] = f"{config['repo_url']}/icons/{config['repo_icon']}"
|
||||
# idx["headerURL"] F-Droid doesn't have a corresponding value
|
||||
# idx["website"] F-Droid doesn't have a corresponding value
|
||||
# idx["patreonURL"] F-Droid doesn't have a corresponding value
|
||||
# idx["tintColor"] F-Droid doesn't have a corresponding value
|
||||
# idx["featuredApps"] = [] maybe mappable to F-Droids what's new?
|
||||
|
||||
# assemble "apps"
|
||||
for packageName, app in apps.items():
|
||||
app_name = app.get("Name") or app.get("AutoName")
|
||||
icon_url = "{}{}".format(
|
||||
config['repo_url'],
|
||||
app.get('iconv2', {}).get(DEFAULT_LOCALE, {}).get('name', ''),
|
||||
)
|
||||
screenshot_urls = [
|
||||
"{}{}".format(config["repo_url"], s["name"])
|
||||
for s in app.get("screenshots", {})
|
||||
.get("phone", {})
|
||||
.get(DEFAULT_LOCALE, {})
|
||||
]
|
||||
|
||||
a = {
|
||||
"name": app_name,
|
||||
'bundleIdentifier': packageName,
|
||||
'developerName': app.get("AuthorName") or f"{app_name} team",
|
||||
'iconURL': icon_url,
|
||||
"localizedDescription": "",
|
||||
'appPermissions': {
|
||||
"entitlements": set(),
|
||||
"privacy": {},
|
||||
},
|
||||
'versions': [],
|
||||
}
|
||||
|
||||
if app.get('summary'):
|
||||
a['subtitle'] = app['summary']
|
||||
# a["tintColor"] F-Droid doesn't have a corresponding value
|
||||
# a["category"] F-Droid doesn't have a corresponding value
|
||||
# a['patreon'] F-Droid doesn't have a corresponding value
|
||||
a["screenshots"] = screenshot_urls
|
||||
|
||||
# populate 'versions'
|
||||
for apk in apks:
|
||||
last4 = apk.get('apkName', '').lower()[-4:]
|
||||
if apk['packageName'] == packageName and last4 == '.ipa':
|
||||
v = {
|
||||
"version": apk["versionName"],
|
||||
"date": apk["added"].isoformat(),
|
||||
"downloadURL": f"{config['repo_url']}/{apk['apkName']}",
|
||||
"size": apk['size'],
|
||||
}
|
||||
|
||||
# v['localizedDescription'] maybe what's new text?
|
||||
v["minOSVersion"] = apk["ipa_MinimumOSVersion"]
|
||||
v["maxOSVersion"] = apk["ipa_DTPlatformVersion"]
|
||||
|
||||
# writing this spot here has the effect that always the
|
||||
# permissions of the latest processed permissions list used
|
||||
a['appPermissions']['privacy'] = apk['ipa_permissions']
|
||||
a['appPermissions']['entitlements'] = list(apk['ipa_entitlements'])
|
||||
|
||||
a['versions'].append(v)
|
||||
|
||||
if len(a['versions']) > 0:
|
||||
idx['apps'].append(a)
|
||||
|
||||
with open(Path(repodir) / 'altstore-index.json', "w", encoding="utf-8") as f:
|
||||
json.dump(idx, f, indent=indent)
|
||||
|
@ -32,7 +32,6 @@ from . import common
|
||||
from .exception import FDroidException
|
||||
|
||||
config = {}
|
||||
options = None
|
||||
|
||||
|
||||
def disable_in_config(key, value):
|
||||
@ -49,7 +48,7 @@ def disable_in_config(key, value):
|
||||
|
||||
|
||||
def main():
|
||||
global options, config
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser()
|
||||
@ -81,7 +80,9 @@ def main():
|
||||
default=False,
|
||||
help=_("Do not prompt for Android SDK path, just fail"),
|
||||
)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
|
||||
common.set_console_logging(options.verbose)
|
||||
|
||||
fdroiddir = os.getcwd()
|
||||
test_config = dict()
|
||||
@ -169,7 +170,7 @@ def main():
|
||||
raise FDroidException('Repository already exists.')
|
||||
|
||||
# now that we have a local config.yml, read configuration...
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
# the NDK is optional and there may be multiple versions of it, so it's
|
||||
# left for the user to configure
|
||||
@ -280,14 +281,19 @@ def main():
|
||||
msg += '\n\n'
|
||||
msg += (
|
||||
_(
|
||||
'''To complete the setup, add your APKs to "%s"
|
||||
"""To complete the setup, add your APKs to "%s"
|
||||
then run "fdroid update -c; fdroid update". You might also want to edit
|
||||
"config.yml" to set the URL, repo name, and more. You should also set up
|
||||
a signing key (a temporary one might have been automatically generated).
|
||||
|
||||
For more info: https://f-droid.org/docs/Setup_an_F-Droid_App_Repo
|
||||
and https://f-droid.org/docs/Signing_Process'''
|
||||
and https://f-droid.org/docs/Signing_Process"""
|
||||
)
|
||||
% os.path.join(fdroiddir, 'repo')
|
||||
)
|
||||
logging.info(msg)
|
||||
if not options.quiet:
|
||||
# normally, INFO is only shown with --verbose, but show this unless --quiet
|
||||
logger = logging.getLogger()
|
||||
logger.setLevel(logging.INFO)
|
||||
logger.info(msg)
|
||||
logging.shutdown()
|
||||
|
@ -28,7 +28,6 @@ from . import common
|
||||
from .common import SdkToolsPopen
|
||||
from .exception import FDroidException
|
||||
|
||||
options = None
|
||||
config = None
|
||||
|
||||
|
||||
@ -44,20 +43,36 @@ def devices():
|
||||
|
||||
|
||||
def main():
|
||||
global options, config
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser(usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]")
|
||||
parser = ArgumentParser(
|
||||
usage="%(prog)s [options] [APPID[:VERCODE] [APPID[:VERCODE] ...]]"
|
||||
)
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument("appid", nargs='*', help=_("application ID with optional versionCode in the form APPID[:VERCODE]"))
|
||||
parser.add_argument("-a", "--all", action="store_true", default=False,
|
||||
help=_("Install all signed applications available"))
|
||||
options = parser.parse_args()
|
||||
parser.add_argument(
|
||||
"appid",
|
||||
nargs='*',
|
||||
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
|
||||
)
|
||||
parser.add_argument(
|
||||
"-a",
|
||||
"--all",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help=_("Install all signed applications available"),
|
||||
)
|
||||
options = common.parse_args(parser)
|
||||
|
||||
common.set_console_logging(options.verbose)
|
||||
|
||||
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")
|
||||
parser.error(
|
||||
_("option %s: If you really want to install all the signed apps, use --all")
|
||||
% "all"
|
||||
)
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
output_dir = 'repo'
|
||||
if not os.path.isdir(output_dir):
|
||||
@ -65,14 +80,12 @@ def main():
|
||||
sys.exit(0)
|
||||
|
||||
if options.appid:
|
||||
|
||||
vercodes = common.read_pkg_args(options.appid, True)
|
||||
common.get_metadata_files(vercodes) # only check appids
|
||||
common.get_metadata_files(vercodes) # only check appids
|
||||
apks = {appid: None for appid in vercodes}
|
||||
|
||||
# Get the signed APK with the highest vercode
|
||||
for apkfile in sorted(glob.glob(os.path.join(output_dir, '*.apk'))):
|
||||
|
||||
try:
|
||||
appid, vercode = common.publishednameinfo(apkfile)
|
||||
except FDroidException:
|
||||
@ -88,9 +101,10 @@ def main():
|
||||
raise FDroidException(_("No signed APK available for %s") % appid)
|
||||
|
||||
else:
|
||||
|
||||
apks = {common.publishednameinfo(apkfile)[0]: apkfile for apkfile in
|
||||
sorted(glob.glob(os.path.join(output_dir, '*.apk')))}
|
||||
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
|
||||
@ -99,7 +113,11 @@ def main():
|
||||
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))
|
||||
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():
|
||||
@ -109,11 +127,17 @@ def main():
|
||||
continue
|
||||
|
||||
if fail == "INSTALL_FAILED_ALREADY_EXISTS":
|
||||
logging.warning(_('"{apkfilename}" is already installed on {dev}.')
|
||||
.format(apkfilename=apk, dev=dev))
|
||||
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))
|
||||
raise FDroidException(
|
||||
_("Failed to install '{apkfilename}' on {dev}: {error}").format(
|
||||
apkfilename=apk, dev=dev, error=fail
|
||||
)
|
||||
)
|
||||
|
||||
logging.info('\n' + _('Finished'))
|
||||
|
||||
|
@ -31,7 +31,6 @@ from . import metadata
|
||||
from . import rewritemeta
|
||||
|
||||
config = None
|
||||
options = None
|
||||
|
||||
|
||||
def enforce_https(domain):
|
||||
@ -214,7 +213,7 @@ regex_checks = {
|
||||
_("Forbidden HTML tags"),
|
||||
),
|
||||
(
|
||||
re.compile(r'''.*\s+src=["']javascript:.*'''),
|
||||
re.compile(r""".*\s+src=["']javascript:.*"""),
|
||||
_("Javascript in HTML src attributes"),
|
||||
),
|
||||
],
|
||||
@ -378,8 +377,7 @@ def check_checkupdates_ran(app):
|
||||
if filling_ucms.match(app.UpdateCheckMode):
|
||||
if not app.AutoName and not app.CurrentVersion and app.CurrentVersionCode == 0:
|
||||
yield _(
|
||||
"UpdateCheckMode is set but it looks like"
|
||||
"checkupdates hasn't been run yet"
|
||||
"UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
)
|
||||
|
||||
|
||||
@ -460,9 +458,12 @@ def check_builds(app):
|
||||
"Branch '{branch}' used as commit in srclib '{srclib}'"
|
||||
).format(branch=s, srclib=srclib)
|
||||
else:
|
||||
yield _(
|
||||
'srclibs missing name and/or @'
|
||||
) + ' (srclibs: ' + srclib + ')'
|
||||
yield (
|
||||
_('srclibs missing name and/or @')
|
||||
+ ' (srclibs: '
|
||||
+ srclib
|
||||
+ ')'
|
||||
)
|
||||
for key in build.keys():
|
||||
if key not in supported_flags:
|
||||
yield _('%s is not an accepted build field') % key
|
||||
@ -501,7 +502,7 @@ def check_files_dir(app):
|
||||
|
||||
|
||||
def check_format(app):
|
||||
if options.format and not rewritemeta.proper_format(app):
|
||||
if common.options.format and not rewritemeta.proper_format(app):
|
||||
yield _("Run rewritemeta to fix formatting")
|
||||
|
||||
|
||||
@ -723,7 +724,13 @@ def check_updates_ucm_http_aum_pattern(app): # noqa: D403
|
||||
|
||||
|
||||
def check_certificate_pinned_binaries(app):
|
||||
if len(app.get('AllowedAPKSigningKeys')) > 0:
|
||||
keys = app.get('AllowedAPKSigningKeys')
|
||||
known_keys = common.config.get('apk_signing_key_block_list', [])
|
||||
if keys:
|
||||
if known_keys:
|
||||
for key in keys:
|
||||
if key in known_keys:
|
||||
yield _('Known debug key is used in AllowedAPKSigningKeys: ') + key
|
||||
return
|
||||
if app.get('Binaries') is not None:
|
||||
yield _(
|
||||
@ -779,7 +786,7 @@ def lint_config(arg):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser()
|
||||
@ -804,10 +811,10 @@ def main():
|
||||
"appid", nargs='*', help=_("application ID of file to operate on")
|
||||
)
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
load_antiFeatures_config()
|
||||
load_categories_config()
|
||||
|
||||
|
@ -15,11 +15,9 @@ from . import common
|
||||
from . import index
|
||||
from . import update
|
||||
|
||||
options = None
|
||||
|
||||
|
||||
def _run_wget(path, urls):
|
||||
if options.verbose:
|
||||
def _run_wget(path, urls, verbose=False):
|
||||
if verbose:
|
||||
verbose = '--verbose'
|
||||
else:
|
||||
verbose = '--no-verbose'
|
||||
@ -48,8 +46,6 @@ def _run_wget(path, urls):
|
||||
|
||||
|
||||
def main():
|
||||
global options
|
||||
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument(
|
||||
@ -93,7 +89,9 @@ def main():
|
||||
parser.add_argument(
|
||||
"--output-dir", default=None, help=_("The directory to write the mirror to")
|
||||
)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
|
||||
common.set_console_logging(options.verbose)
|
||||
|
||||
if options.all:
|
||||
options.archive = True
|
||||
@ -117,7 +115,7 @@ def main():
|
||||
)
|
||||
|
||||
if fingerprint:
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
if not ('jarsigner' in config or 'apksigner' in config):
|
||||
logging.error(
|
||||
_('Java JDK not found! Install in standard location or set java_paths!')
|
||||
@ -152,10 +150,10 @@ def main():
|
||||
if hostname == 'f-droid.org' or (
|
||||
ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2]
|
||||
):
|
||||
print(
|
||||
logging.error(
|
||||
_(
|
||||
'ERROR: this command should never be used to mirror f-droid.org!\n'
|
||||
'A full mirror of f-droid.org requires more than 200GB.'
|
||||
'This command should never be used to mirror f-droid.org! '
|
||||
'A full copy requires more than 600GB.'
|
||||
)
|
||||
)
|
||||
sys.exit(1)
|
||||
@ -227,7 +225,7 @@ def main():
|
||||
_append_to_url_path(section, f[:-4] + '.log.gz')
|
||||
)
|
||||
|
||||
_run_wget(sectiondir, urls)
|
||||
_run_wget(sectiondir, urls, options.verbose)
|
||||
|
||||
for app in data['apps']:
|
||||
localized = app.get('localized')
|
||||
@ -240,7 +238,7 @@ def main():
|
||||
if f:
|
||||
filepath_tuple = components + (f,)
|
||||
urls.append(_append_to_url_path(*filepath_tuple))
|
||||
_run_wget(os.path.join(basedir, *components), urls)
|
||||
_run_wget(os.path.join(basedir, *components), urls, options.verbose)
|
||||
for k in update.SCREENSHOT_DIRS:
|
||||
urls = []
|
||||
filelist = d.get(k)
|
||||
@ -249,7 +247,11 @@ def main():
|
||||
for f in filelist:
|
||||
filepath_tuple = components + (f,)
|
||||
urls.append(_append_to_url_path(*filepath_tuple))
|
||||
_run_wget(os.path.join(basedir, *components), urls)
|
||||
_run_wget(
|
||||
os.path.join(basedir, *components),
|
||||
urls,
|
||||
options.verbose,
|
||||
)
|
||||
|
||||
urls = dict()
|
||||
for app in data['apps']:
|
||||
@ -266,7 +268,12 @@ def main():
|
||||
urls[icondir].append(url)
|
||||
|
||||
for icondir in icondirs:
|
||||
_run_wget(os.path.join(basedir, section, icondir), urls[icondir])
|
||||
if icondir in urls:
|
||||
_run_wget(
|
||||
os.path.join(basedir, section, icondir),
|
||||
urls[icondir],
|
||||
options.verbose,
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
@ -29,12 +29,20 @@ HEADERS = {'User-Agent': 'F-Droid'}
|
||||
|
||||
|
||||
def download_file(url, local_filename=None, dldir='tmp', retries=3, backoff_factor=0.1):
|
||||
"""Try hard to download the file, including retrying on failures.
|
||||
|
||||
This has two retry cycles, one inside of the requests session, the
|
||||
other provided by this function. The requests retry logic applies
|
||||
to failed DNS lookups, socket connections and connection timeouts,
|
||||
never to requests where data has made it to the server. This
|
||||
handles ChunkedEncodingError during transfer in its own retry
|
||||
loop. This can result in more retries than are specified in the
|
||||
retries parameter.
|
||||
|
||||
"""
|
||||
filename = urllib.parse.urlparse(url).path.split('/')[-1]
|
||||
if local_filename is None:
|
||||
local_filename = os.path.join(dldir, filename)
|
||||
# Retry applies to failed DNS lookups, socket connections and connection
|
||||
# timeouts, never to requests where data has made it to the server; so we
|
||||
# handle ChunkedEncodingError during transfer ourselves.
|
||||
for i in range(retries + 1):
|
||||
if retries:
|
||||
max_retries = Retry(total=retries - i, backoff_factor=backoff_factor)
|
||||
|
@ -1,4 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Set up an app build for a nightly build repo."""
|
||||
#
|
||||
# nightly.py - part of the FDroid server tools
|
||||
# Copyright (C) 2017 Hans-Christoph Steiner <hans@eds.org>
|
||||
@ -32,6 +33,7 @@ import tempfile
|
||||
import yaml
|
||||
from urllib.parse import urlparse
|
||||
from argparse import ArgumentParser
|
||||
from typing import Optional
|
||||
|
||||
from . import _
|
||||
from . import common
|
||||
@ -48,12 +50,38 @@ DISTINGUISHED_NAME = 'CN=Android Debug,O=Android,C=US'
|
||||
NIGHTLY = '-nightly'
|
||||
|
||||
|
||||
def _get_keystore_secret_var(keystore):
|
||||
def _get_keystore_secret_var(keystore: str) -> str:
|
||||
"""Get keystore secret as base64.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
keystore
|
||||
The path of the keystore.
|
||||
|
||||
Returns
|
||||
-------
|
||||
base64_secret
|
||||
The keystore secret as base64 string.
|
||||
"""
|
||||
with open(keystore, 'rb') as fp:
|
||||
return base64.standard_b64encode(fp.read()).decode('ascii')
|
||||
|
||||
|
||||
def _ssh_key_from_debug_keystore(keystore=None):
|
||||
def _ssh_key_from_debug_keystore(keystore: Optional[str] = None) -> str:
|
||||
"""Convert a debug keystore to an SSH private key.
|
||||
|
||||
This leaves the original keystore file in place.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
keystore
|
||||
The keystore to convert to a SSH private key.
|
||||
|
||||
Returns
|
||||
-------
|
||||
key_path
|
||||
The SSH private key file path in the temporary directory.
|
||||
"""
|
||||
if keystore is None:
|
||||
# set this here so it can be overridden in the tests
|
||||
# TODO convert this to a class to get rid of this nonsense
|
||||
@ -148,7 +176,23 @@ def _ssh_key_from_debug_keystore(keystore=None):
|
||||
return ssh_private_key_file
|
||||
|
||||
|
||||
def get_repo_base_url(clone_url, repo_git_base, force_type=None):
|
||||
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
|
||||
----------
|
||||
clone_url
|
||||
The URL to clone the Git repository.
|
||||
repo_git_base
|
||||
The project path of the Git repository at the Git forge.
|
||||
force_type
|
||||
The Git forge of the project.
|
||||
|
||||
Returns
|
||||
-------
|
||||
repo_base_url
|
||||
The base URL of the F-Droid repository.
|
||||
"""
|
||||
if force_type is None:
|
||||
force_type = urlparse(clone_url).netloc
|
||||
if force_type == 'gitlab.com':
|
||||
@ -160,6 +204,17 @@ def get_repo_base_url(clone_url, repo_git_base, force_type=None):
|
||||
|
||||
|
||||
def main():
|
||||
"""Deploy to F-Droid repository or generate SSH private key from keystore.
|
||||
|
||||
The behaviour of this function is influenced by the configuration file as
|
||||
well as command line parameters.
|
||||
|
||||
Raises
|
||||
------
|
||||
:exc:`~fdroidserver.exception.VCSException`
|
||||
If the nightly Git repository could not be cloned during an attempt to
|
||||
deploy.
|
||||
"""
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument(
|
||||
@ -204,8 +259,7 @@ def main():
|
||||
help=_("Set maximum releases in repo before older ones are archived"),
|
||||
)
|
||||
# TODO add --with-btlog
|
||||
options = parser.parse_args()
|
||||
common.options = options
|
||||
options = common.parse_args(parser)
|
||||
|
||||
# force a tighter umask since this writes private key material
|
||||
umask = os.umask(0o077)
|
||||
@ -306,7 +360,10 @@ def main():
|
||||
readme = '''
|
||||
# {repo_git_base}
|
||||
|
||||
[![{repo_url}]({repo_url}/icons/icon.png)]({repo_url})
|
||||
This is an app repository for nightly versions.
|
||||
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,
|
||||
@ -370,7 +427,7 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
|
||||
with open('config.yml', 'w') as fp:
|
||||
yaml.dump(config, fp, default_flow_style=False)
|
||||
os.chmod('config.yml', 0o600)
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
common.assert_config_keystore(config)
|
||||
|
||||
for root, dirs, files in os.walk(cibase):
|
||||
|
@ -18,6 +18,16 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""Sign APKs using keys or via reproducible builds signature copying.
|
||||
|
||||
This command takes unsigned APKs and signs them. It looks for
|
||||
unsigned APKs in the unsigned/ directory and puts successfully signed
|
||||
APKs into the repo/ directory. The default is to run in a kind of
|
||||
batch mode, where it will only quit on certain kinds of errors. It
|
||||
mostly reports success by moving an APK from unsigned/ to repo/
|
||||
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
@ -39,7 +49,6 @@ from .common import FDroidPopen
|
||||
from .exception import BuildException, FDroidException
|
||||
|
||||
config = None
|
||||
options = None
|
||||
start_timestamp = time.gmtime()
|
||||
|
||||
|
||||
@ -259,23 +268,30 @@ def create_key_if_not_existing(keyalias):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser(
|
||||
usage="%(prog)s [options] " "[APPID[:VERCODE] [APPID[:VERCODE] ...]]"
|
||||
)
|
||||
common.setup_global_opts(parser)
|
||||
parser.add_argument(
|
||||
"-e",
|
||||
"--error-on-failed",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help=_("When signing or verifying fails, exit with an error code."),
|
||||
)
|
||||
parser.add_argument(
|
||||
"appid",
|
||||
nargs='*',
|
||||
help=_("application ID with optional versionCode in the form APPID[:VERCODE]"),
|
||||
)
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
if not ('jarsigner' in config and 'keytool' in config):
|
||||
logging.critical(
|
||||
@ -322,6 +338,7 @@ def main():
|
||||
).format(len(allapps), len(allaliases))
|
||||
)
|
||||
|
||||
failed = 0
|
||||
# Process any APKs or ZIPs that are waiting to be signed...
|
||||
for apkfile in sorted(
|
||||
glob.glob(os.path.join(unsigned_dir, '*.apk'))
|
||||
@ -364,12 +381,14 @@ def main():
|
||||
if not os.path.isfile(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))
|
||||
failed += 1
|
||||
else:
|
||||
# Success! So move the downloaded file to the repo, and remove
|
||||
# our built version.
|
||||
@ -415,6 +434,7 @@ def main():
|
||||
os.remove(devsignedtmp)
|
||||
logging.error('...verification failed - skipping: %s', devsigned)
|
||||
skipsigning = True
|
||||
failed += 1
|
||||
|
||||
# Now we sign with the F-Droid key.
|
||||
if not skipsigning:
|
||||
@ -444,6 +464,11 @@ def main():
|
||||
status_update_json(generated_keys, signed_apks)
|
||||
logging.info('published list signing-key fingerprints')
|
||||
|
||||
if failed:
|
||||
logging.error(_('%d APKs failed to be signed or verified!') % failed)
|
||||
if options.error_on_failed:
|
||||
sys.exit(failed)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
@ -20,8 +20,6 @@ from argparse import ArgumentParser
|
||||
from . import common
|
||||
from . import metadata
|
||||
|
||||
options = None
|
||||
|
||||
|
||||
def main():
|
||||
parser = ArgumentParser()
|
||||
@ -29,7 +27,7 @@ def main():
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
metadata.warnings_action = options.W
|
||||
common.read_config(None)
|
||||
common.read_config()
|
||||
|
||||
metadata.read_metadata()
|
||||
|
||||
|
@ -29,7 +29,6 @@ from . import common
|
||||
from . import metadata
|
||||
|
||||
config = None
|
||||
options = None
|
||||
|
||||
|
||||
def proper_format(app):
|
||||
@ -62,7 +61,7 @@ def remove_blank_flags_from_builds(builds):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
@ -77,10 +76,10 @@ def main():
|
||||
"appid", nargs='*', help=_("application ID of file to operate on")
|
||||
)
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
# Get all apps...
|
||||
allapps = metadata.read_metadata(options.appid)
|
||||
|
@ -40,8 +40,6 @@ from . import metadata
|
||||
from .exception import BuildException, VCSException, ConfigurationException
|
||||
from . import scanner
|
||||
|
||||
options = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class MessageStore:
|
||||
@ -50,7 +48,7 @@ class MessageStore:
|
||||
errors: list = field(default_factory=list)
|
||||
|
||||
|
||||
MAVEN_URL_REGEX = re.compile(r"""\smaven\s*(?:{.*?(?:setUrl|url)|\((?:url)?)\s*=?\s*(?:uri|Uri\.create\()?\(?\s*["']?([^\s"']+)["']?[^})]*[)}]""",
|
||||
MAVEN_URL_REGEX = re.compile(r"""\smaven\s*(?:{.*?(?:setUrl|url)|\(\s*(?:url)?)\s*=?\s*(?:uri|URI|Uri\.create)?\(?\s*["']?([^\s"']+)["']?[^})]*[)}]""",
|
||||
re.DOTALL)
|
||||
|
||||
|
||||
@ -62,13 +60,14 @@ class ExitCode(IntEnum):
|
||||
|
||||
|
||||
def get_gradle_compile_commands(build):
|
||||
compileCommands = ['compile',
|
||||
'provided',
|
||||
compileCommands = ['api',
|
||||
'apk',
|
||||
'implementation',
|
||||
'classpath',
|
||||
'api',
|
||||
'compile',
|
||||
'compileOnly',
|
||||
'id',
|
||||
'implementation',
|
||||
'provided',
|
||||
'runtimeOnly']
|
||||
buildTypes = ['', 'release']
|
||||
flavors = ['']
|
||||
@ -332,8 +331,9 @@ class ScannerTool:
|
||||
|
||||
self.scanner_data_lookup()
|
||||
|
||||
config = common.get_config()
|
||||
if (options and options.refresh_scanner) or config.get('refresh_scanner'):
|
||||
options = common.get_options()
|
||||
options_refresh_scanner = options and options.refresh_scanner
|
||||
if options_refresh_scanner or common.get_config().get('refresh_scanner'):
|
||||
self.refresh()
|
||||
|
||||
self.load()
|
||||
@ -589,6 +589,7 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None):
|
||||
-------
|
||||
0 if the problem was ignored/deleted/is only a warning, 1 otherwise
|
||||
"""
|
||||
options = common.get_options()
|
||||
if toignore(path_in_build_dir):
|
||||
return ignoreproblem(what, path_in_build_dir, json_per_build)
|
||||
if todelete(path_in_build_dir):
|
||||
@ -776,9 +777,6 @@ def scan_source(build_dir, build=metadata.Build(), json_per_build=None):
|
||||
|
||||
|
||||
def main():
|
||||
global options
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser(
|
||||
usage="%(prog)s [options] [(APPID[:VERCODE] | path/to.apk) ...]"
|
||||
)
|
||||
@ -793,7 +791,7 @@ def main():
|
||||
parser.add_argument("-e", "--exit-code", action="store_true", default=False,
|
||||
help=_("Exit with a non-zero code if problems were found"))
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
json_output = dict()
|
||||
@ -804,7 +802,7 @@ def main():
|
||||
logging.getLogger().setLevel(logging.ERROR)
|
||||
|
||||
# initialize/load configuration values
|
||||
common.get_config(opts=options)
|
||||
common.get_config()
|
||||
|
||||
probcount = 0
|
||||
|
||||
|
@ -103,9 +103,8 @@ def main():
|
||||
"APK", nargs='*', help=_("signed APK, either a file-path or HTTPS URL.")
|
||||
)
|
||||
parser.add_argument("--no-check-https", action="store_true", default=False)
|
||||
options = parser.parse_args()
|
||||
|
||||
# Read config.py...
|
||||
common.read_config(options)
|
||||
options = common.parse_args(parser)
|
||||
common.set_console_logging(options.verbose)
|
||||
common.read_config()
|
||||
|
||||
extract(options)
|
||||
|
@ -29,7 +29,6 @@ from . import metadata
|
||||
from .exception import FDroidException
|
||||
|
||||
config = None
|
||||
options = None
|
||||
start_timestamp = time.gmtime()
|
||||
|
||||
|
||||
@ -175,13 +174,13 @@ def status_update_json(signed):
|
||||
|
||||
|
||||
def main():
|
||||
global config, options
|
||||
global config
|
||||
|
||||
parser = ArgumentParser()
|
||||
common.setup_global_opts(parser)
|
||||
options = parser.parse_args()
|
||||
common.parse_args(parser)
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
if 'jarsigner' not in config:
|
||||
raise FDroidException(
|
||||
|
@ -34,6 +34,7 @@ import json
|
||||
import time
|
||||
import yaml
|
||||
import copy
|
||||
import asn1crypto.cms
|
||||
import defusedxml.ElementTree as ElementTree
|
||||
from datetime import datetime, timezone
|
||||
from argparse import ArgumentParser
|
||||
@ -544,25 +545,105 @@ def version_string_to_int(version):
|
||||
return major * 10**12 + minor * 10**6 + patch
|
||||
|
||||
|
||||
# iOS app permissions, source:
|
||||
# https://developer.apple.com/documentation/bundleresources/information_property_list/protected_resources
|
||||
IPA_PERMISSIONS = [
|
||||
"NSBluetoothAlwaysUsageDescription",
|
||||
"NSBluetoothPeripheralUsageDescription",
|
||||
"NSCalendarsFullAccessUsageDescription",
|
||||
"NSCalendarsWriteOnlyAccessUsageDescription",
|
||||
"NSRemindersFullAccessUsageDescription",
|
||||
"NSCameraUsageDescription",
|
||||
"NSMicrophoneUsageDescription",
|
||||
"NSContactsUsageDescription",
|
||||
"NSFaceIDUsageDescription",
|
||||
"NSDesktopFolderUsageDescription",
|
||||
"NSDocumentsFolderUsageDescription",
|
||||
"NSDownloadsFolderUsageDescription",
|
||||
"NSNetworkVolumesUsageDescription",
|
||||
"NSNetworkVolumesUsageDescription",
|
||||
"NSRemovableVolumesUsageDescription",
|
||||
"NSRemovableVolumesUsageDescription",
|
||||
"NSFileProviderDomainUsageDescription",
|
||||
"NSGKFriendListUsageDescription",
|
||||
"NSHealthClinicalHealthRecordsShareUsageDescription",
|
||||
"NSHealthShareUsageDescription",
|
||||
"NSHealthUpdateUsageDescription",
|
||||
"NSHomeKitUsageDescription",
|
||||
"NSLocationAlwaysAndWhenInUseUsageDescription",
|
||||
"NSLocationUsageDescription",
|
||||
"NSLocationWhenInUseUsageDescription",
|
||||
"NSLocationAlwaysUsageDescription",
|
||||
"NSAppleMusicUsageDescription",
|
||||
"NSMotionUsageDescription",
|
||||
"NSFallDetectionUsageDescription",
|
||||
"NSLocalNetworkUsageDescription",
|
||||
"NSNearbyInteractionUsageDescription",
|
||||
"NSNearbyInteractionAllowOnceUsageDescription",
|
||||
"NFCReaderUsageDescription",
|
||||
"NSPhotoLibraryAddUsageDescription",
|
||||
"NSPhotoLibraryUsageDescription",
|
||||
"NSAppDataUsageDescription",
|
||||
"NSUserTrackingUsageDescription",
|
||||
"NSAppleEventsUsageDescription",
|
||||
"NSSystemAdministrationUsageDescription",
|
||||
"NSSensorKitUsageDescription",
|
||||
"NSSiriUsageDescription",
|
||||
"NSSpeechRecognitionUsageDescription",
|
||||
"NSVideoSubscriberAccountUsageDescription",
|
||||
"NSWorldSensingUsageDescription",
|
||||
"NSHandsTrackingUsageDescription",
|
||||
"NSIdentityUsageDescription",
|
||||
"NSCalendarsUsageDescription",
|
||||
"NSRemindersUsageDescription",
|
||||
]
|
||||
|
||||
|
||||
def parse_ipa(ipa_path, file_size, sha256):
|
||||
from biplist import readPlist
|
||||
import biplist
|
||||
|
||||
ipa = {
|
||||
"apkName": os.path.basename(ipa_path),
|
||||
"hash": sha256,
|
||||
"hashType": "sha256",
|
||||
"size": file_size,
|
||||
"ipa_entitlements": set(),
|
||||
"ipa_permissions": {},
|
||||
}
|
||||
|
||||
with zipfile.ZipFile(ipa_path) as ipa_zip:
|
||||
for info in ipa_zip.infolist():
|
||||
if re.match("Payload/[^/]*.app/Info.plist", info.filename):
|
||||
with ipa_zip.open(info) as plist_file:
|
||||
plist = readPlist(plist_file)
|
||||
plist = biplist.readPlist(plist_file)
|
||||
ipa["name"] = plist['CFBundleName']
|
||||
ipa["packageName"] = plist["CFBundleIdentifier"]
|
||||
# https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring
|
||||
ipa["versionCode"] = version_string_to_int(plist["CFBundleShortVersionString"])
|
||||
ipa["versionName"] = plist["CFBundleShortVersionString"]
|
||||
ipa["ipa_MinimumOSVersion"] = plist['MinimumOSVersion']
|
||||
ipa["ipa_DTPlatformVersion"] = plist['DTPlatformVersion']
|
||||
for ipap in IPA_PERMISSIONS:
|
||||
if ipap in plist:
|
||||
ipa["ipa_permissions"][ipap] = str(plist[ipap])
|
||||
if info.filename.endswith("/embedded.mobileprovision"):
|
||||
print("parsing", info.filename)
|
||||
with ipa_zip.open(info) as mopro_file:
|
||||
mopro_content_info = asn1crypto.cms.ContentInfo.load(
|
||||
mopro_file.read()
|
||||
)
|
||||
mopro_payload_info = mopro_content_info['content']
|
||||
mopro_payload = mopro_payload_info['encap_content_info'][
|
||||
'content'
|
||||
].native
|
||||
mopro = biplist.readPlistFromString(mopro_payload)
|
||||
# https://faq.altstore.io/distribute-your-apps/make-a-source#entitlements-array-of-strings
|
||||
for entitlement in mopro.get('Entitlements', {}).keys():
|
||||
if entitlement not in [
|
||||
"com.app.developer.team-identifier",
|
||||
'application-identifier'
|
||||
]:
|
||||
ipa["ipa_entitlements"].add(entitlement)
|
||||
return ipa
|
||||
|
||||
|
||||
@ -592,8 +673,7 @@ def scan_repo_for_ipas(apkcache, repodir, knownapks):
|
||||
|
||||
file_size = os.stat(ipa_path).st_size
|
||||
if file_size == 0:
|
||||
raise FDroidException(_('{path} is zero size!')
|
||||
.format(path=ipa_path))
|
||||
raise FDroidException(_('{path} is zero size!').format(path=ipa_path))
|
||||
|
||||
sha256 = common.sha256sum(ipa_path)
|
||||
ipa = apkcache.get(ipa_name, {})
|
||||
@ -855,7 +935,15 @@ def insert_funding_yml_donation_links(apps):
|
||||
if 'open_collective' in data:
|
||||
del data['open_collective']
|
||||
# this tuple provides a preference ordering
|
||||
for k in ('custom', 'github', 'patreon', 'community_bridge', 'ko_fi', 'issuehunt'):
|
||||
for k in (
|
||||
'custom',
|
||||
'github',
|
||||
'patreon',
|
||||
'community_bridge',
|
||||
'ko_fi',
|
||||
'issuehunt',
|
||||
'buy_me_a_coffee'
|
||||
):
|
||||
v = data.get(k)
|
||||
if not v:
|
||||
continue
|
||||
@ -864,10 +952,10 @@ def insert_funding_yml_donation_links(apps):
|
||||
if s:
|
||||
app['Donate'] = s
|
||||
break
|
||||
elif k == 'community_bridge':
|
||||
elif k in ('community_bridge', 'lfx_crowdfunding'):
|
||||
s = sanitize_funding_yml_name(v)
|
||||
if s:
|
||||
app['Donate'] = 'https://funding.communitybridge.org/projects/' + s
|
||||
app['Donate'] = 'https://crowdfunding.lfx.linuxfoundation.org/projects/' + s
|
||||
break
|
||||
elif k == 'github':
|
||||
s = sanitize_funding_yml_name(v)
|
||||
@ -889,6 +977,16 @@ def insert_funding_yml_donation_links(apps):
|
||||
if s:
|
||||
app['Donate'] = 'https://patreon.com/' + s
|
||||
break
|
||||
elif k == 'buy_me_a_coffee':
|
||||
s = sanitize_funding_yml_name(v)
|
||||
if s:
|
||||
app['Donate'] = 'https://www.buymeacoffee.com/' + s
|
||||
break
|
||||
elif k == 'polar':
|
||||
s = sanitize_funding_yml_name(v)
|
||||
if s:
|
||||
app['Donate'] = 'https://polar.sh/' + s
|
||||
break
|
||||
|
||||
|
||||
def copy_triple_t_store_metadata(apps):
|
||||
@ -1136,6 +1234,9 @@ def insert_localized_app_metadata(apps):
|
||||
if base not in apps[packageName] or not isinstance(apps[packageName][base], collections.OrderedDict):
|
||||
apps[packageName][base] = collections.OrderedDict()
|
||||
apps[packageName][base][locale] = common.file_entry(dst)
|
||||
|
||||
# copy screenshots from local source code checkout into wellknown
|
||||
# location in repo directory
|
||||
for d in dirs:
|
||||
if d in SCREENSHOT_DIRS:
|
||||
if locale == 'images':
|
||||
@ -1148,6 +1249,8 @@ def insert_localized_app_metadata(apps):
|
||||
os.makedirs(screenshotdestdir, mode=0o755, exist_ok=True)
|
||||
_strip_and_copy_image(f, screenshotdestdir)
|
||||
|
||||
|
||||
def ingest_screenshots_from_repo_dir(apps):
|
||||
repodirs = sorted(glob.glob(os.path.join('repo', '[A-Za-z]*', '[a-z][a-z]*')))
|
||||
for d in repodirs:
|
||||
if not os.path.isdir(d):
|
||||
@ -1208,6 +1311,144 @@ def insert_localized_app_metadata(apps):
|
||||
logging.warning(_('Unsupported graphics file found: {path}').format(path=f))
|
||||
|
||||
|
||||
LANG_CODE = re.compile(r'^[a-z]{2}([-_][A-Z][a-zA-Z]{1,3})?$')
|
||||
|
||||
|
||||
FASTLANE_IOS_MAP = {
|
||||
"name.txt": 'name',
|
||||
"subtitle.txt": 'summary',
|
||||
"description.txt": 'description',
|
||||
}
|
||||
|
||||
|
||||
def parse_ios_screenshot_name(path):
|
||||
"""
|
||||
Infer type and categorization info from screenshot file name.
|
||||
|
||||
This is not really an exact algorithm, it's based on filenames observed in
|
||||
the wild.
|
||||
"""
|
||||
s = path.stem.split('@')
|
||||
if len(s) >= 2:
|
||||
if "iphone" in s[0].lower():
|
||||
return ("phoneScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip())
|
||||
elif "ipad" in s[0].lower():
|
||||
return ("tenInchScreenshots", s[0].strip(), ('@'.join(s[1:])).split('-')[0].strip())
|
||||
else:
|
||||
fragments = path.stem.lower().split("_")
|
||||
device = "unknown"
|
||||
os = "unknown"
|
||||
screenshot_type = "phoneScreenshots"
|
||||
for f in fragments:
|
||||
if "iphone" in f:
|
||||
device = f
|
||||
continue
|
||||
if "ipad" in f:
|
||||
screenshot_type = "tenInchScreenshots"
|
||||
device = f
|
||||
if "ios" in f:
|
||||
os = f
|
||||
return (screenshot_type, device, os)
|
||||
|
||||
return ("phoneScreenshots", 'unknown', 'unknown')
|
||||
|
||||
|
||||
def discover_ios_screenshots(fastlane_dir):
|
||||
"""Traverse git checkouts in build dir, search for fastlane-screenshots and put findings into a dict."""
|
||||
fastlane_screenshot_dir = fastlane_dir / 'screenshots'
|
||||
screenshots = {}
|
||||
if fastlane_screenshot_dir.is_dir():
|
||||
for lang_sdir in fastlane_screenshot_dir.iterdir():
|
||||
locale = lang_sdir.name
|
||||
m = LANG_CODE.match(locale)
|
||||
if m:
|
||||
screenshots[locale] = {}
|
||||
fifo_idevice = {}
|
||||
fifo_ios = {}
|
||||
for screenshot in lang_sdir.iterdir():
|
||||
if screenshot.suffix[1:] in ALLOWED_EXTENSIONS:
|
||||
screenshot_type, idevice_name, ios_name = parse_ios_screenshot_name(screenshot)
|
||||
|
||||
# since there is no easy mapping here, we're just
|
||||
# resorting to fifo here, so ieg. if there's 2
|
||||
# screenshots categorized for more than one
|
||||
# iPhone/iOS combinations we just remember the
|
||||
# first combination, use them as screenshots in
|
||||
# F-Droid and ignore all other screenshots, for
|
||||
# this screenshot type
|
||||
if not fifo_idevice.get(screenshot_type):
|
||||
fifo_idevice[screenshot_type] = idevice_name
|
||||
fifo_ios[screenshot_type] = ios_name
|
||||
|
||||
if fifo_idevice[screenshot_type] == idevice_name and fifo_ios[screenshot_type] == ios_name:
|
||||
if screenshot_type not in screenshots[locale]:
|
||||
screenshots[locale][screenshot_type] = []
|
||||
screenshots[locale][screenshot_type].append(screenshot)
|
||||
|
||||
# sort all found screenshots alphanumerically
|
||||
for locale, translated_screenshots in screenshots.items():
|
||||
for device in translated_screenshots.keys():
|
||||
translated_screenshots[device].sort()
|
||||
|
||||
return screenshots
|
||||
|
||||
|
||||
def copy_ios_screenshots_to_repo(screenshots, package_name):
|
||||
for locale, translated_screenshots in screenshots.items():
|
||||
for device, translated_device_screenshots in translated_screenshots.items():
|
||||
dest_dir = Path('repo') / package_name / locale / device
|
||||
dest_dir.mkdir(mode=0o755, parents=True, exist_ok=True)
|
||||
for path in translated_device_screenshots:
|
||||
dest = dest_dir / (path.name.replace(" ", "_").replace("\t", "_"))
|
||||
fdroidserver.update._strip_and_copy_image(str(path), str(dest))
|
||||
|
||||
|
||||
def insert_localized_ios_app_metadata(apps_with_packages):
|
||||
|
||||
if not any(Path('repo').glob('*.ipa')):
|
||||
# no IPA files present in repo, nothing to do here, exiting early
|
||||
return
|
||||
|
||||
for package_name, app in apps_with_packages.items():
|
||||
if not any(Path('repo').glob(f'{package_name}*.ipa')):
|
||||
# couldn't find any IPA files for this package_name
|
||||
# so we don't have to look for fastlane data
|
||||
continue
|
||||
|
||||
fastlane_dir = Path('build', package_name, 'fastlane')
|
||||
fastlane_meta_dir = (fastlane_dir / "metadata")
|
||||
|
||||
if fastlane_meta_dir.is_dir():
|
||||
for lang_dir in fastlane_meta_dir.iterdir():
|
||||
locale = lang_dir.name
|
||||
m = LANG_CODE.match(locale)
|
||||
if m:
|
||||
for metadata_file in (lang_dir).iterdir():
|
||||
key = FASTLANE_IOS_MAP.get(metadata_file.name)
|
||||
if key:
|
||||
fdroidserver.update._set_localized_text_entry(
|
||||
app, locale, key, metadata_file
|
||||
)
|
||||
|
||||
screenshots = fdroidserver.update.discover_ios_screenshots(fastlane_dir)
|
||||
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_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,
|
||||
}
|
||||
}
|
||||
if not icon_dest.exists():
|
||||
icon_dest.parent.mkdir(parents=True, exist_ok=True)
|
||||
shutil.copy(icon_path, icon_dest)
|
||||
|
||||
|
||||
def scan_repo_files(apkcache, repodir, knownapks, use_date_from_file=False):
|
||||
"""Scan a repo for all files with an extension except APK/OBB/IPA.
|
||||
|
||||
@ -1404,6 +1645,60 @@ def _get_apk_icons_src(apkfile, icon_name):
|
||||
return icons_src
|
||||
|
||||
|
||||
def _get_ipa_icon(src_dir):
|
||||
"""Search source directory of an IPA project for the app icon."""
|
||||
# parse app icon name from project config file
|
||||
src_dir = Path(src_dir)
|
||||
prj = next(src_dir.glob("**/project.pbxproj"), None)
|
||||
if not prj or not prj.exists():
|
||||
return
|
||||
|
||||
icon_name = _parse_from_pbxproj(prj, 'ASSETCATALOG_COMPILER_APPICON_NAME')
|
||||
if not icon_name:
|
||||
return
|
||||
|
||||
icon_dir = next(src_dir.glob(f'**/{icon_name}.appiconset'), None)
|
||||
if not icon_dir:
|
||||
return
|
||||
|
||||
with open(icon_dir / "Contents.json") as f:
|
||||
cntnt = json.load(f)
|
||||
|
||||
fname = None
|
||||
fsize = 0
|
||||
for image in cntnt['images']:
|
||||
s = float(image.get("size", "0x0").split("x")[0])
|
||||
if image.get('scale') == "1x" and s > fsize and s <= 128:
|
||||
fname = image['filename']
|
||||
fsize = s
|
||||
|
||||
return str(icon_dir / fname)
|
||||
|
||||
|
||||
def _parse_from_pbxproj(pbxproj_path, key):
|
||||
"""Parse values from apple project files.
|
||||
|
||||
This is a naive regex based parser. Should this proofe to unreliable we
|
||||
might want to consider using a dedicated pbxproj parser:
|
||||
https://pypi.org/project/pbxproj/
|
||||
|
||||
e.g. when looking for key 'ASSETCATALOG_COMPILER_APPICON_NAME'
|
||||
This function will extract 'MyIcon' from if the provided file
|
||||
contains this line:
|
||||
|
||||
ASSETCATALOG_COMPILER_APPICON_NAME = MyIcon;
|
||||
|
||||
returns None if parsing for that value didn't yield anything
|
||||
"""
|
||||
r = re.compile(f"\\s*{key}\\s*=\\s*(?P<value>[a-zA-Z0-9-_]+)\\s*;\\s*")
|
||||
with open(pbxproj_path, 'r', encoding='utf-8') as f:
|
||||
for line in f.readlines():
|
||||
m = r.match(line)
|
||||
if m:
|
||||
return m.group("value")
|
||||
return None
|
||||
|
||||
|
||||
def _sanitize_sdk_version(value):
|
||||
"""Sanitize the raw values from androguard to handle bad values.
|
||||
|
||||
@ -1427,8 +1722,7 @@ def _sanitize_sdk_version(value):
|
||||
|
||||
def scan_apk_androguard(apk, apkfile):
|
||||
try:
|
||||
from androguard.core.bytecodes.apk import APK
|
||||
apkobject = APK(apkfile)
|
||||
apkobject = common.get_androguard_APK(apkfile)
|
||||
if apkobject.is_valid_APK():
|
||||
arsc = apkobject.get_android_resources()
|
||||
else:
|
||||
@ -1444,7 +1738,7 @@ def scan_apk_androguard(apk, apkfile):
|
||||
logging.error(_("Failed to get APK information, skipping {path}")
|
||||
.format(path=apkfile))
|
||||
raise BuildException(_("Invalid APK"))
|
||||
except (FileNotFoundError, zipfile.BadZipFile) as e:
|
||||
except (FileNotFoundError, ValueError, zipfile.BadZipFile) as e:
|
||||
logging.error(_("Could not open APK {path} for analysis: ").format(path=apkfile)
|
||||
+ str(e))
|
||||
raise BuildException(_("Invalid APK")) from e
|
||||
@ -1484,7 +1778,7 @@ def scan_apk_androguard(apk, apkfile):
|
||||
if maxSdkVersion is not None:
|
||||
apk['maxSdkVersion'] = maxSdkVersion
|
||||
|
||||
icon_id_str = apkobject.get_element("application", "icon")
|
||||
icon_id_str = apkobject.get_attribute_value("application", "icon")
|
||||
if icon_id_str:
|
||||
try:
|
||||
icon_id = int(icon_id_str.replace("@", "0x"), 16)
|
||||
@ -1616,8 +1910,10 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal
|
||||
return True, None, False
|
||||
|
||||
# Check for debuggable apks...
|
||||
if common.is_apk_and_debuggable(apkfile):
|
||||
logging.warning('{0} is set to android:debuggable="true"'.format(apkfile))
|
||||
if common.is_debuggable_or_testOnly(apkfile):
|
||||
logging.warning(
|
||||
"%s: debuggable or testOnly set in AndroidManifest.xml" % apkfile
|
||||
)
|
||||
|
||||
if options.rename_apks:
|
||||
n = apk['packageName'] + '_' + str(apk['versionCode']) + '.apk'
|
||||
@ -2238,6 +2534,8 @@ def prepare_apps(apps, apks, repodir):
|
||||
translate_per_build_anti_features(apps_with_packages, apks)
|
||||
if repodir == 'repo':
|
||||
insert_localized_app_metadata(apps_with_packages)
|
||||
insert_localized_ios_app_metadata(apps_with_packages)
|
||||
ingest_screenshots_from_repo_dir(apps_with_packages)
|
||||
insert_missing_app_names_from_apks(apps_with_packages, apks)
|
||||
return apps_with_packages
|
||||
|
||||
@ -2276,13 +2574,12 @@ def main():
|
||||
parser.add_argument("--allow-disabled-algorithms", action="store_true", default=False,
|
||||
help=_("Include APKs that are signed with disabled algorithms like MD5"))
|
||||
metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
metadata.warnings_action = options.W
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
common.setup_status_output(start_timestamp)
|
||||
|
||||
common.use_androguard()
|
||||
if not (('jarsigner' in config or 'apksigner' in config)
|
||||
and 'keytool' in config):
|
||||
raise FDroidException(_('Java JDK not found! Install in standard location or set java_paths!'))
|
||||
|
@ -30,7 +30,6 @@ from . import common
|
||||
from . import net
|
||||
from .exception import FDroidException
|
||||
|
||||
options = None
|
||||
config = None
|
||||
|
||||
|
||||
@ -146,7 +145,7 @@ def write_json_report(url, remote_apk, unsigned_apk, compare_result):
|
||||
|
||||
|
||||
def main():
|
||||
global options, config
|
||||
global config
|
||||
|
||||
# Parse command line...
|
||||
parser = ArgumentParser(
|
||||
@ -170,9 +169,9 @@ def main():
|
||||
default=False,
|
||||
help=_("Output JSON report to file named after APK."),
|
||||
)
|
||||
options = parser.parse_args()
|
||||
options = common.parse_args(parser)
|
||||
|
||||
config = common.read_config(options)
|
||||
config = common.read_config()
|
||||
|
||||
tmp_dir = 'tmp'
|
||||
if not os.path.isdir(tmp_dir):
|
||||
|
@ -199,6 +199,7 @@ get_sha() {
|
||||
'8.4') echo '3e1af3ae886920c3ac87f7a91f816c0c7c436f276a6eefdb3da152100fef72ae' ;;
|
||||
'8.5') echo '9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026' ;;
|
||||
'8.6') echo '9631d53cf3e74bfa726893aee1f8994fee4e060c401335946dba2156f440f24c' ;;
|
||||
'8.7') echo '544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d' ;;
|
||||
*) exit 1
|
||||
esac
|
||||
}
|
||||
@ -215,11 +216,11 @@ contains() {
|
||||
# (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 1.5 1.3 1.2 1.1 1.0 0.14 0.13 0.12 0.11 0.10 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2)
|
||||
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.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)
|
||||
plugin_v=(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[@]}
|
||||
|
||||
|
@ -1790,7 +1790,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
|
||||
"Last-Translator: Mehrab Poladov <thepoladov@protonmail.com>\n"
|
||||
"Language-Team: Azerbaijani <https://hosted.weblate.org/projects/f-droid/fdroidserver/az/>\n"
|
||||
@ -90,6 +90,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: xəta: %(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"
|
||||
@ -209,6 +214,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -286,6 +296,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -382,6 +396,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -548,6 +567,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -614,6 +643,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -780,6 +814,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -844,6 +882,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1049,6 +1091,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1186,6 +1232,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1344,6 +1394,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1377,6 +1431,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1626,6 +1684,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1787,6 +1849,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1819,6 +1885,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1848,6 +1918,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1905,6 +1979,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2054,6 +2132,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2228,6 +2310,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2385,6 +2472,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2399,6 +2491,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2603,6 +2699,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2613,6 +2734,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1789,7 +1789,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -5,7 +5,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 2.1b0\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@ -89,6 +89,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -208,6 +213,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -285,6 +295,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -381,6 +395,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -547,6 +566,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -613,6 +642,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -779,6 +813,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -843,6 +881,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1048,6 +1090,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1185,6 +1231,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1343,6 +1393,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1376,6 +1430,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1625,6 +1683,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1786,6 +1848,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1818,6 +1884,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1847,6 +1917,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1904,6 +1978,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2053,6 +2131,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2227,6 +2309,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2384,6 +2471,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2398,6 +2490,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2602,6 +2698,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2612,6 +2733,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-02-12 09:48+0000\n"
|
||||
"Last-Translator: Oymate <dhruboadittya96@gmail.com>\n"
|
||||
"Language-Team: Bengali <https://hosted.weblate.org/projects/f-droid/fdroidserver/bn/>\n"
|
||||
@ -90,6 +90,11 @@ msgstr[1] ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -209,6 +214,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -286,6 +296,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -382,6 +396,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -548,6 +567,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -614,6 +643,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -780,6 +814,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -844,6 +882,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1049,6 +1091,10 @@ msgstr "{apkfilename} প্রক্রিয়ারত"
|
||||
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}'"
|
||||
@ -1186,6 +1232,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1344,6 +1394,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1377,6 +1431,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1626,6 +1684,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1787,6 +1849,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1819,6 +1885,10 @@ msgstr "ব্যবহার"
|
||||
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 ""
|
||||
@ -1848,6 +1918,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1905,6 +1979,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2054,6 +2132,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2228,6 +2310,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1,12 +1,12 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Tibetan <https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/>\n"
|
||||
"Language: bo\n"
|
||||
@ -14,7 +14,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.14.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
#, fuzzy
|
||||
@ -94,6 +94,11 @@ msgstr[0] "%(option)s གདམ་ཀ་དགོས་ %(number)d རྩོད
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -191,9 +196,9 @@ msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}"
|
||||
msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "'{value}' is not a valid {field}, should be {pattern}"
|
||||
msgstr "'{value}' ཁུངས་ལྡན་རེད་མིན་འདུག{field} འདི་ནང་ {appid}. Regex འགྲོ་ལུགས་: {pattern}"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -214,6 +219,11 @@ msgstr "/གནས་དོན་བོར་བརླག་སོང་འད
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "{path}མིང་རྟགས་བཀོད་པའི་ཆོག་མཆན་ལག་ཁྱེར་འདིའི་ནང་རྙེད་མ་སོང་།"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "PGP གྱི་མིང་རྟགས་དེ་རེ་པོ་ཐུམ་སྒྲིལ་ནང་GnuPG ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
|
||||
@ -291,6 +301,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -386,6 +400,11 @@ msgstr "སྡེ་ཚན་'%s' ཁུངས་ལྡན་མ་རེད།"
|
||||
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 "མཉེན་ཆས་རྣམས་གསར་བསྒྱུར་བྱས་མིན་གཟིགས་ཞིབ་གནང་དང་།"
|
||||
@ -556,6 +575,16 @@ msgstr "འགྲེལ་བཤད་འདི་ལ་ཐོ་གཞུང་
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "རིང་ཐུང་གི་འགྲེལ་བཤད་ {length} {limit} ལས་བརྒལ་འདུག char limit"
|
||||
|
||||
#: ../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 ""
|
||||
@ -622,6 +651,11 @@ msgstr ""
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "'{field}'ནང་གི་ངོ་བཤུས་སྦྲེལ་མཐུད།: {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr ""
|
||||
@ -792,6 +826,11 @@ msgstr "མཉེན་ཆས་ཁ་ཤས་ཀྱི་ཁུངས་ལྡ
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "{path}ནང་ལ་སྣ་མང་མིང་རྟགས་ཆོག་མཆན་ལག་ཁྱེར་རྙེད་སོང་།"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "མཛོད་ཁང་ཆེད་དུ་་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་མང་པོ་རྙེད་འདུག."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -857,6 +896,11 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་གསར་བསྒྱུར་ཐུབ་མ་སོང་།"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "གིཊ་རྒྱ་ཁྱོན་མཉམ་བསྲེ་ཐུབ་མ་སོང་།"
|
||||
@ -1062,6 +1106,10 @@ msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བ
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "མིང་རྟགས་བཀོད་པའི་ལྡེ་མིག་ཆེད་དུ་སྟོན་པའི་ལྡེ་མིག་གསོག་ཉར་ཁང་གི་ལམ།\t"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "Known debug key is used in AllowedAPKSigningKeys: "
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
|
||||
@ -1147,7 +1195,7 @@ msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།."
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, fuzzy
|
||||
msgid "No matching tags found"
|
||||
msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།."
|
||||
msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
@ -1204,6 +1252,11 @@ msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་ས
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་མིན་འདུག-བྱ་རྒྱུ་གང་ཡང་མེད།"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr ""
|
||||
@ -1363,6 +1416,10 @@ msgstr "ཐོ་གཞུད་འདི་གིཊ་ཐག་རིང་ག
|
||||
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}"
|
||||
@ -1396,6 +1453,10 @@ msgstr "ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བ
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "སྦས་ཁུང་ནས་ {apkfilename}ཀློག་བཞིན་པ།"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "དམིགས་སྟོན་བྱས་པའི་ཡིག་ཆ་རྣམས་མེད་པ་བཟོ་བཞིན་པ།"
|
||||
@ -1470,9 +1531,9 @@ msgid "Scan the source code of a package"
|
||||
msgstr "ཐུམ་སྒྲིལ་བྱས་པའི་འབྱུང་ཁུངས་ཨང་རྟགས་འཚག་རྒྱབ"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Scanner found {count} problems in {apk}"
|
||||
msgstr "འཚག་རྒྱབ་ལ་སྐྱོན་རྙེད་པ།"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -1644,6 +1705,10 @@ msgstr "ལྡེ་མིག་གཞན་ལ་སྐྱོན་ཆ་འད
|
||||
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 ""
|
||||
@ -1806,6 +1871,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1839,6 +1908,11 @@ msgstr "བེད་སྤྱོད།"
|
||||
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 གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།"
|
||||
@ -1868,6 +1942,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1925,6 +2003,10 @@ msgstr "བརྡ་སྟོན་པའི་མིང་རྟགས་དེ
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།"
|
||||
@ -2076,6 +2158,10 @@ msgstr "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙ
|
||||
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 ""
|
||||
@ -2166,7 +2252,7 @@ msgstr "གཡེང་ཚེག"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy
|
||||
msgid "force metadata errors (default) to be warnings, or to be ignored."
|
||||
msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེས་པར་དུ་གཏོང་དགོས་པ་དང་། ཡང་ན་ཡ་མ་བྱེད།"
|
||||
msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེས་པར་དུ་གཏོང་དགོས་པ་དང་། ཡང་ན་ཡ་མ་བྱེད།."
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
@ -2254,6 +2340,11 @@ msgstr "local_copy_dir ངེས་པར་ཕྱོགས་དེབ་ཡི
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "མེ་ལོང་། '%s 1' 'fdroid'དང་མཉམ་དུ་མཇུག་སྐྱོང་མི་ཐུབ།!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-brace-format
|
||||
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
|
||||
@ -2288,7 +2379,7 @@ msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བས
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, fuzzy
|
||||
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
|
||||
@ -2413,6 +2504,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2427,6 +2523,11 @@ msgstr "s3cmd sync ཕྱོགས་སྟོན།{path}1 དེ་ནས {url
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir \"fdroid\"གིས་མཇུག་སྐྱོང་མིན་འདུག་ : \"{path}1\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr ""
|
||||
@ -2630,6 +2731,31 @@ msgstr ""
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' འདི་ 'config.yml' ནང་སྒྲིག་ཐུབ་མ་སོང་།!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2640,6 +2766,11 @@ msgstr "{path} ལ་ཆེ་ཆུང་མེད།!"
|
||||
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
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -1788,7 +1788,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -5,20 +5,22 @@
|
||||
# Fjuro <fjuro@seznam.cz>, 2022.
|
||||
# Filip Klopec <filipklopec@gmail.com>, 2022.
|
||||
# Fjuro <ifjuro@proton.me>, 2022, 2023.
|
||||
# Daniel Hejduk <jellymail@protonmail.com>, 2023.
|
||||
# Fjuro <fjuro@alius.cz>, 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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
|
||||
"Last-Translator: Fjuro <ifjuro@proton.me>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-23 10:07+0000\n"
|
||||
"Last-Translator: Fjuro <fjuro@alius.cz>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/f-droid/fdroidserver/cs/>\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 4.18-dev\n"
|
||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -99,6 +101,11 @@ msgstr[2] "možnost %(option)s vyžaduje %(number)d argumentů"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: chyba: %(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"
|
||||
@ -218,6 +225,11 @@ msgstr "/issues chybí"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Jako argument je vyžadována adresa URL!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nenalezeny žádné podpisové 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"
|
||||
@ -295,6 +307,11 @@ msgstr "Aplikace má binární soubory, ale nemá odpovídající AllowedAPKSign
|
||||
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
|
||||
#, fuzzy
|
||||
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\", ale AutoUpdateMode nebo UpdateCheckMode nejsou None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -392,6 +409,11 @@ msgstr "Kategorie „%s“ není platná"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Kategorie nejsou nastavené"
|
||||
|
||||
#: ../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 "Zkontrolujte aktualizace aplikací"
|
||||
@ -558,6 +580,16 @@ msgstr "Popis má seznam (%s) ale není opatřen odrážkami (*) ani očíslová
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Popis délky {length} přesahuje limit {limit} znaků"
|
||||
|
||||
#: ../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 "Nepřidávat ‚disable:‘ k vygenerovaným položkám sestavení"
|
||||
@ -624,6 +656,11 @@ msgstr "Duplicitní záznam \"%s\" v konfiguraci zrcadel!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Duplicitní odkaz v '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "CHYBA: Podpříkaz „server“ byl odebrán, použijte „deploy“!"
|
||||
@ -794,6 +831,11 @@ msgstr "U některých aplikací nalezeny neplatné versionCodes"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "V {path} nalezeno několik podpisových bloků JAR"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Nalezeno více podpisových certifikátů pro repozitář."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -858,6 +900,11 @@ msgstr "Git remote set-head se nezdařil: „%s“"
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset se nezdařil"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git submodule update se nezdařil"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git submodule sync se nezdařil"
|
||||
@ -1063,6 +1110,10 @@ msgstr "Uchovávání neúspěšného sestavení „{apkfilename}“"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Úložiště klíčů pro podpisový klíč:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1070,7 +1121,7 @@ msgstr "Poslední použitá revize ‚{commit}‘ vypadá jako značka, ale Upda
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "Liberapay donation methods belong in the Liberapay: field"
|
||||
msgstr "Darovací metody Liberapay patří do pole Liberapay:"
|
||||
msgstr "Darovací metody Liberapay patří do pole Liberapay: pole"
|
||||
|
||||
#: ../fdroidserver/rewritemeta.py
|
||||
msgid "List files that would be reformatted (dry run)"
|
||||
@ -1200,6 +1251,11 @@ msgstr "Nebyly nalezeny žádné značky"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Žádný nepodepsaný adresář - není co dělat"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "nenalezeny informace o verzi"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Neplatná definice velikosti: \"{}\""
|
||||
@ -1250,7 +1306,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:"
|
||||
msgstr "Darovací metody OpenCollective patří do pole OpenCollective: pole"
|
||||
|
||||
#: /usr/lib/python3.11/optparse.py
|
||||
msgid "Options"
|
||||
@ -1358,6 +1414,11 @@ msgstr "Odeslat protokol do tohoto vzdáleného git repozitáře"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Odeslání protokolu binární průhlednosti do {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head se nezdařil: „%s“"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1391,6 +1452,11 @@ msgstr "Čtení packageName/versionCode/versionName se nezdařilo, APK nepatné:
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Čtení {apkfilename} z mezipaměti"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "stáhnout nejnovější verzi podpisů z webu"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Odebírání určených souborů"
|
||||
@ -1641,6 +1707,13 @@ msgstr "Došlo ke kolizi keyalias – publikování zastaveno"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Aplikace, které byly archivovány z hlavního repozitáře."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 "Toto je repozitář aplikací, který lze používat s aplikací F-Droid. Aplikace v tomto repozitáři jsou buď oficiální binární soubory sestavené původními vývojáři aplikací, nebo binární soubory sestavené ze zdrojových kódů správcem f-droid.org pomocí nástrojů na adrese https://gitlab.com/fdroid."
|
||||
@ -1809,10 +1882,15 @@ msgstr "UpdateCheckData musí používat HTTPS URL: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData není platná URL: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode je nastaven, ale vypadá to, že checkupdates ještě nebylo spuštěno"
|
||||
msgstr "UpdateCheckMode je nastaven, ale vypadá to, že akce checkupdates ještě nebyla spuštěna."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckName is set to the known application ID, it can be removed"
|
||||
@ -1841,6 +1919,11 @@ msgstr "Použití"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Použití: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main 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/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"
|
||||
@ -1870,6 +1953,11 @@ msgstr "Používám APK Signature v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Používám APK Signature v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Používám APK Signature v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1927,6 +2015,10 @@ msgstr "Pokud jsou nakonfigurovány podepsané indexy, vytvořit v této fázi p
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Při lintingu celého úložiště je yamllint ve výchozím nastavení zakázán. Tato volba vynucuje yamllint bez ohledu na to."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distinguished Name' používané při generování klíčů"
|
||||
@ -2077,6 +2169,11 @@ msgstr "konfliktní subparser: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "nepodařilo se parsovat '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "nepodařilo se parsovat srclib spec (není určen ref): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "nepodařilo se parsovat srclib spec (není určen ref): '{}'"
|
||||
@ -2252,6 +2349,11 @@ msgstr "local_copy_dir musí být adresář, ne soubor!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "mirror '%s' nekončí s 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Nyní nastavte následující v 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
|
||||
@ -2409,6 +2511,11 @@ msgstr "repo_icon \"repo/icons/%s\" neexistuje, generování placeholderu."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url musí končit na /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 není nainstalován, nelze zapisovat metadata."
|
||||
@ -2423,6 +2530,11 @@ msgstr "s3cmd sync indexes {path} do {url} a odstranit"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "mezipaměť skeneru je poškozena! Můžete ji vymazat pomocí: ‚{clear}‘"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir nekončí s \"fdroid\", možná jste měli na mysli: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "sdílená knihovna"
|
||||
@ -2628,6 +2740,31 @@ msgstr "{path} neexistuje! Vytvořte ji spuštěním:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
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 ""
|
||||
|
||||
#: ../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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' není nastaven v souboru config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2638,6 +2775,11 @@ msgstr "{path} má nulovou velikost!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} více než 200 MB, ruční nahrání: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-01-16 21:23+0000\n"
|
||||
"Last-Translator: Aled Powell <aled@aledpowell.cymru>\n"
|
||||
"Language-Team: Welsh <https://hosted.weblate.org/projects/f-droid/fdroidserver/cy/>\n"
|
||||
@ -94,6 +94,11 @@ msgstr[5] ""
|
||||
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"
|
||||
@ -213,6 +218,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -290,6 +300,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -390,6 +404,11 @@ msgstr ""
|
||||
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 "Gwirio am ddiweddariadau i apiau"
|
||||
@ -556,6 +575,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -622,6 +651,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -788,6 +822,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -852,6 +890,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1057,6 +1099,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1194,6 +1240,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1352,6 +1402,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1385,6 +1439,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1638,6 +1696,10 @@ msgstr ""
|
||||
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
|
||||
#, fuzzy
|
||||
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,6 +1868,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1838,6 +1904,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1867,6 +1937,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1924,6 +1998,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2077,6 +2155,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2255,6 +2337,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2413,6 +2500,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2427,6 +2519,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2635,6 +2731,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2645,6 +2766,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -20,20 +20,21 @@
|
||||
# Follpvosten <wolfi@karpador.xyz>, 2021.
|
||||
# ssantos <ssantos@web.de>, 2022, 2023.
|
||||
# "C. Rüdinger" <Mail-an-CR@web.de>, 2023.
|
||||
# VfBFan <VfBFan@users.noreply.hosted.weblate.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-06-23 14:52+0000\n"
|
||||
"Last-Translator: \"C. Rüdinger\" <Mail-an-CR@web.de>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-03-12 12:37+0000\n"
|
||||
"Last-Translator: VfBFan <VfBFan@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/f-droid/fdroidserver/de/>\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 4.18.1\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -113,6 +114,11 @@ msgstr[1] "Option %(option)s benötigt %(number)d Argumente"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: Fehler: %(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"
|
||||
@ -232,6 +238,11 @@ msgstr "/issues fehlt"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Als Argument wird eine URL benötigt!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Keine Signaturzertifikate in {path} gefunden"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "GnuPG PGP-Signaturen für Programmpakete in der Paketquelle hinzufügen"
|
||||
@ -309,6 +320,11 @@ msgstr "App besitzt Binärdateien aber keine entsprechenden AllowedAPKSigningKey
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 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
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -405,6 +421,11 @@ msgstr "Kategorie »%s« ist nicht gültig"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Kategorien sind nicht festgelegt"
|
||||
|
||||
#: ../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 "Auf Aktualisierungen für Anwendungen prüfen"
|
||||
@ -571,6 +592,16 @@ msgstr "Beschreibung enthält eine Liste (%s), ist aber weder aufgezählt (*) no
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Länge der Beschreibung {length} übersteigt die zulässige Zeichenzahl {limit}"
|
||||
|
||||
#: ../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 "Nicht 'disable:' zu den erzeugten Erstellungseinträgen hinzufügen"
|
||||
@ -637,6 +668,11 @@ msgstr "Doppelter „%s“-Eintrag in Spiegelserver-Konfiguration!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Link in „{field}” duplizieren: {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "FEHLER: Der \"server\"-Unterbefehl wurde entfernt, verwende \"deploy\"!"
|
||||
@ -807,6 +843,11 @@ msgstr "Ungültige versionCodes für einige Apps gefunden"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Mehrere JAR-Signaturzertifikate in {path} gefunden"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Mehrere Signaturzertifikate für das Repository gefunden."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -871,6 +912,11 @@ msgstr "Git remote set-head fehlgeschlagen: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset fehlgeschlagen"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git submodule update fehlgeschlagen"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git submodule sync fehlgeschlagen"
|
||||
@ -918,7 +964,7 @@ msgstr "Ignoriere veraltete Cachedaten für {apkfilename}"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
msgid "Include APKs that are signed with disabled algorithms like MD5"
|
||||
msgstr "APKs einschließen, die mit deaktivierten Algorithmen wie MD5 signiert sind"
|
||||
msgstr "APKs einschließen, die mit untauglichen Algorithmen wie MD5 signiert sind"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
msgid "Include the PGP signature .asc files in the mirror"
|
||||
@ -1076,6 +1122,10 @@ msgstr "Fehlgeschlagener Build \"{apkfilename}\" behalten"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Schlüsselspeicher für den Signierschlüssel:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1166,7 +1216,7 @@ msgstr "Keine Mindest-SDK-Version in {0} gefunden, Standard (3) verwendet."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "No need to specify that the app is Free Software"
|
||||
msgstr "Sie müssen nicht angeben, dass die App freie Software ist"
|
||||
msgstr "Sie müssen nicht angeben, dass die App Freie Software ist"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "No need to specify that the app is for Android"
|
||||
@ -1213,6 +1263,11 @@ msgstr "Keine Tags gefunden"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Kein unsigniertes Verzeichnis - nichts zu tun"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "keine Versionsinformation gefunden"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Keine gültige Größendefinition: \"{}\""
|
||||
@ -1371,6 +1426,11 @@ msgstr "Anmeldung an diesem Git-Repository durchführen"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Binäres Transparenz-Log nach {url} pushen"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head fehlgeschlagen: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1404,6 +1464,11 @@ msgstr "Lesen von packageName/versionCode/versionName fehlgeschlagen,APK ungült
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Lese {apkfilename} aus dem Cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "Abrufen der neuesten Version von Signaturen aus dem Web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Entferne angegebene Dateien"
|
||||
@ -1653,6 +1718,13 @@ msgstr "Es gibt eine Keyalias-Kollision - Veröffentlichung gestoppt"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Dies sind die Apps, die aus dem Hauptrepository archiviert wurden."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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."
|
||||
@ -1821,8 +1893,13 @@ msgstr "UpdateCheckData muss HTTPS-URL verwenden: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData hat eine ungültige URL: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode ist gesetzt, aber likecheckupdates wurde vermutlich noch nicht ausgeführt"
|
||||
|
||||
@ -1853,6 +1930,11 @@ msgstr "Syntax"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Syntax: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main to point at a file in the default branch"
|
||||
msgstr "Verwenden Sie /HEAD anstelle von /master, 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"
|
||||
@ -1882,6 +1964,11 @@ msgstr "Verwende APK-Signatur v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Verwende APK-Signatur v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Verwende APK-Signatur v2"
|
||||
|
||||
#: ../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"
|
||||
@ -1939,6 +2026,10 @@ msgstr "Bei einer Konfiguration mit signierten Indizes, in dieser Phase nur unsi
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Beim Linting des gesamten Repositoriums wird yamllint standardmäßig deaktiviert. Diese Option erzwingt yamllint ungeachtet dessen."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distinguished Name' zum Erzeugen von Schlüsseln"
|
||||
@ -2088,6 +2179,11 @@ msgstr "widersprüchlicher Subparser: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "konnte '{path}' nicht parsen"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "konnte srclib-Spezifikation nicht parsen (keine ref angegeben): '{}'"
|
||||
@ -2262,6 +2358,11 @@ msgstr "local_copy_dir muß ein Verzeichnis sein, keine Datei!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "Spiegelserver '%s' ended nicht mit 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Legen Sie diese nun in der config.yml fest:"
|
||||
|
||||
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2419,6 +2520,11 @@ msgstr "repo_icon \"repo/icons/%s\" existiert nicht, erzeuge Platzhalter."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url muss mit /repo enden"
|
||||
|
||||
#: ../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 ist nicht installiert, kann Metadaten nicht schreiben."
|
||||
@ -2433,6 +2539,11 @@ msgstr "s3cmd-Sync {path} indizieren auf {url} und dann löschen"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "Der Scanner-Cache ist fehlerhaft! Sie können ihn löschen mit: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir endet nicht auf \"fdroid\", meinten Sie stattdessen: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "dynamische Bibliothek"
|
||||
@ -2637,6 +2748,31 @@ msgstr "{path} existiert nicht! Erstellen Sie es durch Ausführen von:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} hat die schlechte Dateisignatur \"{pattern}\", möglicher Janus-Exploit!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "Kein 'sdk_path' in 'config.yml' festgelegt!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2647,6 +2783,11 @@ msgstr "{path} hat Dateigröße Null!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} ist größer als 200MB und muss manuell auf {url} hochgeladen werden"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -1795,7 +1795,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -12,13 +12,13 @@
|
||||
# Iago <iagrivmoa@gmail.com>, 2022.
|
||||
# Iago <translate@delthia.com>, 2022.
|
||||
# Jaime Marquínez Ferrándiz <weblate@jregistros.fastmail.net>, 2022.
|
||||
# gallegonovato <fran-carro@hotmail.es>, 2022, 2023.
|
||||
# gallegonovato <fran-carro@hotmail.es>, 2022, 2023, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-08-01 21:07+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 18:44+0000\n"
|
||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/f-droid/fdroidserver/es/>\n"
|
||||
"Language: es\n"
|
||||
@ -26,7 +26,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.0-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -106,6 +106,11 @@ msgstr[1] "la opción %(option)s requiere %(number)d argumentos"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: error: %(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"
|
||||
@ -225,6 +230,11 @@ msgstr "no se encuentra /issues"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "¡Se requiere una URL como argumento!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "No se ha encontrado ningún certificado de firma en {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Añadir las firmas PGP para los paquetes en el repositorio usando GnuPG"
|
||||
@ -302,6 +312,11 @@ msgstr "La aplicación tiene archivos binarios, pero no las AllowedAPKSigningKey
|
||||
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
|
||||
#, fuzzy
|
||||
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 \"0 versiones\", pero AutoUpdateMode o UpdateCheckMode no es Ninguno"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -398,6 +413,11 @@ msgstr "La categoría '%s' no es válida"
|
||||
msgid "Categories are not set"
|
||||
msgstr "No se han establecido categorías"
|
||||
|
||||
#: ../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 "Buscar actualizaciones de aplicaciones"
|
||||
@ -564,6 +584,16 @@ msgstr "La descripción tiene una lista (%s) pero no está estructurada (*) ni n
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "La descripción de longitud {length} supera el límite de caracteres, {limit}"
|
||||
|
||||
#: ../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 "No agregar 'disable:' a las entradas de compilaciones generadas"
|
||||
@ -630,6 +660,11 @@ msgstr "¡Entrada duplicada \"%s\"en la configuración de los espejos!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Enlace duplicado en '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERROR: ¡El subcomando \"server\" se ha eliminado. Use \"deploy\"!"
|
||||
@ -800,6 +835,11 @@ msgstr "Se encontraron códigos de versión (versionCodes) inválidos para algun
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Encontrados varios ficheros de bloque de firma JAR en {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Encontrados varios certificados de firma para el repositorio."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -864,6 +904,11 @@ msgstr "Git remote set-head falló: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset falló"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "La actualización del submodulo de Git falló"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "La sincronización del submodulo de Git falló"
|
||||
@ -1069,6 +1114,10 @@ msgstr "Mantener la compilación fallida \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Depósito de claves para la clave de firma de repositorio:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1206,6 +1255,11 @@ msgstr "No se encontró ninguna etiqueta"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "No hay directorio sin firma - nada que hacer"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "no se encontró información de la versión"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "No es una definición válida del tamaño: \"{}\""
|
||||
@ -1364,6 +1418,11 @@ msgstr "Pulse el registro a este repositorio remoto Git"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Publicar el registro de transparencia binario en {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head falló: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1397,6 +1456,11 @@ msgstr "Error al leer packageName/versionCode/versionName,APK inválido: '{apkfi
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Leyendo {apkfilename} desde caché"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "obtener la última versión de las firmas de la web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Removiendo archivos especificados"
|
||||
@ -1646,6 +1710,13 @@ msgstr "Hay una colisión de keyalias - publicación detenida"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Estas son aplicaciones del repositorio principal que se han archivado."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 "Este es un repositorio de aplicaciones para usar con F-Droid. Las aplicaciones en este repositorio son binarios oficiales construidos por los desarrolladores originales de la aplicación, o son binarios creados a partir de su código fuente por f-droid.org utilizando las herramientas de https://gitlab.com/fdroid."
|
||||
@ -1814,14 +1885,19 @@ msgstr "UpdateCheckData tiene que usar una URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData tiene una URL no válida: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode está configurado pero parece que checkupdates aún no se ha ejecutado"
|
||||
msgstr "UpdateCheckMode está configurado pero parece que aún no se han ejecutado las actualizaciones."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckName is set to the known application ID, it can be removed"
|
||||
msgstr "El nombre de verificación de actualización (UpdateCheckName) es el identificador (ID) conocido de la aplicación. Se puede borrar"
|
||||
msgstr "UpdateCheckName está configurado con el ID de la aplicación conocida, se puede eliminar"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
@ -1846,6 +1922,11 @@ msgstr "Utilización"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uso: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main 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/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"
|
||||
@ -1875,6 +1956,11 @@ msgstr "Utilizando Firma APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Utilizando firma APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Utilizando Firma APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
msgstr "¡Usando jarsigner de Java. No recomendado para verificar APKs! Use apksigner"
|
||||
@ -1932,6 +2018,10 @@ msgstr "Cuando está configurado para índices firmados, crear solo índices sin
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Cuando se limpia el repositorio completo yamllint está deshabilitado por defecto. Esta opción fuerza yamllint a pesar de todo."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Nombre Distintivo' (DN) usado al generar claves"
|
||||
@ -2081,6 +2171,11 @@ msgstr "subanalizador del conflictivo:%s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "no se pudo procesar '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "no se pudo procesar especificación srclib (sin especificar ref): '{}'"
|
||||
@ -2255,6 +2350,11 @@ msgstr "¡local_copy_dir tiene que ser un directorio, no un fichero!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "¡el espejo '%s' no termina en 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Ahora establezca lo siguiente 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
|
||||
@ -2412,6 +2512,11 @@ msgstr "repo_icon \"repo/icons/%s\" no existe, generando placeholder."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url debe terminar 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 no instalado. No se pueden escribir metadatos."
|
||||
@ -2426,6 +2531,11 @@ msgstr "s3cmd sync indexa {path} a {url} y elimina"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "¡El escaner de la cache está mal realizado! Puedes borrarlo con: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir no termina en \"fdroid\", tal vez quisiste decir: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "biblioteca compartida"
|
||||
@ -2630,6 +2740,31 @@ msgstr "¡{path} no existe! Créela ejecutando:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "¡{path} tiene una firma de fichero \"{pattern}\" mala, posible exploit Janus!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "¡'sdk_path' no establecido en 'config.yml'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2640,6 +2775,11 @@ msgstr "¡{path} está vacío!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} mayor de 200MB, subir manualmente: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-04-10 21:26+0000\n"
|
||||
"Last-Translator: Germe the fur star <FOSSgerme.deb@tuta.io>\n"
|
||||
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/f-droid/fdroidserver/es_AR/>\n"
|
||||
@ -95,6 +95,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: error: %(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"
|
||||
@ -214,6 +219,11 @@ msgstr ""
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
@ -294,6 +304,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -390,6 +404,11 @@ msgstr ""
|
||||
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 "Buscar actualizaciones de las aplicaciones"
|
||||
@ -560,6 +579,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -626,6 +655,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -792,6 +826,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -856,6 +894,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1062,6 +1104,10 @@ msgstr ""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Ruta al almacén de claves para la llave de firmado del repositorio"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1200,6 +1246,11 @@ msgstr ""
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "¡Se encontró una excepción desconocida!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr ""
|
||||
@ -1360,6 +1411,10 @@ msgstr "Subir el registro al repositorio remoto de git"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Actualizar el registro de transparencia binario de {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1393,6 +1448,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1642,6 +1701,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1803,6 +1866,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1835,6 +1902,10 @@ msgstr "Uso"
|
||||
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 ""
|
||||
@ -1864,6 +1935,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1921,6 +1996,10 @@ msgstr "Si está configurado para índices firmados, crear sólo índices sin fi
|
||||
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/init.py
|
||||
#, fuzzy
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
@ -2073,6 +2152,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2249,6 +2332,11 @@ msgstr "directorio_copia_local tiene que ser un directorio, ¡no un archivo!"
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2409,6 +2497,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2423,6 +2516,11 @@ msgstr ""
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir no termina en \"fdroid\", quizá quiso escribir: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "librería compartida"
|
||||
@ -2627,6 +2725,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2637,6 +2760,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2020-04-29 12:49+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Spanish (Mexico) <https://hosted.weblate.org/projects/f-droid/fdroidserver/es_MX/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: error: %(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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -553,6 +572,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -619,6 +648,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -785,6 +819,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -849,6 +887,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1054,6 +1096,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1191,6 +1237,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1349,6 +1399,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1382,6 +1436,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1631,6 +1689,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1792,6 +1854,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1824,6 +1890,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1853,6 +1923,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1910,6 +1984,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2059,6 +2137,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2233,6 +2315,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2391,6 +2478,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2405,6 +2497,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2609,6 +2705,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2619,6 +2740,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@ -89,6 +89,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -208,6 +213,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -285,6 +295,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -381,6 +395,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -547,6 +566,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -613,6 +642,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -779,6 +813,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -843,6 +881,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1048,6 +1090,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1185,6 +1231,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1343,6 +1393,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1376,6 +1430,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1625,6 +1683,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1786,6 +1848,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1818,6 +1884,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1847,6 +1917,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1904,6 +1978,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2053,6 +2131,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2227,6 +2309,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2384,6 +2471,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2398,6 +2490,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2602,6 +2698,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2612,6 +2733,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1792,7 +1792,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -5,9 +5,9 @@
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 2.2.1-143-g1a5ee449\n"
|
||||
"Project-Id-Version: fdroidserver 2.3a1\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1685,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1850,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1886,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1849,6 +1919,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1980,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2133,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -6,7 +6,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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-08-23 01:29+0000\n"
|
||||
"Last-Translator: Kaantaja <ufdbvgoljrjkrkyyub@ianvvn.com>\n"
|
||||
"Language-Team: Finnish <https://hosted.weblate.org/projects/f-droid/fdroidserver/fi/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1685,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1850,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1886,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1849,6 +1919,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1980,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2133,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -2,7 +2,7 @@
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# Julien Gontier <emeuraudeman@protonmail.com>, 2020.
|
||||
# anonymous <noreply@weblate.org>, 2020.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2024.
|
||||
# Jeannette L <j.lavoie@net-c.ca>, 2020.
|
||||
# Nathan <bonnemainsnathan@gmail.com>, 2020.
|
||||
# Virgile L. <virgilelefevre313@gmail.com>, 2020.
|
||||
@ -39,16 +39,16 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-07-31 20:06+0000\n"
|
||||
"Last-Translator: Translator <kvb@tuta.io>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/f-droid/fdroidserver/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 5.0-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -128,6 +128,11 @@ msgstr[1] "L'option %(option)s requiert %(number)d arguments"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s : erreur : %(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"
|
||||
@ -247,6 +252,11 @@ msgstr "/issues est manquant"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Une URL est requise en argument !"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Aucun certificat signé trouvé dans {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Ajouter des signatures PGP avec GnuPG pour les paquets dans le dépôt"
|
||||
@ -324,6 +334,11 @@ msgstr "L’application possède des fichiers binaires mais n'a pas les AllowedA
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -420,6 +435,11 @@ msgstr "Catégories « %s » invalides"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Catégories non définies"
|
||||
|
||||
#: ../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 "Vérifier les mises à jour pour les applications"
|
||||
@ -586,6 +606,16 @@ msgstr "La description contient une liste (%s) mais ce n'est ni une liste à puc
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "La longueur de la description {length} dépasser la limite du nombre de caractères autorisés {limit}"
|
||||
|
||||
#: ../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 "Ne pas ajouter \"disable:\" aux entrées générées"
|
||||
@ -652,6 +682,11 @@ msgstr "Entrée doublon \"%s\" dans le paramétrage des miroirs !"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Lien dupliqué dans « {field} » : {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../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\" !"
|
||||
@ -822,6 +857,11 @@ msgstr "Code de version invalide trouvée pour certaines application"
|
||||
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."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -886,6 +926,11 @@ msgstr "Impossible de définir la branche par défaut du Git distant : \"%s\""
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Synchronisation du submodule Git échoué"
|
||||
@ -1054,7 +1099,7 @@ msgstr "Métadonnée de scrlib invalide : la clé '{key}' est inconnue dans '{fi
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
msgid "JAR signature failed to verify: {path}"
|
||||
msgstr "La signature JAR n'a pas pu vérifier:{path}"
|
||||
msgstr "La signature JAR n'a pas pu vérifier :{path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
@ -1091,6 +1136,10 @@ msgstr "Conserver la version ayant échoué « {apkfilename} »"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Stockage des clés signée :\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1228,6 +1277,11 @@ msgstr "Aucune étiquette trouvée"
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Définition de la taille invalide : \"{}\""
|
||||
@ -1386,6 +1440,11 @@ msgstr "Envoyer les logs dans ce dépôt git distant"
|
||||
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\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1419,6 +1478,11 @@ msgstr "La lecture de packageName/versionCode/versionName a échoué, APK invali
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Suppression des fichiers spécifiés"
|
||||
@ -1668,6 +1732,13 @@ msgstr "Il y a une collision de keyalias — publication interrompue"
|
||||
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."
|
||||
|
||||
#: ../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 "Ceci est un dépôt d’applications à utiliser avec FDroid. Les applications publiées dans ce dépôt sont soit les binaires officiels compilés par les développeurs de ces applications, soit celles compilées par f-droid.org à partir des sources en utilisant les outils disponibles sur https://gitlab.com/fdroid."
|
||||
@ -1838,8 +1909,13 @@ msgstr "UpdateCheckData doit utiliser une URL HTTPS : {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
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é"
|
||||
|
||||
@ -1870,6 +1946,11 @@ msgstr "Usage"
|
||||
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"
|
||||
@ -1899,6 +1980,11 @@ msgstr "Utilisation de la signature d'APK v2"
|
||||
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"
|
||||
|
||||
#: ../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"
|
||||
@ -1956,6 +2042,10 @@ msgstr "Lorsqu'il est configuré pour les index signés, ne créez que des index
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Lors du linting, tout le dépôt yamllint est désactivé par défaut. Cette option force yamllint malgré tout."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Nom distingué' utilisé lors de la génération des clés"
|
||||
@ -1990,7 +2080,7 @@ msgstr "option ambiguë : %(option)s peut correspondre à %(matches)s"
|
||||
#: /usr/lib/python3.11/optparse.py
|
||||
#, python-format
|
||||
msgid "ambiguous option: %s (%s?)"
|
||||
msgstr "option ambiguë : %s (%s?)"
|
||||
msgstr "option ambiguë : %s (%s ?)"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "apksigner not found! Cannot sign or verify modern APKs"
|
||||
@ -2105,6 +2195,11 @@ msgstr "conflit de subparser : %s"
|
||||
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) : '{}'"
|
||||
|
||||
#: ../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) : '{}'"
|
||||
@ -2279,6 +2374,11 @@ msgstr "local_copy_dir doit être un dossier et non un fichier !"
|
||||
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
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Maintenant, définissez-les 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
|
||||
@ -2436,6 +2536,11 @@ msgstr "repo_icon \"repo/icons/%s\" n'existe pas, génération d'une icône de s
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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."
|
||||
@ -2450,6 +2555,11 @@ msgstr "s3cmd synchroniser les index de {path} vers {url} et les supprimer"
|
||||
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}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "bibliothèque partagée"
|
||||
@ -2654,6 +2764,31 @@ msgstr "{path} n’existe pas ! Créez-le en exécutant :"
|
||||
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
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' n'est pas configuré dans 'config.yml' !"
|
||||
|
||||
#: ../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!"
|
||||
@ -2664,6 +2799,11 @@ msgstr "{path} a une taille nulle !"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-07-01 15:29+0000\n"
|
||||
"Last-Translator: Vancha March <tjipkevdh@gmail.com>\n"
|
||||
"Language-Team: Frisian <https://hosted.weblate.org/projects/f-droid/fdroidserver/fy/>\n"
|
||||
@ -90,6 +90,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: flater: %(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"
|
||||
@ -209,6 +214,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -286,6 +296,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -382,6 +396,11 @@ msgstr ""
|
||||
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 "Kontrolearje op fernijingen fan applikaasjes"
|
||||
@ -548,6 +567,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -614,6 +643,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -780,6 +814,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -844,6 +882,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1049,6 +1091,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1186,6 +1232,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1344,6 +1394,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1377,6 +1431,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1626,6 +1684,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1787,6 +1849,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1819,6 +1885,10 @@ msgstr "Gebrûk"
|
||||
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 ""
|
||||
@ -1848,6 +1918,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1905,6 +1979,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2054,6 +2132,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2228,6 +2310,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-09-21 08:05+0000\n"
|
||||
"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
|
||||
"Language-Team: Hebrew <https://hosted.weblate.org/projects/f-droid/fdroidserver/he/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 "איתור עדכונים ליישומונים"
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1685,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1850,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1886,10 @@ msgstr "שימוש"
|
||||
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 ""
|
||||
@ -1849,6 +1919,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1980,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2133,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-02-22 11:24+0000\n"
|
||||
"Last-Translator: Saurmandal <saurmandal@protonmail.com>\n"
|
||||
"Language-Team: Hindi <https://hosted.weblate.org/projects/f-droid/fdroidserver/hi/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 "अनुप्रयोगों के अपडेट के लिए जाँच करें"
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1685,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1850,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1886,10 @@ msgstr "प्रयोग"
|
||||
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 ""
|
||||
@ -1849,6 +1919,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1980,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2133,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2387,6 +2474,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2401,6 +2493,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2605,6 +2701,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2615,6 +2736,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1,22 +1,22 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# This file is put in the public domain.
|
||||
# Balázs Meskó <meskobalazs@mailbox.org>, 2020, 2021.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
|
||||
# KissPandur <zoltankiss.web@gmail.com>, 2022.
|
||||
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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2022-10-05 06:16+0000\n"
|
||||
"Last-Translator: KissPandur <zoltankiss.web@gmail.com>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Hungarian <https://hosted.weblate.org/projects/f-droid/fdroidserver/hu/>\n"
|
||||
"Language: hu\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.14.1\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -96,6 +96,11 @@ msgstr[1] "A(z) %(option)s kapcsoló %(number)d argumentumot igényel"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: hiba: %(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"
|
||||
@ -194,7 +199,7 @@ msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex mi
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "'{value}' is not a valid {field}, should be {pattern}"
|
||||
msgstr "A(z) „{value}” nem érvényes {field} érték itt: {appid}. Regex minta: {pattern}"
|
||||
msgstr "A(z) „{value}” nem érvényes {field} érték itt: minta: {pattern}"
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -215,6 +220,11 @@ msgstr "a /issues hiányzik"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Az URL argumentumként megadása szükséges."
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nem található aláíró-tanúsítvány itt: {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "PGP aláírások hozzáadása GnuPG segítségével a tároló csomagjaihoz"
|
||||
@ -292,6 +302,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -388,6 +402,11 @@ msgstr "A(z) „%s” kategória érvénytelen"
|
||||
msgid "Categories are not set"
|
||||
msgstr "A kategóriák nincsenek megadva"
|
||||
|
||||
#: ../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 "Alkalmazásfrissítések keresése"
|
||||
@ -555,6 +574,16 @@ msgstr "A leírás listát (%s) tartalmaz, de nem pontozott (*) vagy számozott
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "A leírás {length} karakteres hossza több, mint a {limit} karakteres korlát"
|
||||
|
||||
#: ../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 "Ne adja a hozzá a „disable:” szöveget az előállított összeállítási elemekhez"
|
||||
@ -621,6 +650,11 @@ msgstr ""
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Ismételt hivatkozás a(z) „{field}” mezőben: {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
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”!"
|
||||
@ -792,6 +826,11 @@ msgstr "Egyes alkalmazásoknál érvénytelen versionCode paraméterek találhat
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Több JAR aláírásblokkfájl található itt: {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Több aláíró-tanúsítvány található a tárolóhoz."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -818,7 +857,7 @@ msgstr "{apkfilename} található itt: {url}"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Found {count} problems in {filename}"
|
||||
msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}” alkalmazásban:"
|
||||
msgstr "Az átvizsgáló {count} problémát talált a(z) „{filename}” alkalmazásban"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -857,6 +896,11 @@ msgstr "A git távoli fej beállítás sikertelen: „%s”"
|
||||
msgid "Git reset failed"
|
||||
msgstr "A git helyreállítás sikertelen"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "A git almodul frissítése sikertelen"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "A git almodul szinkronizációs sikertelen"
|
||||
@ -976,7 +1020,7 @@ msgstr "Érvénytelen VercodeOperation: {field}"
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid VercodeOperation: {invalid_ops}"
|
||||
msgstr "Érvénytelen VercodeOperation: {field}"
|
||||
msgstr "Érvénytelen VercodeOperation: {invalid_ops}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
@ -1062,6 +1106,10 @@ msgstr "A minSdkVersion olvasása sikertelen: „{apkfilename}”"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Kulcstároló az aláírókulcshoz:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1201,6 +1249,11 @@ msgstr "Nem található csatolt eszköz"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Nincs aláíratlan könyvtár – nincs teendő"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "Nem található információ."
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Nem érvényes méretmegadás: „{}”"
|
||||
@ -1359,6 +1412,11 @@ msgstr "A napló beküldése ebbe a távoli git tárolóba"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "A bináris átláthatósági napló beküldése ide: {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "A git távoli fej beállítás sikertelen: „%s”"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1392,6 +1450,10 @@ msgstr "A packageName/versionCode/versionName olvasása sikertelen, az APK érv
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "A(z) {apkfilename} olvasása gyorsítótárból"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Megadott fájlok eltávolítása"
|
||||
@ -1468,7 +1530,7 @@ msgstr "A csomag forráskódjának átvizsgálása"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Scanner found {count} problems in {apk}"
|
||||
msgstr "Az átvizsgáló {count} problémát talált a(z) „{appid}” alkalmazásban:"
|
||||
msgstr "Az átvizsgáló {count} problémát talált a(z) „{apk}” alkalmazásban"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -1642,6 +1704,13 @@ msgstr ""
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 ""
|
||||
@ -1803,6 +1872,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1835,6 +1908,10 @@ msgstr "Használat"
|
||||
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 ""
|
||||
@ -1864,6 +1941,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1921,6 +2002,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2070,6 +2155,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2182,7 +2271,7 @@ msgstr "az index-v1-nek kell legyen aláírása, használja az „fdroid signind
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy
|
||||
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."
|
||||
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
|
||||
@ -2245,6 +2334,11 @@ msgstr ""
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
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
|
||||
@ -2403,6 +2497,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2417,6 +2516,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2621,6 +2724,31 @@ msgstr ""
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "Az „sdk_path” nincs megadva a „config.yml” fájlban."
|
||||
|
||||
#: ../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!"
|
||||
@ -2631,6 +2759,11 @@ msgstr ""
|
||||
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
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -7,7 +7,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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-06-23 23:32+0000\n"
|
||||
"Last-Translator: whenwesober <naomi16i_1298q@cikuh.com>\n"
|
||||
"Language-Team: Indonesian <https://hosted.weblate.org/projects/f-droid/fdroidserver/id/>\n"
|
||||
@ -95,6 +95,11 @@ msgstr[0] "opsi %(option)s memerlukan argumen sebanyak %(number)d"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: galat: %(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"
|
||||
@ -214,6 +219,11 @@ msgstr "/issues tidak ada"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "URL diperlukan sebagai argumen!"
|
||||
|
||||
#: ../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 "Tambah tanda tangan PGP menggunakan GnuPG untuk paket di repo"
|
||||
@ -291,6 +301,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -386,6 +400,11 @@ msgstr ""
|
||||
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 "Periksa pembaruan pada aplikasi"
|
||||
@ -552,6 +571,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -618,6 +647,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -784,6 +818,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -848,6 +886,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1053,6 +1095,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1190,6 +1236,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1348,6 +1398,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1381,6 +1435,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1629,6 +1687,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1790,6 +1852,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1822,6 +1888,10 @@ msgstr "Penggunaan"
|
||||
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 ""
|
||||
@ -1851,6 +1921,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1908,6 +1982,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2056,6 +2134,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2387,6 +2474,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2401,6 +2493,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' belum diatur di config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -16,13 +16,13 @@
|
||||
# Davide Neri <davnerix@gmail.com>, 2023.
|
||||
# Mirko Di <mirko@mirkodi.eu>, 2023.
|
||||
# coronabond <coronabond@airmail.cc>, 2023.
|
||||
# Random <random-r@users.noreply.hosted.weblate.org>, 2023.
|
||||
# Random <random-r@users.noreply.hosted.weblate.org>, 2023, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-09-06 17:31+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-13 17:01+0000\n"
|
||||
"Last-Translator: Random <random-r@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/f-droid/fdroidserver/it/>\n"
|
||||
"Language: it\n"
|
||||
@ -30,7 +30,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.0.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -110,6 +110,11 @@ msgstr[1] "l'opzione %(option)s richiede gli argomenti %(number)d"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: errore: %(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"
|
||||
@ -229,6 +234,11 @@ msgstr "/issues è mancante"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "È richiesto un URL come argomento!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nessun certificato di firma trovato in {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Aggiungi firme PGP con GnuPG per i pacchetti in un repository"
|
||||
@ -306,6 +316,11 @@ msgstr "L'app ha Binaries ma non ha AllowedAPKSigningKeys corrispondente per fis
|
||||
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"
|
||||
msgstr "L'app ha NoSourceSince o ArchivePolicy \"0 versioni\" ma AutoUpdateMode o UpdateCheckMode non sono None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -402,6 +417,11 @@ msgstr "La categoria \"%s\" non è valida"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Le categorie non sono impostate"
|
||||
|
||||
#: ../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 "Cerca gli aggiornamenti delle applicazioni"
|
||||
@ -568,6 +588,16 @@ msgstr "La descrizione ha un elenco (%s) ma non è puntato (*) né numerato (#)"
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "La descrizione di lunghezza {length} supera il limite di {limit} caratteri"
|
||||
|
||||
#: ../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 "Non aggiungere 'disable:' alle voci di compilazione generate"
|
||||
@ -634,6 +664,11 @@ msgstr "Voce \"%s\" duplicata nella configurazione dei mirror!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Link duplicato in '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERRORE: il sottocomando \"server\" è stato rimosso, usa \"deploy\"!"
|
||||
@ -804,6 +839,11 @@ msgstr "Trovati codici di versione non validi per alcune app"
|
||||
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."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -868,6 +908,11 @@ msgstr "Set-head remoto Git non riuscito: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Ripristino Git non riuscito"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Aggiornamento del sottomodulo Git non riuscito"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Sincronizzazione del sottomodulo Git non riuscita"
|
||||
@ -1073,6 +1118,10 @@ msgstr "Mantenimento della build fallita \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Keystore per la firma della chiave:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1210,6 +1259,11 @@ msgstr "Nessuna etichetta trovata"
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Definizione di dimensione non valida: \"{}\""
|
||||
@ -1368,6 +1422,11 @@ msgstr "Esegui il push del log in questo repository git remoto"
|
||||
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\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1401,6 +1460,11 @@ msgstr "Lettura di packageName/versionCode/versionName non riuscita, APK non val
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Lettura di {apkfilename} dalla cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "recupera l'ultima versione delle firme dal web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Rimozione dei file specificati"
|
||||
@ -1650,6 +1714,13 @@ msgstr "C'è una collisione keyalias - pubblicazione interrotta"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Queste sono le applicazioni che sono state archiviate dal repo principale."
|
||||
|
||||
#: ../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."
|
||||
|
||||
#: ../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 "Questo è un repository di applicazioni da utilizzare con F-Droid. Le applicazioni in questo repository sono o binari ufficiali compilati dagli sviluppatori dell'applicazione originale, o sono binari compilati dai sorgenti dall'amministratore di f-droid.org usando gli strumenti su https://gitlab.com/fdroid."
|
||||
@ -1818,10 +1889,15 @@ msgstr "UpdateCheckData deve usare l'URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData non è un URL valido: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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"
|
||||
msgstr "UpdateCheckMode impostato ma sembra che checkupdates non sia ancora stato eseguito."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckName is set to the known application ID, it can be removed"
|
||||
@ -1850,6 +1926,11 @@ msgstr "Uso"
|
||||
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"
|
||||
@ -1879,6 +1960,11 @@ msgstr "Usare la firma APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Usare la firma APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Usare la firma APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
msgstr "Utilizzando jarsigner di Java, non raccomandato per verificare APK! Utilizzare apksigner"
|
||||
@ -1936,6 +2022,10 @@ msgstr "Se configurato per indici firmati, crea solo indici senza segno in quest
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Quando linting l'intero repository yamllint è disabilitato per impostazione predefinita. Questa opzione costringe yamllint a prescindere."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distinguished Name' usato quando si generano le chiavi"
|
||||
@ -2085,6 +2175,11 @@ msgstr "subparser in conflitto: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "non ha potuto analizzare '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "non ha potuto analizzare la specifica srclib (nessun riferimento specificato): '{}'"
|
||||
@ -2259,6 +2354,11 @@ msgstr "local_copy_dir deve essere una cartella, non un file!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "il mirror '%s' non finisce con 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Ora imposta i seguenti campi 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
|
||||
@ -2416,6 +2516,11 @@ msgstr "repo_icon \"repo/icons/%s\" non esiste, genera un segnaposto."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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."
|
||||
@ -2430,6 +2535,11 @@ msgstr "s3cmd sincronizza gli indici {path} con {url} e cancella"
|
||||
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}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "libreria condivisa"
|
||||
@ -2634,6 +2744,31 @@ msgstr "{path} non esiste! Crealo eseguendo:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} ha una cattiva firma di file \"{pattern}\", possibile exploit di Janus!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "\"sdk_path\" non impostato in config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2644,6 +2779,11 @@ msgstr "{path} è di dimensioni zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} più di 200MB, caricare manualmente: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -1786,7 +1786,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2021-01-15 13:25+0000\n"
|
||||
"Last-Translator: R_SACI <rgebbid@gmail.com>\n"
|
||||
"Language-Team: Kabyle <https://hosted.weblate.org/projects/f-droid/fdroidserver/kab/>\n"
|
||||
@ -92,6 +92,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: tuccḍa: %(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"
|
||||
@ -211,6 +216,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -288,6 +298,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -384,6 +398,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -551,6 +570,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -617,6 +646,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -783,6 +817,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -848,6 +886,11 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Asfaḍ Git yecceḍ"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1053,6 +1096,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1190,6 +1237,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1348,6 +1399,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1381,6 +1436,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1630,6 +1689,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1791,6 +1854,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1823,6 +1890,10 @@ msgstr "Aseqdec"
|
||||
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 ""
|
||||
@ -1852,6 +1923,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1909,6 +1984,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2058,6 +2137,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2232,6 +2315,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2390,6 +2478,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2404,6 +2497,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2608,6 +2705,31 @@ msgstr "{path} ur yelli ara! Rnu-t s uselkem:"
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' ur yettwasbadu ara 'config.yml'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2618,6 +2740,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# This file is put in the public domain.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
|
||||
# Myeongjin Lee <aranet100@gmail.com>, 2021.
|
||||
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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Korean <https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/>\n"
|
||||
"Language: ko\n"
|
||||
@ -15,7 +15,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.14.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -94,6 +94,11 @@ msgstr[0] "%(option)s 옵션은 %(number)d 인자가 필요합니다"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -192,7 +197,7 @@ msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "'{value}' is not a valid {field}, should be {pattern}"
|
||||
msgstr "'{value}'는 {appid}에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}"
|
||||
msgstr "'{value}'에서 올바른 {field}가 아닙니다. 정규식 패턴: {pattern}"
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -213,6 +218,11 @@ msgstr "/이슈가 없습니다"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "저장소의 패키지를 위해 GnuPG를 사용하여 PGP 서명을 추가합니다"
|
||||
@ -290,6 +300,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -385,6 +399,11 @@ msgstr "카테고리 '%s'는 올바르지 않습니다"
|
||||
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 "애플리케이션으로의 업데이트를 확인합니다"
|
||||
@ -551,6 +570,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -617,6 +646,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -783,6 +817,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -848,6 +886,11 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "git svn 복제에 실패됨"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -967,7 +1010,7 @@ msgstr "잘못된 Vercode연산: {field}"
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid VercodeOperation: {invalid_ops}"
|
||||
msgstr "잘못된 Vercode연산: {field}"
|
||||
msgstr "잘못된 VercodeOperation연산: {invalid_ops}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
@ -1053,6 +1096,10 @@ msgstr "삭제 중: repo/{apkfilename}"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "서명 키를 위한 키저장소:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1190,6 +1237,11 @@ msgstr ""
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "버전 정보를 찾지 못했습니다"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr ""
|
||||
@ -1348,6 +1400,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1381,6 +1437,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1629,6 +1689,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1790,6 +1854,10 @@ msgstr "UpdateCheckData는 HTTPS URL을 사용해야 합니다: {url}"
|
||||
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 ""
|
||||
|
||||
#. 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"
|
||||
@ -1822,6 +1890,10 @@ msgstr "사용법"
|
||||
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 ""
|
||||
@ -1851,6 +1923,10 @@ msgstr ""
|
||||
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 "Java의 jarsigner를 사용하여, APK를 검증하는 것은 권장되지 않습니다! apksigner를 사용하세요"
|
||||
@ -1908,6 +1984,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2056,6 +2136,10 @@ msgstr "충돌하는 옵션 문자열: %s"
|
||||
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 ""
|
||||
@ -2230,6 +2314,11 @@ msgstr "local_copy_dir는 파일이 아니라, 디렉터리여야 합니다!"
|
||||
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 ""
|
||||
|
||||
#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2388,6 +2477,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2402,6 +2496,10 @@ msgstr "s3cmd 동기화는 {url}로 {path}를 색인하고 삭제합나다"
|
||||
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 ""
|
||||
@ -2605,6 +2703,31 @@ msgstr "{path}는 존재하지 않습니다! 실행하여 그것을 만드세
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path'가 config.yml에서 설정되어 있지 않습니다!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2615,6 +2738,11 @@ msgstr "{path}는 영 크기입니다!"
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-06-23 14:52+0000\n"
|
||||
"Last-Translator: abe1242 <abmdn1242@gmail.com>\n"
|
||||
"Language-Team: Malayalam <https://hosted.weblate.org/projects/f-droid/fdroidserver/ml/>\n"
|
||||
@ -95,6 +95,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -214,6 +219,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -291,6 +301,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -387,6 +401,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -553,6 +572,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -619,6 +648,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -785,6 +819,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -849,6 +887,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1054,6 +1096,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1191,6 +1237,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1349,6 +1399,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1382,6 +1436,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1631,6 +1689,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1795,6 +1857,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1827,6 +1893,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1856,6 +1926,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1913,6 +1987,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2062,6 +2140,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2236,6 +2318,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2393,6 +2480,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2407,6 +2499,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2611,6 +2707,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2621,6 +2742,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/>\n"
|
||||
@ -97,6 +97,11 @@ msgstr[1] "%(option)s-valget krever %(number)d argumenter"
|
||||
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"
|
||||
@ -219,6 +224,11 @@ msgstr "/issues mangler"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "valg -%s krever et argument"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Ingen signeringssertifikater funnet i {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Legg til PGP-signaturer for pakker i pakkebrønnen ved bruk av GnuPG"
|
||||
@ -297,6 +307,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -395,6 +409,11 @@ msgstr "Kategorien '%s' er ikke gyldig"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Kategoreier ikke satt"
|
||||
|
||||
#: ../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 "Se etter programoppdateringer"
|
||||
@ -568,6 +587,16 @@ msgstr "Beskrivelsen har en liste (%s), men er ikke punktvis (*) eller nummerert
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Beskrivelse av lengde {length} overstiger {limit} tegngrensen"
|
||||
|
||||
#: ../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 "Ikke legg til «deaktivert:» blant genererte bygg"
|
||||
@ -636,6 +665,11 @@ msgstr ""
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Dobbeltlenke i \"{field}\": {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
@ -814,6 +848,11 @@ msgstr "Noen programmer ble funnet å ha ugldige versionCodes"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Fant flere signeringssertifikater i {path}."
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Fant flere signeringssertifikater for pakkebrønn."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -880,6 +919,11 @@ msgstr "Git set-head annensteds hen mislyktes: «%s»"
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git-tilbakestilling mislyktes"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git-oppdatering av undermodul mislyktes"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git-synkronisering av undermodul mislyktes"
|
||||
@ -1093,6 +1137,10 @@ msgstr "Kunne ikke lese minSdkVersion: \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Nøkkellager for signeringsnøkkel:\t"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "Known debug key is used in AllowedAPKSigningKeys: "
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
|
||||
@ -1238,6 +1286,11 @@ msgstr "Fant ingen tilknyttede enheter"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Ingen usignert mappe - ingenting å gjøre"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "ingen versjonsinfo funnet!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Ikke en gyldig størrelsesdefinisjon: «{}»"
|
||||
@ -1404,6 +1457,11 @@ msgstr "Dytt loggen til denne Git-pakkebrønnen annensteds hen"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Dytter binærgjennomsiktighetslogg til {url}."
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git set-head annensteds hen mislyktes: «%s»"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1437,6 +1495,10 @@ msgstr "Kunne ikke lese packageName/versionCode/versionName, APK ugyldig: \"{apk
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Behandler {apkfilename}"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Fjerner angitte filer"
|
||||
@ -1694,6 +1756,13 @@ msgstr "Nøkkelaliaskollisjon - offentliggjøring stanset"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 ""
|
||||
@ -1859,6 +1928,10 @@ msgstr "UpdateCheckData må bruke HTTPS-nettadresse: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData er ikke en gyldig nettadresse: {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"
|
||||
@ -1892,6 +1965,11 @@ msgstr "Bruk"
|
||||
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"
|
||||
@ -1923,6 +2001,11 @@ msgstr "Bruker APK Signature v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Bruker APK Signature v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Bruker APK Signature v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
@ -1982,6 +2065,10 @@ msgstr "Når oppsatt for signerte indekser, vil kun usignerte indekser bli oppre
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 \"Entydig navn\" (DN) brukt ved generering av nøkler."
|
||||
@ -2138,6 +2225,10 @@ msgstr "konflikterende valgstreng: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "kunne ikke tolke'{path}'"
|
||||
|
||||
#: ../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 ""
|
||||
@ -2320,6 +2411,11 @@ msgstr "local_copy_dir må være ei mappe, ikke ei fil!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "speilet \"%s\" slutter ikke med \"fdroid\"."
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
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
|
||||
@ -2480,6 +2576,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr ""
|
||||
|
||||
#: ../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."
|
||||
@ -2495,6 +2596,11 @@ msgstr "s3cmd synkroniserer indekser {path} til {url} og sletter"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir slutter ikke med \"fdroid\", kanskje du mente: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "delt bibliotek"
|
||||
@ -2702,6 +2808,31 @@ msgstr "{path} finnes ikke. Opprett den ved å kjøre:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} har feilaktig filsignatur \"{pattern}\", mulig Janus-utnyttelse."
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' ble ikke funnet i config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2712,6 +2843,11 @@ msgstr "{path} er null størrelse."
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} er mer enn 200MB, last opp manuelt: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "{path}: \"{code}\" is not a valid ISO_3166-1 alpha-2 country code!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -1791,7 +1791,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -4,21 +4,21 @@
|
||||
# Michal L <michalrmsmi@wp.pl>, 2020, 2021.
|
||||
# mondstern <mondstern@snopyta.org>, 2021.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2021.
|
||||
# Agnieszka C <aga_04@o2.pl>, 2021, 2022, 2023.
|
||||
# Agnieszka C <aga_04@o2.pl>, 2021, 2022, 2023, 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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-05-26 19:39+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 18:44+0000\n"
|
||||
"Last-Translator: Agnieszka C <aga_04@o2.pl>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/f-droid/fdroidserver/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.18-dev\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.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -99,6 +99,11 @@ msgstr[2] "%(option)s opcje wymagają %(number)d argumentów"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: błąd: %(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"
|
||||
@ -218,6 +223,11 @@ msgstr "/nie ma problemów"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Adres URL jest wymagany jako argument!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nie znaleziono certyfikatów do podpisu w {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Dodaj podpisy PGP za pomocą GnuPG dla pakietów w repozytorium"
|
||||
@ -295,6 +305,11 @@ msgstr "Aplikacja ma Binaries, ale nie ma odpowiednich kluczy AllowedAPKSingKeys
|
||||
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
|
||||
#, fuzzy
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -392,6 +407,11 @@ msgstr "Kategorie '%s' są nieprawidłowe"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Kategorie nie są ustawione"
|
||||
|
||||
#: ../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 "Sprawdź aktualizacje aplikacji"
|
||||
@ -558,6 +578,16 @@ msgstr "Opis ma listę (%s), ale nie jest wypunktowana (*) ani ponumerowana (#)"
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Opis długości {length} przekracza limit {limit} char"
|
||||
|
||||
#: ../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 "Nie dodawaj „wyłącz:” do wygenerowanych wpisów kompilacji"
|
||||
@ -624,6 +654,11 @@ msgstr "Zduplikowany wpis „%s” w konfiguracji serwerów lustrzanych!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Zduplikowany link w '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "BŁĄD: podkomenda „serwer” została usunięta, użyj polecenia „deploy”!"
|
||||
@ -794,6 +829,11 @@ msgstr "Znaleziono nieprawidłowe kody wersji dla niektórych aplikacji"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Znaleziono wiele plików bloków podpisów JAR w {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Znaleziono wiele certyfikatów do podpisywania dla repozytorium."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -858,6 +898,11 @@ msgstr "Błąd zdalnego ustawiania Git: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Resetowanie Git nie powiodło się"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Aktualizacja submodułu Git nie powiodła się"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Nie udało się zsynchronizować modułu submodule Git"
|
||||
@ -1063,6 +1108,10 @@ msgstr "Utrzymywanie nieudanej kompilacji „{apkfilename}”"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Magazyn kluczy do podpisywania klucza:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1200,6 +1249,11 @@ msgstr "Nie znaleziono tagów"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Brak katalogu bez podpisu - nic nie można zrobić"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "nie znaleziono informacji o wersji"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Nieprawidłowa definicja rozmiaru: \"{}\""
|
||||
@ -1358,6 +1412,11 @@ msgstr "Przepchnij dziennik do tego zdalnego repozytorium git"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Przesyłanie dziennika przejrzystości plików binarnych do {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Błąd zdalnego ustawiania Git: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1391,6 +1450,11 @@ msgstr "Nie udało się odczytać packageName/versionCode/versionName, nieprawid
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Czytanie {apkfilename} z pamięci podręcznej"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "pobierz najnowszą wersję sygnatur z sieci"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Usuwanie określonych plików"
|
||||
@ -1641,6 +1705,13 @@ msgstr "Istnieje kolizja keyalias - wstrzymano publikowanie"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "To są aplikacje, które zostały zarchiwizowane w głównym repozytorium."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 "To jest repozytorium aplikacji używanych z F-Droid. Aplikacje w tym repozytorium są albo oficjalnymi plikami binarnymi utworzonymi przez oryginalnych programistów aplikacji, albo plikami binarnymi utworzonymi ze źródła przez administratora f-droid.org przy użyciu narzędzi na https://gitlab.com/fdroid."
|
||||
@ -1809,8 +1880,13 @@ msgstr "UpdateCheckData musi używać adresu URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData nie jest prawidłowym adresem URL: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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"
|
||||
|
||||
@ -1841,6 +1917,11 @@ msgstr "Zastosowanie"
|
||||
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"
|
||||
@ -1870,6 +1951,11 @@ msgstr "Używając APK Signature v2"
|
||||
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"
|
||||
|
||||
#: ../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"
|
||||
@ -1927,6 +2013,10 @@ msgstr "Po skonfigurowaniu dla indeksów podpisanych utwórz na tym etapie tylko
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Podczas linkowania całego repozytorium yamllint jest domyślnie wyłączony. Ta opcja wymusza yamllint niezależnie od tego."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distinguished Name' używana podczas generowania kluczy"
|
||||
@ -2077,6 +2167,11 @@ msgstr "kolidujący subparser: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "nie można przeanalizować '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "could not parse srclib spec (no ref specified):' {}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "could not parse srclib spec (no ref specified):' {}'"
|
||||
@ -2252,6 +2347,11 @@ msgstr "local_copy_dir musi być katalogiem, a nie plikiem!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "mirror '%s'nie kończy się na 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Teraz ustaw je 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
|
||||
@ -2409,6 +2509,11 @@ msgstr "repo_icon \"repo / icons / %s\" nie istnieje, generuje symbol zastępczy
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url musi kończyć się na /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 "nie zainstalowano ruamel.yaml, nie można zapisać metadanych."
|
||||
@ -2423,6 +2528,11 @@ msgstr "s3cmd zsynchronizuj indeksy {path} do {url} i usuń"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "pamięć podręczna skanera jest zniszczona! Możesz to wyczyścić poleceniem: „{clear}”"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir nie kończy się na \"fdroid\", może masz na myśli: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "biblioteka współdzielona"
|
||||
@ -2628,6 +2738,31 @@ msgstr "{path} nie istnieje! Utwórz go, uruchamiając:"
|
||||
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
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' nie jest ustawiony w config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2638,6 +2773,11 @@ msgstr "{path} ma zerowy rozmiar!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-07-02 15:51+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: Portuguese <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt/>\n"
|
||||
@ -97,6 +97,11 @@ msgstr[1] "A opção %(option)s requer os argumentos %(number)d"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: erro: %(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"
|
||||
@ -216,6 +221,11 @@ msgstr "está faltando o /issues"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Uma URL é necessária como um argumento!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nenhum certificado de assinatura encontrado em {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
|
||||
@ -293,6 +303,11 @@ msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes
|
||||
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
|
||||
#, fuzzy
|
||||
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 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -389,6 +404,11 @@ msgstr "As categorias '%s' não são válidas"
|
||||
msgid "Categories are not set"
|
||||
msgstr "As categorias não são definidas"
|
||||
|
||||
#: ../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 "Verificação de actualizações das aplicações"
|
||||
@ -555,6 +575,16 @@ msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é nume
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}"
|
||||
|
||||
#: ../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 "Não adicionar 'disable:' às entradas de compilação geradas"
|
||||
@ -621,6 +651,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Ligação duplicada em '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
|
||||
@ -791,6 +826,11 @@ msgstr "versionCodes inválidos encontrados para algumas apps"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Vários certificados de assinatura encontrados para o repositório."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -855,6 +895,11 @@ msgstr "Git remote set-head falhou: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset falhou"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git submodule update falhou"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git submodule sync falhou"
|
||||
@ -1060,6 +1105,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Armazenamento de chaves de assinatura:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1197,6 +1246,11 @@ msgstr "Nenhuma etiqueta encontrada"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Nenhum diretório não assinado - nada a fazer"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "nenhuma informação de versão encontrada"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Não é uma definição de tamanho válida: \"{}\""
|
||||
@ -1355,6 +1409,11 @@ msgstr "Submeter o registo de eventos para este repositório git remoto"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "A submeter o registo de transparência de binário para {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head falhou: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1388,6 +1447,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Lendo {apkfilename} do cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "buscar a versão de assinaturas mais recente da Web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Apagando ficheiros especificados"
|
||||
@ -1637,6 +1701,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Estas são as aplicações que foram arquivadas do repositório 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 ""
|
||||
"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/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 "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid."
|
||||
@ -1805,8 +1876,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
|
||||
|
||||
@ -1837,6 +1913,11 @@ msgstr "Utilização"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Utilização: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main 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/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"
|
||||
@ -1866,6 +1947,11 @@ msgstr "A usar a assinatura APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "A usar a assinatura APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "A usar a assinatura APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1923,6 +2009,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
|
||||
@ -2072,6 +2162,11 @@ msgstr "subanalisador conflitante: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "não foi possível analisar '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name 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 (no ref specified): '{}'"
|
||||
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
|
||||
@ -2246,6 +2341,11 @@ msgstr "local_copy_dir deve ser directory, não um ficheiro!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "espelho '%s' não termina com 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Agora configure estes 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
|
||||
@ -2403,6 +2503,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url precisa de terminar com /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 "o ruamel.yaml não está instalado, não é possível escrever metadados."
|
||||
@ -2417,6 +2522,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e apaga"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "biblioteca compartilhada"
|
||||
@ -2621,6 +2731,31 @@ msgstr "{path} não existe! Crie-o executando:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' não definido em 'config.yml'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2631,6 +2766,11 @@ msgstr "{path} tem um tamanho de zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} mais de 200MB, enviar manualmente: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -13,7 +13,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-08-18 15:51+0000\n"
|
||||
"Last-Translator: The Cats <philosoph@danwin1210.de>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/>\n"
|
||||
@ -102,6 +102,11 @@ msgstr[1] "opção %(option)s necessita %(number)d argumentos"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: erro: %(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"
|
||||
@ -221,6 +226,11 @@ msgstr "está faltando o /issues"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Uma URL é necessária como um argumento!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nenhum certificado de assinatura encontrado em {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
|
||||
@ -298,6 +308,11 @@ msgstr "O aplicativo tem binários, mas não tem AllowedAPKSigningKeys correspon
|
||||
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
|
||||
#, fuzzy
|
||||
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\", mas AutoUpdateMode ou UpdateCheckMode não são None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -394,6 +409,11 @@ msgstr "Categorias '%s' não são válidas"
|
||||
msgid "Categories are not set"
|
||||
msgstr "As categorias não estão definidas"
|
||||
|
||||
#: ../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 "Verifica se existem atualizações para os aplicativos"
|
||||
@ -560,6 +580,16 @@ msgstr "Descrição tem uma lista (%s), mas não é com marcadores (*) nem numer
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "A descrição de tamanho {length} está acima do limite de {limit} caracteres"
|
||||
|
||||
#: ../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 "Não adicione \"disable:\" para as entradas de compilação geradas"
|
||||
@ -626,6 +656,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Link duplicado em '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
|
||||
@ -796,6 +831,11 @@ msgstr "Encontrado versões de códigos inválidas para alguns aplicativos"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Encontrados vários arquivos de bloqueio de assinatura JAR em {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Encontrado vários certificados de assinatura para o repositório."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -860,6 +900,11 @@ msgstr "Git remote set-head falhou: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Falha no 'reset' do Git"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Falha na atualização do submódulo Git"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Falha na sincronização do submódulo Git"
|
||||
@ -1065,6 +1110,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Armazenamento de chaves de assinatura:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1202,6 +1251,11 @@ msgstr "Nenhuma etiqueta encontrada"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Nenhum diretório não assinado - nada a fazer"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "nenhuma informação de versão encontrada"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Não é uma definição de tamanho válida: \"{}\""
|
||||
@ -1360,6 +1414,11 @@ msgstr "Mandar o registro de mudanças para este repositório git remoto"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Atualizar o log de transparência de um binário para {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head falhou: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1393,6 +1452,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Lendo {apkfilename} do cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "obter a versão de assinaturas mais recente da Web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Removendo arquivos especificados"
|
||||
@ -1642,6 +1706,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Estas são as aplicações que foram arquivadas a partir do repositório 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 ""
|
||||
"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/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 "Este é um repositório de aplicativos a serem usados com o F-Droid. Os aplicativos neste repositório são binários oficiais compilados pelos desenvolvedores do aplicativo original ou são binários compilados a partir da fonte por f-droid.org usando as ferramentas em https://gitlab.com/fdroid."
|
||||
@ -1810,8 +1881,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
|
||||
|
||||
@ -1842,6 +1918,11 @@ msgstr "Uso"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Uso: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main 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/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"
|
||||
@ -1871,6 +1952,11 @@ msgstr "Usando a Assinatura APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Usando a Assinatura APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Usando a Assinatura APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1928,6 +2014,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Ao cotar todo o repositório, o yamllint é desativado por padrão. Independente de qualquer coisa esta opção impõem o uso do yamllint."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
|
||||
@ -2077,6 +2167,11 @@ msgstr "subanalizador conflitante: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "não foi possível analisar '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name 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 (no ref specified): '{}'"
|
||||
msgstr "não foi possível analisar a especificação srclib (referência sem especificação): '{}'"
|
||||
@ -2251,6 +2346,11 @@ msgstr "local_copy_dir deve ser um diretório, não um arquivo!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "espelho '%s' não termina com 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Agora defina estes 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
|
||||
@ -2408,6 +2508,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, gerando um espaço reservado."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url precisa terminar com /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 "o ruamel.yaml não está instalado, não é possível escrever os metadados."
|
||||
@ -2422,6 +2527,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e exclui"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "o cache do scanner está malformado! Você pode limpá-lo com: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir não termina com \"fdroid\", talvez você quis: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "biblioteca compartilhada"
|
||||
@ -2626,6 +2736,31 @@ msgstr "{path} não existe! Crie-o executando:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} tem uma má assinatura de arquivo \"{pattern}\", um exploração Janus é possível!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "\"sdk_path\" não definido em config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2636,6 +2771,11 @@ msgstr "{path} tem um tamanho de zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "o {path} tem mais de 200MB, upload manual: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-07-02 15:51+0000\n"
|
||||
"Last-Translator: ssantos <ssantos@web.de>\n"
|
||||
"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_PT/>\n"
|
||||
@ -98,6 +98,11 @@ msgstr[1] "A opção %(option)s requer os argumentos %(number)d"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: erro: %(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"
|
||||
@ -217,6 +222,11 @@ msgstr "está faltando o /issues"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Uma URL é necessária como um argumento!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nenhum certificado de assinatura encontrado em {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Adicione assinaturas PGP usando GnuPG para os pacotes no repositório"
|
||||
@ -294,6 +304,11 @@ msgstr "A app tem binários, mas não tem AllowedAPKSigningKeys correspondentes
|
||||
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
|
||||
#, fuzzy
|
||||
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 versões\", mas AutoUpdateMode ou UpdateCheckMode não são Nenhum"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -390,6 +405,11 @@ msgstr "As categorias '%s' não são válidas"
|
||||
msgid "Categories are not set"
|
||||
msgstr "As categorias não são definidas"
|
||||
|
||||
#: ../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 "Verificação de actualizações das aplicações"
|
||||
@ -556,6 +576,16 @@ msgstr "A descrição tem a lista (%s), mas não tem marcadores (*), nem é nume
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "A descrição de comprimento {length} é sobre o limite de char {limit}"
|
||||
|
||||
#: ../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 "Não adicionar 'disable:' às entradas de compilação geradas"
|
||||
@ -622,6 +652,11 @@ msgstr "Entrada \"%s\" duplicada na configuração de espelhos!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Ligação duplicada em '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERRO: o subcomando \"server\" foi removido, use \"deploy\"!"
|
||||
@ -792,6 +827,11 @@ msgstr "versionCodes inválidos encontrados para algumas apps"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Vários ficheiros de blocos de assinaturas JAR foram encontrados em {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Vários certificados de assinatura encontrados para o repositório."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -856,6 +896,11 @@ msgstr "Git remote set-head falhou: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset falhou"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git submodule update falhou"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git submodule sync falhou"
|
||||
@ -1061,6 +1106,10 @@ msgstr "Mantendo a compilação com falha \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Armazenamento de chaves de assinatura:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1198,6 +1247,11 @@ msgstr "Nenhuma etiqueta encontrada"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Nenhum diretório não assinado - nada a fazer"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "não há informações de versão encontrada"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Não é uma definição de tamanho válida: \"{}\""
|
||||
@ -1356,6 +1410,11 @@ msgstr "Submeter o registo de eventos para este repositório git remoto"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "A submeter o registo de transparência de binário para {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head falhou: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1389,6 +1448,11 @@ msgstr "Falha ao ler packageName/versionCode/versionName, APK inválido: '{apkfi
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Lendo {apkfilename} do cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "buscar a versão de assinaturas mais recente da Web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Apagando ficheiros especificados"
|
||||
@ -1638,6 +1702,13 @@ msgstr "Há uma colisão do keyalias - publicação parada"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Estas são as aplicações que foram arquivadas do repositório 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 ""
|
||||
"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/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 "Este é um repositório de apps a serem usados com o F-Droid. Aplicações neste repositório são binários oficiais compilados pelos programadores da aplicação original ou são binários compilados da fonte por f-droid.org a usar as ferramentas em https://gitlab.com/fdroid."
|
||||
@ -1806,8 +1877,13 @@ msgstr "UpdateCheckData deve usar um URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode é definido, mas parece que likecheckupdates ainda não foi executado"
|
||||
|
||||
@ -1838,6 +1914,11 @@ msgstr "Utilização"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Utilização: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Use /HEAD instead of /master or /main 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/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"
|
||||
@ -1867,6 +1948,11 @@ msgstr "A usar a assinatura APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "A usar a assinatura APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "A usar a assinatura APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1924,6 +2010,10 @@ msgstr "Quando configurado para índices assinados, crie apenas índices não as
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Ao cotar todo o repositório o yamllint é desativado por predefinição. Esta opção força o yamllint independentemente."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distiguished Name' usado na geração de chaves"
|
||||
@ -2073,6 +2163,11 @@ msgstr "subanalisador conflitante: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "não foi possível analisar '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name 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 (no ref specified): '{}'"
|
||||
msgstr "não foi possível analisar a especificação srclib (referência não especificada): '{}'"
|
||||
@ -2247,6 +2342,11 @@ msgstr "local_copy_dir deve ser directory, não um ficheiro!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "espelho '%s' não termina com 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Agora configure estes 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
|
||||
@ -2404,6 +2504,11 @@ msgstr "repo_icon \"repo/icons/%s\" não existe, a gerar um espaço reservado."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url precisa de terminar com /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 "o ruamel.yaml não está instalado, não é possível escrever metadados."
|
||||
@ -2418,6 +2523,11 @@ msgstr "s3cmd sincroniza índices {path} para {url} e exclui"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "o cache do scanner está malformado! Pode limpá-lo com: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir não termina com \"fdroid\", talvez quis: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "biblioteca compartilhada"
|
||||
@ -2622,6 +2732,31 @@ msgstr "{path} não existe! Crie-o executando:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} tem uma má assinatura de ficheiro \"{pattern}\", um exploração Janus é possível!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' não definido em 'config.yml'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2632,6 +2767,11 @@ msgstr "{path} tem um tamanho de zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} mais de 200MB, enviar manualmente: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -2,22 +2,23 @@
|
||||
# This file is put in the public domain.
|
||||
# Daniel Șerbănescu <daniel@serbanescu.dk>, 2021.
|
||||
# Christian Eichert <c@zp1.net>, 2021.
|
||||
# Simona Iacob <s@zp1.net>, 2021, 2022, 2023.
|
||||
# Licaon Kter <licaon.kter@protonmail.com>, 2021, 2022.
|
||||
# Simona Iacob <s@zp1.net>, 2021, 2022, 2023, 2024.
|
||||
# Licaon Kter <licaon.kter@protonmail.com>, 2021, 2022, 2023.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2024.
|
||||
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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-08-10 18:46+0000\n"
|
||||
"Last-Translator: Simona Iacob <s@zp1.net>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Romanian <https://hosted.weblate.org/projects/f-droid/fdroidserver/ro/>\n"
|
||||
"Language: ro\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 5.0-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -74,7 +75,7 @@ msgstr "\"{path}\" nu este un format de fișier acceptat (utilizați: metadata/*
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "\"{path}\" is signed by a key that is not allowed:"
|
||||
msgstr "\"{path}\" \"{path}\" este semnat de o cheie care nu este permisă:"
|
||||
msgstr "\"{path}\" este semnat de o cheie care nu este permisă:"
|
||||
|
||||
#: ../fdroidserver/import_subcommand.py
|
||||
#, python-brace-format
|
||||
@ -98,6 +99,11 @@ msgstr[2] "Opțiunea %(option)s necesită %(number)d argumente"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: eroare: %(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"
|
||||
@ -217,6 +223,11 @@ msgstr "/problemele lipsesc"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Un URL este necesar ca argument!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "Nu s-au găsit certificate de semnare în {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Adăugați semnături PGP folosind GnuPG pentru pachetele din depozit"
|
||||
@ -294,6 +305,11 @@ msgstr "Aplicația are binare, dar nu are AllowedAPKSigningKeys corespunzătoare
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 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
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -314,12 +330,12 @@ msgstr "Arhivare {apkfilename} cu semnătură invalidă!"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "AutoUpdateMode with UpdateCheckMode: HTTP must have a pattern."
|
||||
msgstr ""
|
||||
msgstr "AutoUpdateMode cu UpdateCheckMode: HTTP trebuie să aivă un format."
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-brace-format
|
||||
msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}"
|
||||
msgstr ""
|
||||
msgstr "Intrare de tip \"{mirrortype}\" greșită în configurația oglinzilor: {mirror}"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint="
|
||||
@ -391,6 +407,11 @@ msgstr "Categoriile \"%s\" nu sunt valabile"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Categoriile nu sunt setate"
|
||||
|
||||
#: ../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 "Verificați dacă există actualizări ale aplicațiilor"
|
||||
@ -420,7 +441,7 @@ msgstr "Efectuați modificări"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Conflicting \"{field}\" definitions between .yml and localized files:"
|
||||
msgstr ""
|
||||
msgstr "Definiții \"{field}\" contradictorii între fișierele .yml și cele localizate:"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time."
|
||||
@ -557,6 +578,16 @@ msgstr "Descrierea are o listă (%s), dar nu este punctată (*) și nici numerot
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Descrierea lungimii {length} este peste limita {limit} limitei de caractere"
|
||||
|
||||
#: ../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 "Nu adăugați \"disable:\" la intrările de construcție generate"
|
||||
@ -611,18 +642,23 @@ msgstr "Descărcarea {url} a eșuat. {error}"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Duplicate Anti-Feature declaration at {path} was ignored!"
|
||||
msgstr ""
|
||||
msgstr "Declarația duplicată Anti-Feature la {path} a fost ignorată!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-format
|
||||
msgid "Duplicate entry \"%s\" in mirrors config!"
|
||||
msgstr ""
|
||||
msgstr "Intrare duplicată \"%s\" în oglinzile config!"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Legătură duplicată în \"{field}\": {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ERROR: Subcomanda \"server\" a fost eliminată, utilizați \"deploy\"!"
|
||||
@ -669,7 +705,7 @@ msgstr "Eroare la obținerea adresei repo"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "Exit with a non-zero code if problems were found"
|
||||
msgstr ""
|
||||
msgstr "Ieșiți cu un cod diferit de zero dacă au fost găsite probleme"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Extract application metadata from a source repository"
|
||||
@ -793,6 +829,11 @@ msgstr "Am găsit coduri de versiune invalide pentru unele aplicații"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Am găsit mai multe fișiere JAR Signature Block în {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "S-au găsit mai multe certificate de semnare pentru depozit."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -817,9 +858,9 @@ msgid "Found {apkfilename} at {url}"
|
||||
msgstr "Am găsit {apkfilename} la {url}"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Found {count} problems in {filename}"
|
||||
msgstr "Scanerul a găsit {count} probleme în {appid}:"
|
||||
msgstr "Am găsit {count} probleme în {filename}"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -857,6 +898,11 @@ msgstr "Git remote set-head a eșuat: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Resetarea Git a eșuat"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Actualizarea submodulelor Git a eșuat"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Sincronizarea submodulelor Git a eșuat"
|
||||
@ -1062,6 +1108,10 @@ msgstr "Nu a reușit să construiască \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Keystore pentru cheia de semnare:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1199,6 +1249,11 @@ msgstr "Nu s-au găsit etichete"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Niciun director nesemnat - nimic de făcut"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "nu s-au găsit informații despre versiune"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Nu este o definiție valabilă a dimensiunii: \"{}\""
|
||||
@ -1357,6 +1412,11 @@ msgstr "Împingeți jurnalul în acest depozit de la distanță git"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Trimiterea jurnalului de transparență binară la {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head a eșuat: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1381,7 +1441,7 @@ msgid "Reading packageName/versionCode/versionName failed, APK invalid: '{apkfil
|
||||
msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Reading packageName/versionCode/versionName failed,APK invalid: '{apkfilename}'"
|
||||
msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apkfilename}'"
|
||||
|
||||
@ -1390,6 +1450,11 @@ msgstr "Citirea packageName/versionCode/versionName a eșuat, APK invalid: '{apk
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Citirea {apkfilename} din memoria cache"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "extrage cea mai recentă versiune de semnături de pe web"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Eliminarea fișierelor specificate"
|
||||
@ -1453,7 +1518,7 @@ msgstr "Rularea wget în {path}"
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-brace-format
|
||||
msgid "SHA-256 of {url} does not match entry!"
|
||||
msgstr ""
|
||||
msgstr "SHA-256 din {url} nu se potrivește cu intrarea!"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Scan the resulting APK(s) for known non-free classes."
|
||||
@ -1464,9 +1529,9 @@ msgid "Scan the source code of a package"
|
||||
msgstr "Scanarea codului sursă al unui pachet"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Scanner found {count} problems in {apk}"
|
||||
msgstr "Scanerul a găsit {count} probleme în {appid}:"
|
||||
msgstr "Scanerul a găsit {count} probleme în {apk}"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -1640,6 +1705,13 @@ msgstr "Există o coliziune keyalias - publicarea a fost oprită"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Acestea sunt aplicațiile care au fost arhivate din depozitul 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 ""
|
||||
"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/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 "Acesta este un depozit de aplicații care pot fi utilizate cu F-Droid. Aplicațiile din acest depozit sunt fie binare oficiale construite de către dezvoltatorii aplicațiilor originale, fie binare construite din sursă de către administratorul f-droid.org folosind instrumentele de pe https://gitlab.com/fdroid."
|
||||
@ -1796,7 +1868,7 @@ msgstr "UpdateCheckData are un URL invalid: {url}"
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "UpdateCheckData must match the version code as integer (\\d or [0-9]): {codeex}"
|
||||
msgstr ""
|
||||
msgstr "UpdateCheckData trebuie să corespundă codului versiunii ca număr întreg (\\d sau [0-9]): {codeex}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
@ -1808,10 +1880,15 @@ msgstr "UpdateCheckData trebuie să utilizeze un URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData nu este un URL valid: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr ""
|
||||
msgstr "UpdateCheckMode este setat, dar se pare că checkupdates nu a fost încă rulat."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckName is set to the known application ID, it can be removed"
|
||||
@ -1840,6 +1917,11 @@ msgstr "Utilizare"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Utilizare: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
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 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ă"
|
||||
@ -1869,6 +1951,11 @@ msgstr "Folosind APK Signature v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Folosind APK Signature v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Folosind APK Signature v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1881,7 +1968,7 @@ msgstr "Folosind androguard din \"{path}\""
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Using blank dictionary instead of contents of {path}!"
|
||||
msgstr ""
|
||||
msgstr "Utilizarea dicționarului gol în loc de conținutul lui {path}!"
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
#, python-brace-format
|
||||
@ -1926,6 +2013,10 @@ msgstr "Atunci când este configurat pentru indici cu semnătură, creați numai
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Atunci când se face linting pentru întregul depozit, yamllint este dezactivat în mod implicit. Această opțiune forțează yamllint indiferent de aceasta."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 \"Distinguished Name\" utilizat la generarea cheilor"
|
||||
@ -1995,7 +2086,7 @@ msgstr "argumentul \"-\" cu modul %r"
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, python-format
|
||||
msgid "argument %(argument_name)s: %(message)s"
|
||||
msgstr ""
|
||||
msgstr "argument %(argument_name)s: %(message)s"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid "attempting bare SSH connection to test deploy key:"
|
||||
@ -2012,7 +2103,7 @@ msgstr "nu se poate deschide '%(filename)s': %(error)s"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "can't open non-https url: '{};"
|
||||
msgstr ""
|
||||
msgstr "nu se poate deschide un URL non-https: '{};"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, python-brace-format
|
||||
@ -2062,12 +2153,12 @@ msgstr[1] "șiruri de opțiuni conflictuale: %s"
|
||||
msgstr[2] "șiruri de opțiuni conflictuale: %s"
|
||||
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "conflicting subparser alias: %s"
|
||||
msgstr "șir de opțiuni conflictuale: %s"
|
||||
msgstr "șir de alias conflictual: %s"
|
||||
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "conflicting subparser: %s"
|
||||
msgstr "șir de opțiuni conflictuale: %s"
|
||||
|
||||
@ -2076,6 +2167,11 @@ msgstr "șir de opțiuni conflictuale: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "nu s-a putut analiza '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "nu a putut analiza specificația srclib (nu a fost specificat niciun ref): '{}'"
|
||||
@ -2112,14 +2208,12 @@ msgid "dest= is required for options like %r"
|
||||
msgstr "dest= este necesar pentru opțiuni precum %r"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy
|
||||
msgid "downloading '{}'"
|
||||
msgstr "Descărcare %s"
|
||||
msgstr "descărcare '{}'"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy
|
||||
msgid "downloading scanner signatures from '{}' failed"
|
||||
msgstr "Eliminarea semnăturii misterioase din {apkfilename}"
|
||||
msgstr "descărcarea semnăturilor de scaner de la '{}' a eșuat"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "executable binary, possibly code"
|
||||
@ -2159,7 +2253,7 @@ msgstr "fdroid [<comandă>] [-h|--help|--version|<args>]"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "fetch the latest version of signatures from the web"
|
||||
msgstr ""
|
||||
msgstr "extrage cea mai recentă versiune de semnături de pe web"
|
||||
|
||||
#: /usr/lib/python3.11/optparse.py
|
||||
msgid "floating-point"
|
||||
@ -2228,7 +2322,7 @@ msgstr "șir de opțiuni invalid %(option)r: trebuie să înceapă cu un caracte
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "ipfs_cid not found, skipping CIDv1 generation"
|
||||
msgstr ""
|
||||
msgstr "ipfs_cid nu a fost găsit, sărind peste generarea CIDv1"
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -2253,6 +2347,11 @@ msgstr "local_copy_dir trebuie să fie un director, nu un fișier!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "oglinda '%s' nu se termină cu 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Acum setați-le î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
|
||||
@ -2262,7 +2361,7 @@ msgstr "argumentele care se exclud reciproc trebuie să fie opționale"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
msgid "next {name} cache update due in {time}"
|
||||
msgstr ""
|
||||
msgstr "următoarea actualizare a memoriei cache {name} va fi efectuată în {time}"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, python-brace-format
|
||||
@ -2373,9 +2472,8 @@ msgid "optional arguments"
|
||||
msgstr "argumente opționale"
|
||||
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, fuzzy
|
||||
msgid "options"
|
||||
msgstr "Opțiuni"
|
||||
msgstr "opțiuni"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
#, python-brace-format
|
||||
@ -2395,7 +2493,7 @@ msgstr "jurnalul procesului deploy {path} la {dest} a eșuat!"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "reference binary missing signature"
|
||||
msgstr ""
|
||||
msgstr "referință binară semnătură lipsă"
|
||||
|
||||
#: ../fdroidserver/signatures.py
|
||||
#, python-brace-format
|
||||
@ -2411,6 +2509,11 @@ msgstr "repo_icon \"repo/icons/%s\" nu există, se generează un înlocuitor."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url trebuie să se termine cu /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 nu este instalat, nu poate scrie metadatele."
|
||||
@ -2423,7 +2526,12 @@ msgstr "s3cmd sincronizează indexurile {path} cu {url} și șterge"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
msgstr "cache-ul scanerului este deformat! Puteți să o ștergeți cu: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir nu se termină cu \"fdroid\", poate ai vrut să spui: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
@ -2471,7 +2579,7 @@ msgstr "bibliotecă statică"
|
||||
#: ../fdroidserver/build.py
|
||||
#, python-brace-format
|
||||
msgid "supplied reference binary has allowed signer {signer}"
|
||||
msgstr ""
|
||||
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
|
||||
@ -2596,7 +2704,7 @@ msgid "{build_flag} must be an integer, found: {value}"
|
||||
msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "{build_flag} must be list or string, found: {value}"
|
||||
msgstr "{build_flag} trebuie să fie un număr întreg, găsit: {value}"
|
||||
|
||||
@ -2630,6 +2738,31 @@ msgstr "{path} nu există! Creați-l prin rularea:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} are o semnătură proastă a fișierului \"{pattern}\", posibil exploit Janus!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' nu este setat în 'config.yml'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2640,6 +2773,11 @@ msgstr "{path} este de dimensiune zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} mai mult de 200MB, încărcați manual: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -12,20 +12,21 @@
|
||||
# Чтабс <chtabs2k19@gmail.com>, 2021.
|
||||
# Andrei Stepanov <adem4ik@gmail.com>, 2022.
|
||||
# Макар Разин <makarrazin14@gmail.com>, 2023.
|
||||
# Alexander Ivanov <saiv46.dev@gmail.com>, 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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-05-28 07:54+0000\n"
|
||||
"Last-Translator: Andrey <andrey@mailbox.org>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-02-23 12:59+0000\n"
|
||||
"Last-Translator: Alexander Ivanov <saiv46.dev@gmail.com>\n"
|
||||
"Language-Team: Russian <https://hosted.weblate.org/projects/f-droid/fdroidserver/ru/>\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 4.18-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -42,7 +43,7 @@ msgid ""
|
||||
"{path} encoded for the DEBUG_KEYSTORE secret variable:"
|
||||
msgstr ""
|
||||
"\n"
|
||||
"зашифрованный путь {path}, который будет присвоен скрытой переменной DEBUG_KEYSTORE:"
|
||||
"{path} закодирован в скрытую переменную DEBUG_KEYSTORE:"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-format
|
||||
@ -106,10 +107,15 @@ msgstr[2] "Параметр %(option)s требует %(number)d аргумен
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
msgstr "найдено %d ошибок"
|
||||
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
|
||||
@ -156,15 +162,15 @@ msgstr "Значение 'keystore` — NONE, но 'smartcardoptions' не за
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "'keystore' not found in config.yml!"
|
||||
msgstr "В config.yml нет переменной 'keystore'!"
|
||||
msgstr "'keystore' не найден в config.yml!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "'keystorepass' not found in config.yml!"
|
||||
msgstr "В config.yml нет переменной 'keystorepass'!"
|
||||
msgstr "'keystorepass' не найден в config.yml!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "'repo_keyalias' not found in config.yml!"
|
||||
msgstr "В config.yml нет переменной 'repo_ keyalias'!"
|
||||
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
|
||||
@ -225,6 +231,11 @@ msgstr "Не хватает /issues"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "В качестве аргумента нужен URL-адрес!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "В {path} не обнаружены сертификаты для подписывания"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Добавить PGP подписи для пакетов в репозитории с помощью GnuPG"
|
||||
@ -302,6 +313,11 @@ msgstr "Приложение имеет двоичные файлы, но не
|
||||
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 версий\", но AutoUpdateMode или UpdateCheckMode не равны None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -399,6 +415,11 @@ msgstr "Неправильные категории: '%s'"
|
||||
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 "Проверить обновления для приложений"
|
||||
@ -529,7 +550,7 @@ msgstr "Переменная DEBUG_KEYSTORE пустая или заполнен
|
||||
|
||||
#: ../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
|
||||
@ -565,6 +586,16 @@ msgstr "В описании есть неразмеченный список (%s
|
||||
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 ""
|
||||
|
||||
#: ../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 "Не добавлять 'disable:' к сгенерированным данным сборки"
|
||||
@ -631,6 +662,11 @@ msgstr "Дублирующаяся запись \"%s\" в конфигураци
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Точная копия ссылки в '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ОШИБКА: подкоманда \"server\" была удалена, используйте \"deploy\"!"
|
||||
@ -801,6 +837,11 @@ msgstr "Для некоторых приложений обнаружены не
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "В {path} обнаружено несколько сертификатов (JAR Signature Block File)"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Для этого репозитория обнаружено несколько ключей для подписывания."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -865,6 +906,11 @@ msgstr "Не удалось настроить HEAD для удаленного
|
||||
msgid "Git reset failed"
|
||||
msgstr "Не удалось отменить изменения (git reset)"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Не удалось обновить модули Git (git submodules update)"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Не удалось синхронизировать модули Git (git submodules sync)"
|
||||
@ -1070,6 +1116,10 @@ msgstr "Сохранение неудачной сборки \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Хранилище ключа для подписывания:→\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1207,6 +1257,11 @@ msgstr "Теги не найдены"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Директории с неподписанными данными не существует. До новых встреч"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "информация о версии не найдена"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Неверное определение размера: \"{}\""
|
||||
@ -1365,6 +1420,11 @@ msgstr "Отправить лог в удаленный репозиторий g
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Публикация лога прозрачности кода в {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Не удалось настроить HEAD для удаленного репозитория (git remote set-head): \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1372,7 +1432,7 @@ msgstr "Публикация в {url}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Quickly start a new repository"
|
||||
msgstr "Создать новый репозиторий (укороченная процедура)"
|
||||
msgstr "Быстро создать новый репозиторий"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Read all the metadata files and exit"
|
||||
@ -1398,6 +1458,11 @@ msgstr "Не удалось прочитать packageName/versionCode/versionNa
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Чтение {apkfilename} из кеша"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "получить последнюю версию подписей из интернета"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Удаление выбранных файлов"
|
||||
@ -1534,7 +1599,7 @@ msgstr "Подписать пакеты и поместить в репозит
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Sign indexes created using update --nosign"
|
||||
msgstr "Подписать индексы, созданные с флагом \"update --nosign\""
|
||||
msgstr "Подписать индексы созданные с \"update --nosign\""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Skip scanning the source code for binaries and other problems"
|
||||
@ -1648,6 +1713,13 @@ msgstr "Есть расхождения в алиасах ключей для п
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Это те приложения, которые были заархивированы из основного репозитория."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
msgstr ""
|
||||
"ОШИБКА: эту команду ни в коем случае нельзя использовать для создания зеркала f-droid.org!\n"
|
||||
"Оно занимает больше 200 Гб."
|
||||
|
||||
#: ../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 "Это репозиторий приложений, предназначенных для использования в FDroid. Приложения в этом репозитории являются либо официальными бинарными файлами, созданными разработчиками оригинального приложения, либо бинарными файлами, созданными f-droid.org из исходного кода с помощью инструментов на https://gitlab.com/fdroid."
|
||||
@ -1816,8 +1888,13 @@ msgstr "URL-адрес в UpdateCheckData должен начинаться с H
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode настроен, но похоже, что команда checkupdates еще не была запущена"
|
||||
|
||||
@ -1848,6 +1925,11 @@ msgstr "Использование"
|
||||
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, ссылаясь на файл в ветке по умолчанию"
|
||||
@ -1877,6 +1959,11 @@ msgstr "Используется схема подписи APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Используется схема подписи APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Используется схема подписи APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
msgstr "Проверка APK с помощью Java jarsigner. Так делать не следует! Пользуйтесь для этого apksigner"
|
||||
@ -1911,7 +1998,7 @@ msgstr "Сверяться с закешированной копией вмес
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Verify the integrity of downloaded packages"
|
||||
msgstr "Проверить загруженные пакеты на повреждения"
|
||||
msgstr "Проверить целостность загруженных пакетов"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
msgid "Verifying index signature:"
|
||||
@ -1934,6 +2021,10 @@ msgstr "Даже если в конфигурации сборки задано
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "При генерации ключей использовалось различимое имя (Distinguished Name) стандарта X.509"
|
||||
@ -2084,6 +2175,11 @@ msgstr "конфликтный субпарсер:%s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "не удалось разобрать '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "не удалось разобрать спецификацию scrlib (не задана ссылка): '{}'"
|
||||
@ -2259,6 +2355,11 @@ msgstr "local_copy_dir должна быть директорией, а не ф
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "адрес зеркала '%s' должен заканчиваться 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
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
|
||||
@ -2416,6 +2517,11 @@ msgstr "значок репозитория (repo_icon) 'repo/icons/%s' не с
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
msgid "ruamel.yaml not installed, can not write metadata."
|
||||
msgstr "ruamel.yaml не установлен, не получается записать метаданные."
|
||||
@ -2430,6 +2536,11 @@ msgstr "s3cmd синхронизировать индексы из {path} в {ur
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "кэш сканера поврежден! Вы можете очистить его с помощью: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir должна заканчиваться на \"fdroid\". Возможно, имелось в виду \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "разделяемая библиотека"
|
||||
@ -2635,6 +2746,31 @@ msgstr "{path} не существует! Создайте, выполнив к
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path}: неверная подпись \"{pattern}\". Выглядит подозрительно и похоже на попытку нарушения безопасности (Janus exploit)!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' не найден в config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2645,6 +2781,11 @@ msgstr "размер {path} равен нулю!"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@ -90,6 +90,11 @@ msgstr[2] ""
|
||||
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"
|
||||
@ -209,6 +214,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -286,6 +296,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1628,6 +1686,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1789,6 +1851,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1821,6 +1887,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1850,6 +1920,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1907,6 +1981,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2057,6 +2135,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2232,6 +2314,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2389,6 +2476,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2403,6 +2495,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2608,6 +2704,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2618,6 +2739,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1,13 +1,13 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# This file is put in the public domain.
|
||||
# Besnik Bleta <besnik@programeshqip.org>, 2020, 2021, 2022, 2023.
|
||||
# Besnik Bleta <besnik@programeshqip.org>, 2020, 2021, 2022, 2023, 2024.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021.
|
||||
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: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-02-25 12:43+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-02-20 18:58+0000\n"
|
||||
"Last-Translator: Besnik Bleta <besnik@programeshqip.org>\n"
|
||||
"Language-Team: Albanian <https://hosted.weblate.org/projects/f-droid/fdroidserver/sq/>\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 4.16-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -95,6 +95,11 @@ msgstr[1] "Mundësi %(option)s lyp %(number)d argumente"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: gabim: %(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"
|
||||
@ -116,7 +121,7 @@ msgstr "%r s’mund të thirret"
|
||||
#: ../fdroidserver/signindex.py
|
||||
#, python-format
|
||||
msgid "%s did not produce a dict!"
|
||||
msgstr ""
|
||||
msgstr "%s s’prodhoi një “dict”!"
|
||||
|
||||
#: ../fdroidserver/signindex.py
|
||||
#, python-format
|
||||
@ -183,7 +188,7 @@ msgstr "S’u arrit të përmbushet '{path}'!"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "'{path}' has invalid format, it should be a dictionary!"
|
||||
msgstr ""
|
||||
msgstr "'{path}' ka format të pavlefshëm, duhet të jetë një fjalor!"
|
||||
|
||||
#: ../fdroidserver/metadata.py ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
@ -191,9 +196,9 @@ 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}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "'{value}' is not a valid {field}, should be {pattern}"
|
||||
msgstr "'{value}' s’është një {field} e vlefshme te {appid}. Rregullsi shprehjeje të rregullt: {pattern}"
|
||||
msgstr "'{value}' s’është një {field} e vlefshme, duhet të jetë {pattern}"
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -214,6 +219,11 @@ msgstr "/issues mungon"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Lypset një URL si argument!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "S’u gjetën dëshmi nënshkrimi te {path}"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Shtoni për paketa në depo nënshkrime PGP duke përdorur GnuPG-në"
|
||||
@ -285,12 +295,17 @@ msgstr "S’u gjet {cmd} mjeti SDK-je Android!"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "App has Binaries but does not have corresponding AllowedAPKSigningKeys to pin certificate."
|
||||
msgstr ""
|
||||
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ë”"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -298,7 +313,7 @@ msgstr "Aplikacioni gjendet në '{repo}' por ka një lidhje te {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "App version has binary but does not have corresponding AllowedAPKSigningKeys to pin certificate."
|
||||
msgstr ""
|
||||
msgstr "Aplikacioni ka dyor, por s’ka AllowedAPKSigningKeys përkatës për të fiksuar dëshmi."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "Appending .git is not necessary"
|
||||
@ -316,7 +331,7 @@ msgstr "AutoUpdateMode me UpdateCheckMode: HTTP duhet të ketë një rregullsi."
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-brace-format
|
||||
msgid "Bad entry type \"{mirrortype}\" in mirrors config: {mirror}"
|
||||
msgstr ""
|
||||
msgstr "Lloj i gabuar zëri “{mirrortype}” në formësim pasqyrash: {mirror}"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
msgid "Base URL to mirror, can include the index signing key using the query string: ?fingerprint="
|
||||
@ -387,6 +402,11 @@ msgstr "Kategoritë '%s' s’janë të vlefshme"
|
||||
msgid "Categories are not set"
|
||||
msgstr "S’janë ujdisur kategori"
|
||||
|
||||
#: ../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 "Kontrollo për përditësime aplikacionesh"
|
||||
@ -416,7 +436,7 @@ msgstr "Depozito ndryshimet"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Conflicting \"{field}\" definitions between .yml and localized files:"
|
||||
msgstr ""
|
||||
msgstr "Përkufizime “{field}” me përplasje, mes kartelash .yml dhe të përkthyerash:"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Conflicting arguments: '--verbose' and '--quiet' can not be specified at the same time."
|
||||
@ -553,6 +573,16 @@ msgstr "Përshkrimi ka një listë (%s), por kjo s’është as me toptha (*), a
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "Përshkrimi me gjatësi {length} është mbi kufirin prej {limit} shenjash"
|
||||
|
||||
#: ../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 "Mos shtoni 'disable:' te zëra të prodhuar të montimit"
|
||||
@ -612,13 +642,18 @@ msgstr ""
|
||||
#: ../fdroidserver/index.py
|
||||
#, python-format
|
||||
msgid "Duplicate entry \"%s\" in mirrors config!"
|
||||
msgstr ""
|
||||
msgstr "Zë i përsëdytur “%s” në formësim pasqyrash!"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Lidhje e përsëdytur te '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "GABIM: Nënurdhri “server” është hequr, përdorni “deploy”!"
|
||||
@ -665,7 +700,7 @@ msgstr "Gabim teksa merrej adresë depoje"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "Exit with a non-zero code if problems were found"
|
||||
msgstr ""
|
||||
msgstr "Dil me një kod jozero, nëse gjenden probleme"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Extract application metadata from a source repository"
|
||||
@ -789,6 +824,11 @@ msgstr "U gjetën versionCodes të pavlefshëm për disa aplikacione"
|
||||
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."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -853,6 +893,11 @@ msgstr "Veprimi “git remote set-head” dështoi: “%s”"
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Veprimi “git submodule sync” dështoi"
|
||||
@ -887,7 +932,7 @@ msgstr "Po shpërfillen zëra FUNDING.yml më të gjatë se 2048: %s"
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-format
|
||||
msgid "Ignoring bad element in manifest: %s"
|
||||
msgstr ""
|
||||
msgstr "Po shpërfillet element i gabuar në manifest: %s"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
msgid "Ignoring package without metadata: "
|
||||
@ -1058,6 +1103,10 @@ msgstr "Po mbahet montim i dështuar “{apkfilename}”"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Depo kyçesh për kyç nënshkrimi:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1090,7 +1139,7 @@ msgstr "Rresht serverwebroot i keqformuar:"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "Max recursion depth in ZIP file reached: %s"
|
||||
msgstr ""
|
||||
msgstr "U mbërrit në thellësi maksimum rekursive te kartelë ZIP: %s"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
msgid "Mirror the full repo and archive, all file types."
|
||||
@ -1102,7 +1151,7 @@ msgstr "Mungon drejtori përfundimesh"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
msgid "Moving Anti-Features declarations to localized files:"
|
||||
msgstr ""
|
||||
msgstr "Po kalohen pohime Anti-Features te kartela të përkthyera:"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
msgid "Neither \"repo_pubkey\" nor \"keystorepass\" set in config.yml"
|
||||
@ -1195,6 +1244,11 @@ msgstr "S’u gjetën etiketa"
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Përkufizim jo i vlefshëm për madhësinë: “{}”"
|
||||
@ -1353,6 +1407,11 @@ msgstr "Kryej <em>push</em> të regjistrit te kjo depo e largët git"
|
||||
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”"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1386,6 +1445,11 @@ msgstr "Leximi i packageName/versionCode/versionName dështoi, APK e pavlefshme:
|
||||
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"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Po hiqen kartelat e treguara"
|
||||
@ -1635,6 +1699,13 @@ msgstr "Ka një përplasje keyalias-i - botimi u ndal"
|
||||
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."
|
||||
|
||||
#: ../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 "Kjo është një depo aplikacionesh për t’u përdorur me F-Droid. Aplikacionet në këtë depo ose janë dyorë zyrtarë të montuar nga zhvilluesit e aplikacionit origjinal, ose janë dyorë të montuar nga burimi prej f-droid.org duke përdorur mjetet në https://gitlab.com/fdroid."
|
||||
@ -1804,8 +1875,13 @@ msgstr "UpdateCheckData duhet të përdorë URL HTTPS: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
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"
|
||||
|
||||
@ -1836,6 +1912,11 @@ msgstr "Përdorim"
|
||||
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"
|
||||
@ -1865,6 +1946,11 @@ msgstr "Po përdoret Nënshkrimi APK-je v2"
|
||||
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"
|
||||
|
||||
#: ../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"
|
||||
@ -1877,7 +1963,7 @@ msgstr "Po përdoret androguard prej “{path}”"
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Using blank dictionary instead of contents of {path}!"
|
||||
msgstr ""
|
||||
msgstr "Po përdoret fjalor i zbrazët, në vend se lënda e {path}!"
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
#, python-brace-format
|
||||
@ -1922,6 +2008,10 @@ msgstr "Kur është formësuar për tregues të nënshkruar, në këtë fazë kr
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distinguished Name' i përdorur teksa prodhoheshin kyçe"
|
||||
@ -2045,7 +2135,7 @@ msgstr "urdhra prej modulesh shtojce:"
|
||||
#: /usr/lib/python3.7/optparse.py /usr/lib/python3.9/optparse.py
|
||||
#: /usr/lib/python3.11/optparse.py
|
||||
msgid "complex"
|
||||
msgstr "kompleksë"
|
||||
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
|
||||
@ -2057,20 +2147,25 @@ msgstr[0] "varg mundësie me përplasje: %s"
|
||||
msgstr[1] "vargje mundësish me përplasje: %s"
|
||||
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "conflicting subparser alias: %s"
|
||||
msgstr "varg mundësie me përplasje: %s"
|
||||
msgstr ""
|
||||
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "conflicting subparser: %s"
|
||||
msgstr "varg mundësie me përplasje: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
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ë): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "s’u përtyp dot specifikim scrlib (s’u dha referencë): '{}'"
|
||||
@ -2245,6 +2340,11 @@ msgstr "local_copy_dir duhet të jetë një drejtori, jo një kartelë!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "pasqyra '%s' s’përfundon me 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Tani, ujdisini këto 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
|
||||
@ -2402,6 +2502,11 @@ msgstr "repo_icon “repo/icons/%s” s’ekziston, po prodhohet vendmbajtëse."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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."
|
||||
@ -2416,6 +2521,11 @@ msgstr "s3cmd sync indexes {path} to {url} and delete"
|
||||
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}”"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "librari e përbashkët"
|
||||
@ -2586,9 +2696,9 @@ msgid "{build_flag} must be an integer, found: {value}"
|
||||
msgstr "{build_flag} duhet të jetë numër i plotë, u gjet: {value}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "{build_flag} must be list or string, found: {value}"
|
||||
msgstr "{build_flag} duhet të jetë numër i plotë, u gjet: {value}"
|
||||
msgstr "{build_flag} duhet të jetë listë, ose varg, u gjet: {value}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
@ -2620,6 +2730,31 @@ msgstr "{path} s’ekziston! Krijojeni duke xhiruar:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} ka “{pattern}” të gabuar nënshkrimi kartele, ka gjasa të jetë rreng Janus!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' te 'config.yml' s’është ujdisur!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2630,6 +2765,11 @@ msgstr "{path} është me madhësi zero!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2022-11-28 13:20+0000\n"
|
||||
"Last-Translator: Đorđe Vasiljević <djordje.vasiljevich@gmail.com>\n"
|
||||
"Language-Team: Serbian <https://hosted.weblate.org/projects/f-droid/fdroidserver/sr/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1345,6 +1395,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1432,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1685,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1850,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1886,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1849,6 +1919,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1980,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2133,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2311,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -1792,7 +1792,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -1789,7 +1789,7 @@ 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"
|
||||
msgid "UpdateCheckMode is set but it looks like checkupdates hasn't been run yet."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
|
@ -2,22 +2,22 @@
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# Oğuz Ersen <oguzersen@protonmail.com>, 2020, 2021, 2022.
|
||||
# Orhan <orya@pm.me>, 2021.
|
||||
# Oğuz Ersen <oguz@ersen.moe>, 2022, 2023.
|
||||
# Oğuz Ersen <oguz@ersen.moe>, 2022, 2023, 2024.
|
||||
# Bai <batuhanakkurt000@gmail.com>, 2023.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-09-09 10:53+0000\n"
|
||||
"Last-Translator: Bai <batuhanakkurt000@gmail.com>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-11 20:02+0000\n"
|
||||
"Last-Translator: Oğuz Ersen <oguz@ersen.moe>\n"
|
||||
"Language-Team: Turkish <https://hosted.weblate.org/projects/f-droid/fdroidserver/tr/>\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.0.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -97,6 +97,11 @@ msgstr[1] "%(option)s seçeneği %(number)d argüman gerektirir"
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: hata: %(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"
|
||||
@ -216,6 +221,11 @@ msgstr "/issues eksik"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "Bir URL, argüman olarak gereklidir!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "{path} içinde imzalama sertifikaları bulunamadı"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Depodaki paketler için GnuPG ile PGP imzaları ekle"
|
||||
@ -293,6 +303,11 @@ msgstr "Uygulama İkili Dosyalara sahip ancak sertifikayı sabitlemek için kar
|
||||
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
|
||||
#, fuzzy
|
||||
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 ancak AutoUpdateMode veya UpdateCheckMode Yok değil"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -389,6 +404,11 @@ msgstr "'%s' kategorileri geçersiz"
|
||||
msgid "Categories are not set"
|
||||
msgstr "Kategoriler ayarlı değil"
|
||||
|
||||
#: ../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 "Uygulama güncellemelerini denetle"
|
||||
@ -555,6 +575,16 @@ msgstr "Açıklamanın bir listesi (%s) var fakat madde imli (*) veya numaralı(
|
||||
msgid "Description of length {length} is over the {limit} char limit"
|
||||
msgstr "{length} uzunluğundaki açıklama, {limit} karakter sınırının üstünde"
|
||||
|
||||
#: ../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 "Oluşturulan derleme girdilerine 'disable:' ekleme"
|
||||
@ -621,6 +651,11 @@ msgstr "Aynalar yapılandırmasında yinelenen \"%s\" girişi!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "'{field}' içinde yinelenen bağlantı: {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "HATA: \"server\" alt komutu kaldırıldı, \"deploy\" kullanın!"
|
||||
@ -791,6 +826,11 @@ msgstr "Bazı uygulamalar için geçersiz versionCodes bulundu"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "{path} içinde birden fazla JAR İmza Blok Dosyası bulundu"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Depo için birden çok imzalama sertifikası bulundu."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -855,6 +895,11 @@ msgstr "Git remote set-head başarısız: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset başarısız"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git alt modülü güncellemesi başarısız oldu"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git alt modülü eşzamanlaması başarısız oldu"
|
||||
@ -1060,6 +1105,10 @@ msgstr "Başarısız yapı \"{apkfilename}\" tutuluyor"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "İmzalama için anahtar deposu:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1197,6 +1246,11 @@ msgstr "Etiket bulunamadı"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "İmzalanmamış dizin yok - yapılacak işlem yok"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "sürüm bilgisi bulunamadı"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Geçerli bir boyut tanımı değil: \"{}\""
|
||||
@ -1355,6 +1409,11 @@ msgstr "Günlüğü bu git uzak deposuna it"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "İkili şeffaflık günlüğü {url} konumuna gönderiliyor"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head başarısız: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1388,6 +1447,11 @@ msgstr "packageName/versionCode/versionName okuma başarısız, APK geçersiz: '
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "{apkfilename} önbellekten okunuyor"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "imzaların en son sürümünü internetten al"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Belirtilen dosyalar kaldırılıyor"
|
||||
@ -1637,6 +1701,13 @@ msgstr "Bir keyalias çakışması var - yayımlama durdu"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Bunlar ana depodan arşivlenmiş uygulamalardır."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
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/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 "Bu, F-Droid ile kullanılacak uygulamaların bir deposudur. Bu depodaki uygulamalar ya gerçek uygulama geliştiricileri tarafından oluşturulan resmi ikili dosyalardır ya da https://gitlab.com/fdroid adresindeki araçlar kullanılarak f-droid.org yöneticisi tarafından kaynaktan oluşturulan ikili dosyalardır."
|
||||
@ -1805,10 +1876,15 @@ msgstr "UpdateCheckData, HTTPS URL'sini kullanmalıdır: {url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData geçerli bir URL değil: {url}"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
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
|
||||
#, fuzzy
|
||||
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"
|
||||
msgstr "UpdateCheckMode ayarlı ancak checkupdates henüz çalıştırılmamış gibi görünüyor."
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckName is set to the known application ID, it can be removed"
|
||||
@ -1837,6 +1913,11 @@ msgstr "Kullanım"
|
||||
msgid "Usage: %s\n"
|
||||
msgstr "Kullanım: %s\n"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
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 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"
|
||||
@ -1866,6 +1947,11 @@ msgstr "APK İmza v2 kullanılıyor"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "APK İmza v3 kullanılıyor"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "APK İmza v2 kullanılıyor"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
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"
|
||||
@ -1923,6 +2009,10 @@ msgstr "İmzalı indeksler için yapılandırıldığında, bu aşamada sadece i
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "Tüm depo denetlenirken yamllint öntanımlı olarak devre dışı bırakılır. Bu seçenek, yamllint kullanımını ne olursa olsun zorlar."
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır"
|
||||
@ -2072,6 +2162,11 @@ msgstr "çakışan alt ayrıştırıcı: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "'{path}' ayrıştırılamadı"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
msgstr "srclib belirtimi ayrıştırılamadı (referans belirtilmedi): '{}'"
|
||||
@ -2246,6 +2341,11 @@ msgstr "local_copy_dir bir dizin olmalı, dosya değil!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "Yansıma '%s' 'fdroid' ile bitmiyor!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
msgstr "Şimdi bunları config.yml içinde ayarlayı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
|
||||
@ -2403,6 +2503,11 @@ msgstr "repo_icon \"repo/icons/%s\" yok, yer tutucu oluşturuyor."
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr "repo_url'nin /repo ile bitmesi gerekiyor"
|
||||
|
||||
#: ../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 kurulu değil, üst veriler yazılamıyor."
|
||||
@ -2417,6 +2522,11 @@ msgstr "s3cmd sync {path} konumunu {url} adresine indeksler ve siler"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "tarayıcı önbelleği bozuk! Şu şekilde temizleyebilirsiniz: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir \"fdroid\" ile sonlanmıyor, belki de \"{path}\" demek istediniz"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "paylaşımlı kütüphane"
|
||||
@ -2621,6 +2731,31 @@ msgstr "{path} yok! Şunu çalıştırarak oluşturun:"
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path} konumunun bozuk imzası \"{pattern}\" var, olası Janus istismarı!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' config.yml içinde ayarlı değil!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2631,6 +2766,11 @@ msgstr "{path} boyutu sıfır!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} 200MB'den fazla, elle yükleyin: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2020-10-29 08:32+0000\n"
|
||||
"Last-Translator: Hakim Oubouali <hakim.oubouali.skr@gmail.com>\n"
|
||||
"Language-Team: Central Atlas Tamazight <https://hosted.weblate.org/projects/f-droid/fdroidserver/tzm/>\n"
|
||||
@ -90,6 +90,11 @@ msgstr[1] ""
|
||||
msgid "%(prog)s: error: %(message)s\n"
|
||||
msgstr "%(prog)s: tazgalt: %(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"
|
||||
@ -209,6 +214,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -286,6 +296,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -382,6 +396,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -548,6 +567,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -614,6 +643,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -780,6 +814,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -844,6 +882,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1049,6 +1091,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1186,6 +1232,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1344,6 +1394,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1377,6 +1431,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1626,6 +1684,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1787,6 +1849,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1819,6 +1885,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1848,6 +1918,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1905,6 +1979,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2054,6 +2132,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2228,6 +2310,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2386,6 +2473,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2400,6 +2492,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2604,6 +2700,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2614,6 +2735,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -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: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2018-06-08 03:44+0000\n"
|
||||
"Last-Translator: ۋولقان <nureliosman@gmail.com>\n"
|
||||
"Language-Team: Uyghur <https://hosted.weblate.org/projects/f-droid/fdroidserver/ug/>\n"
|
||||
@ -91,6 +91,11 @@ msgstr[1] ""
|
||||
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"
|
||||
@ -210,6 +215,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -287,6 +297,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -383,6 +397,11 @@ msgstr "تۈرلەر قۇرۇلمىغان '%s'"
|
||||
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 ""
|
||||
@ -549,6 +568,16 @@ msgstr ""
|
||||
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 ""
|
||||
@ -615,6 +644,11 @@ msgstr ""
|
||||
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 ""
|
||||
@ -781,6 +815,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -845,6 +883,10 @@ msgstr ""
|
||||
msgid "Git reset failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr ""
|
||||
@ -1050,6 +1092,10 @@ msgstr ""
|
||||
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}'"
|
||||
@ -1187,6 +1233,11 @@ msgstr ""
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "نەشىر ئۇچۇرى تېپىلمىدى!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr ""
|
||||
@ -1345,6 +1396,10 @@ msgstr ""
|
||||
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}"
|
||||
@ -1378,6 +1433,10 @@ msgstr ""
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr ""
|
||||
@ -1627,6 +1686,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1788,6 +1851,10 @@ msgstr ""
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
@ -1820,6 +1887,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1849,6 +1920,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -1906,6 +1981,10 @@ msgstr ""
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr ""
|
||||
@ -2055,6 +2134,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2229,6 +2312,11 @@ msgstr ""
|
||||
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.5/argparse.py /usr/lib/python3.6/argparse.py
|
||||
#: /usr/lib/python3.7/argparse.py /usr/lib/python3.9/argparse.py
|
||||
#: /usr/lib/python3.11/argparse.py
|
||||
@ -2387,6 +2475,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2401,6 +2494,10 @@ msgstr ""
|
||||
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 ""
|
||||
@ -2605,6 +2702,31 @@ msgstr ""
|
||||
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/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!"
|
||||
@ -2615,6 +2737,11 @@ msgstr ""
|
||||
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}"
|
||||
|
@ -12,7 +12,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2023-05-28 07:54+0000\n"
|
||||
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
|
||||
"Language-Team: Ukrainian <https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/>\n"
|
||||
@ -102,6 +102,11 @@ msgstr[2] "%(option)s параметр вимагає %(number)d аргумен
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -221,6 +226,11 @@ msgstr "/issues відсутній"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "URL потребується як аргумент!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "У {path} не знайдено сертифікатів для підписання"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "Додати підписи GnuPG для пакунків у репозиторії"
|
||||
@ -298,6 +308,11 @@ msgstr "Програма має двійкові файли, але не має
|
||||
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 версій», але AutoUpdateMode або UpdateCheckMode не дорівнюють None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -395,6 +410,11 @@ msgstr "Категорія '%s' неприпустима"
|
||||
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 "Перевірте наявність оновлень для застосунків"
|
||||
@ -561,6 +581,16 @@ msgstr "Опис містить список (%s) але не маркірова
|
||||
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 ""
|
||||
|
||||
#: ../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 "Не додавайте 'disable:' до створених записів збірки"
|
||||
@ -627,6 +657,11 @@ msgstr "Дубльований запис \"%s\" у конфігурації д
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "Дублікат посилання в '{field}': {url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "ПОМИЛКА: Підкоманду \"server\" вилучено, використовуйте \"deploy\"!"
|
||||
@ -797,6 +832,11 @@ msgstr "Знайдено недійсні версії коду для деяк
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "Знайдено кілька файлів блоку підписів JAR у {path}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "Знайдено кілька сертифікатів підписування для репозиторію."
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -861,6 +901,11 @@ msgstr "Помилка налаштування remote set-head для Git: «%s
|
||||
msgid "Git reset failed"
|
||||
msgstr "Скидання Git не вдалося"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Не вдалося оновити підмодуль Git"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Не вдалося синхронізувати підмодуль Git"
|
||||
@ -1066,6 +1111,10 @@ msgstr "Зберігання невдалої збірки \"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "Шлях до сховища ключів для ключа підпису сховища\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1203,6 +1252,11 @@ msgstr "Теги не знайдено"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "Немає непідписаної теки — нічого виконувати"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "не знайдено відомостей про версію"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "Недійсне визначення розміру: \"{}\""
|
||||
@ -1361,6 +1415,11 @@ msgstr "Надіслати журнал цього віддаленого реп
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "Оновити двійковий журнал прозорості для {url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Помилка налаштування remote set-head для Git: «%s»"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1394,6 +1453,11 @@ msgstr "Не вдалося прочитати packageName/versionCode/versionNa
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "Читання {apkfilename} з кешу"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, fuzzy
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr "отримати останню версію підписів з інтернету"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "Вилучення вказаних файлів"
|
||||
@ -1644,6 +1708,13 @@ msgstr "Відбулося зіткнення keyalias ключів - припи
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "Ці застосунки, заархівовано з основного репозиторію."
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
msgstr ""
|
||||
"ПОМИЛКА: ця команда ніколи не повинна використовуватися для створення дзеркала f-droid.org!\n"
|
||||
"Повне дзеркало f-droid.org вимагає понад 200GB."
|
||||
|
||||
#: ../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 "Цей репозиторій застосунків для використання з FDroid. Застосунки в цьому репозиторії — це або офіційні двійкові файли, побудовані розробниками оригінального застосунку, або двійкові файли, побудовані з джерела f-droid.org за допомогою інструментів з https://gitlab.com/fdroid."
|
||||
@ -1812,8 +1883,13 @@ msgstr "UpdateCheckData має використовувати URL-адресу H
|
||||
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/studio/build/application-id
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "UpdateCheckMode is set but it looks likecheckupdates hasn't been run yet"
|
||||
msgstr "UpdateCheckMode налаштовано, але схоже, що команду checkupdates ще не було запущено"
|
||||
|
||||
@ -1844,6 +1920,11 @@ msgstr "Використання"
|
||||
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 для вказання на файл типовій гілці"
|
||||
@ -1873,6 +1954,11 @@ msgstr "Використання підпису APK v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "Використання підпису APK v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "Використання підпису APK v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
msgstr "Не варто перевіряти APK за допомогою jarsigner Java! Користуйтеся apksigner"
|
||||
@ -1930,6 +2016,10 @@ msgstr "Коли налаштовано для підписаних індекс
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "X.509 'Distiguished Name' використовується під час створення ключів"
|
||||
@ -2080,6 +2170,11 @@ msgstr "конфліктний субпарсер: %s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "не вдалося проаналізувати '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
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 (посилання не вказано): '{}'"
|
||||
@ -2255,6 +2350,11 @@ msgstr "local_copy_dir мусить бути текою, не файлом!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "дзеркало '%s' не закінчується на 'fdroid'!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
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
|
||||
@ -2412,6 +2512,11 @@ msgstr "repo_icon \"repo/icons/%s\" не існує, створення запо
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
msgid "ruamel.yaml not installed, can not write metadata."
|
||||
msgstr "ruamel.yaml не встановлено, не вдається записати метадані."
|
||||
@ -2426,6 +2531,11 @@ msgstr "s3cmd синхронізувати індекси з {path} до {url}
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr "кеш сканера пошкоджено! Ви можете очистити його за допомогою: '{clear}'"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir мусить закінчуватися на \"fdroid\", ймовірно, малося на увазі: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr "спільна бібліотека"
|
||||
@ -2631,6 +2741,31 @@ msgstr "{path} не існує! Створіть його, запустивши:
|
||||
msgid "{path} has bad file signature \"{pattern}\", possible Janus exploit!"
|
||||
msgstr "{path}: недійсний підпис \"{pattern}\". Виглядає підозріло і схоже на спробу порушення безпеки Janus exploit!"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "{path} has been flagged by virustotal {count} times:"
|
||||
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 "{path} is not a standard config file!"
|
||||
msgstr "'sdk_path' не встановлено в config.yml!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2641,6 +2776,11 @@ msgstr "{path} не має розміру!"
|
||||
msgid "{path} more than 200MB, manually upload: {url}"
|
||||
msgstr "{path} понад 200 МБ, вивантажити власноруч: {url}"
|
||||
|
||||
#: ../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}"
|
||||
|
@ -28,20 +28,22 @@
|
||||
# Max Xie <monyxie@gmail.com>, 2023.
|
||||
# Kingo Bingo <bingokingosoft@gmail.com>, 2023.
|
||||
# zhiqi <lzqlzq21@gmail.com>, 2023.
|
||||
# David Jiang <david.jiang2024@gmail.com>, 2023.
|
||||
# ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>, 2024.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2023-09-11 17:39+0000\n"
|
||||
"Last-Translator: Xiang Heng Wei <yylteam@hotmail.com>\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-13 17:01+0000\n"
|
||||
"Last-Translator: ALoLo_527 <ALoLo@users.noreply.hosted.weblate.org>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hans/>\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.0.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -120,6 +122,11 @@ msgstr[0] "%(option)s 选项需要 %(number)d 个参数"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -239,6 +246,11 @@ msgstr "路径缺少 /issues ( 译者注: 此处仅支持 github 或 gitlab 之
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "需要有一个链接作为参数!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "在 {path} 中找不到签名证书"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "使用 GnuPG 为存储库之软件包添加 PGP 签名"
|
||||
@ -316,6 +328,11 @@ msgstr "应用程序具有二进制文件,但没有相应的AllowedAPKSigningK
|
||||
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
|
||||
#, fuzzy
|
||||
msgid "App has NoSourceSince or ArchivePolicy \"0 versions\" or 0 but AutoUpdateMode or UpdateCheckMode are not None"
|
||||
msgstr "应用的 NoSourceSince 或 ArchivePolicy 为 “0 versions” 但 AutoUpdateMode 或 UpdateCheckMode 不是 None"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -411,6 +428,11 @@ msgstr "类别 '%s' 无效"
|
||||
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 "检查应用的更新"
|
||||
@ -577,6 +599,16 @@ msgstr "简介中带有列表(%s),但它既不是子弹(*)形列表也
|
||||
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 ""
|
||||
|
||||
#: ../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 "不要给生成的构建项添加 'disable:'"
|
||||
@ -643,6 +675,11 @@ msgstr "镜像配置中的重复条目“%s”!"
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "“{field}”中有重复的链接:{url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
msgstr "错误:\"server\" 子命令已被删除,请使用 \"deploy\"!"
|
||||
@ -813,6 +850,11 @@ msgstr "发现某些应用的版本代码无效"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "在{path}中发现多个JAR签名块文件"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "发现存储库的多个签名证书。"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -877,6 +919,11 @@ msgstr "Git remote set-head 失败:\"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git reset 失败"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git 子模块更新失败"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git 子模块同步失败"
|
||||
@ -1082,6 +1129,10 @@ msgstr "保持失败的生成“{apkfilename}”"
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "签名密钥的密钥库:\t"
|
||||
|
||||
#: ../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}'"
|
||||
@ -1219,6 +1270,11 @@ msgstr "未找到标签"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "没有未签名的目录 - 无操作"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "没有找到版本信息"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
msgstr "不是有效的大小定义:“{}”"
|
||||
@ -1377,6 +1433,11 @@ msgstr "拖送日志至 git 远程资源库"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "正推送二进制文件透明日志到{url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git remote set-head 失败:\"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1410,6 +1471,10 @@ msgstr "读取 packageName/versionCode/versionName 失败,APK 无效:'{apkfi
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "从缓存读取 {apkfilename}"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "删除指定文件"
|
||||
@ -1658,6 +1723,13 @@ msgstr "存在密钥别名冲突 - 发布已停止"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "这些是已从主存储库存档的应用。"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
msgstr ""
|
||||
"错误:请不要使用此命令来镜像 f-droid.org!\n"
|
||||
"对 f-droid.org 进行完整镜像至少需要超过 200GB 的储存空间。"
|
||||
|
||||
#: ../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 上的工具从源代码构建而来的二进制文件。"
|
||||
@ -1826,6 +1898,10 @@ msgstr "UpdateCheckData必须使用HTTPS URL:{url}"
|
||||
msgid "UpdateCheckData not a valid URL: {url}"
|
||||
msgstr "UpdateCheckData 不是有效的网址:{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"
|
||||
@ -1838,12 +1914,12 @@ msgstr ""
|
||||
#: ../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 ""
|
||||
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
|
||||
@ -1858,6 +1934,10 @@ msgstr "使用"
|
||||
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 ""
|
||||
@ -1881,11 +1961,16 @@ msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using APK Signature v2"
|
||||
msgstr ""
|
||||
msgstr "使用 APK 签名 v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr ""
|
||||
msgstr "使用 APK 签名 v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "使用 APK 签名 v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
@ -1894,7 +1979,7 @@ msgstr ""
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
msgid "Using androguard from \"{path}\""
|
||||
msgstr ""
|
||||
msgstr "使用 {path} 中的 androguard"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
@ -1944,6 +2029,10 @@ msgstr "如果已配置为使用签名索引,该阶段仅创建未签名索引
|
||||
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/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "生成密钥时使用了X.509 ‘可识别名’"
|
||||
@ -2092,6 +2181,10 @@ msgstr "有冲突的子解析器:%s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "无法解析 '{path}'"
|
||||
|
||||
#: ../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 ""
|
||||
@ -2265,6 +2358,11 @@ msgstr "local_copy_dir必须是目录,不能是文件!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
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
|
||||
@ -2422,6 +2520,11 @@ msgstr ""
|
||||
msgid "repo_url needs to end with /repo"
|
||||
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 ""
|
||||
@ -2436,6 +2539,11 @@ msgstr ""
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir未以“ fdroid”结尾,也许你指的是:“ {path}”"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
msgid "shared library"
|
||||
msgstr ""
|
||||
@ -2561,12 +2669,12 @@ msgstr ""
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{appid} from {path} is not a valid Android application ID!"
|
||||
msgstr ""
|
||||
msgstr "{appid}来自{path}不是一个有效的Android应用ID!"
|
||||
|
||||
#: ../fdroidserver/metadata.py ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
msgid "{appid} from {path} is not a valid Java Package Name!"
|
||||
msgstr ""
|
||||
msgstr "{appid}来自{path}不是一个有效的Java安装包名称!"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
@ -2576,7 +2684,7 @@ msgstr ""
|
||||
#: ../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
|
||||
@ -2592,12 +2700,12 @@ msgstr ""
|
||||
#: ../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
|
||||
@ -2639,14 +2747,44 @@ msgstr "{path} 不存在!通过运行以下命令创建它:"
|
||||
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/common.py
|
||||
#, python-brace-format
|
||||
msgid "{path} is not \"key: value\" dict, but a {datatype}!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path} is not a standard config file!"
|
||||
msgstr "未在 config.yml 中设置 'sdk_path'!"
|
||||
|
||||
#: ../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 ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
@ -2657,12 +2795,12 @@ 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"
|
||||
|
@ -1,7 +1,7 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR Free Software Foundation, Inc.
|
||||
# Jeff Huang <s8321414@gmail.com>, 2020.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022.
|
||||
# Hans-Christoph Steiner <hans@guardianproject.info>, 2020, 2021, 2022, 2024.
|
||||
# NightFeather <ss900328@gmail.com>, 2020.
|
||||
# ifurther <i.further.5.4@gmail.com>, 2021.
|
||||
# Stiffen <wchen01@fisher.edu>, 2021.
|
||||
@ -9,8 +9,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: fdroidserver 0.9\n"
|
||||
"Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
|
||||
"POT-Creation-Date: 2023-05-24 22:18+0200\n"
|
||||
"PO-Revision-Date: 2022-09-06 14:30+0000\n"
|
||||
"POT-Creation-Date: 2024-05-13 13:50+0200\n"
|
||||
"PO-Revision-Date: 2024-04-10 13:33+0000\n"
|
||||
"Last-Translator: Hans-Christoph Steiner <hans@guardianproject.info>\n"
|
||||
"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/>\n"
|
||||
"Language: zh_Hant\n"
|
||||
@ -18,7 +18,7 @@ msgstr ""
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.14.1-dev\n"
|
||||
"X-Generator: Weblate 5.5-dev\n"
|
||||
|
||||
#: ../fdroidserver/nightly.py
|
||||
msgid ""
|
||||
@ -73,9 +73,9 @@ msgid "\"{path}\" is not a supported file format (use: metadata/*.yml)"
|
||||
msgstr "\"{path}\" 不是可接受的格式,轉換成: metadata/*.yml"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "\"{path}\" is signed by a key that is not allowed:"
|
||||
msgstr "有 \"{path}\" 存在,但是沒有安裝 s3cmd!"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/import_subcommand.py
|
||||
#, python-brace-format
|
||||
@ -97,6 +97,11 @@ msgstr[0] "%(option)s 的選項需要 %(number)d 參數"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-format
|
||||
msgid "%d problems found"
|
||||
@ -195,9 +200,9 @@ msgid "'{value}' is not a valid {field} in {appid}. Regex pattern: {pattern}"
|
||||
msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "'{value}' is not a valid {field}, should be {pattern}"
|
||||
msgstr "{appid} 的 {value}' 為無效 {field}。正規表遠格式:{pattern}"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, python-brace-format
|
||||
@ -218,6 +223,11 @@ msgstr "/issues 有遺漏"
|
||||
msgid "A URL is required as an argument!"
|
||||
msgstr "需要 URL 作為參數!"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "APK signatures have different certificates in {path}:"
|
||||
msgstr "{path} 找不到簽署證書"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
msgid "Add PGP signatures using GnuPG for packages in repo"
|
||||
msgstr "在軟體庫中加入使用 GnuPG 套件包的 gpg 簽署"
|
||||
@ -298,6 +308,10 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "App is in '{repo}' but has a link to {url}"
|
||||
@ -393,6 +407,11 @@ msgstr "'%s' 類別無效"
|
||||
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 "檢查應用程式更新"
|
||||
@ -564,6 +583,16 @@ msgstr "描述中有一個列表 (%s) 但它並未被編排 (*) 或作編號 (#)
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, python-brace-format
|
||||
msgid "Did you mean {code}?"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/import_subcommand.py
|
||||
#, fuzzy
|
||||
msgid "Do not add 'disable:' to the generated build entries"
|
||||
@ -631,6 +660,11 @@ msgstr ""
|
||||
msgid "Duplicate link in '{field}': {url}"
|
||||
msgstr "'{field}' 有重複的連結:{url}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-format
|
||||
msgid "ERROR: %(message)s"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "ERROR: The \"server\" subcommand has been removed, use \"deploy\"!"
|
||||
@ -750,7 +784,7 @@ msgstr "抓取 '{apkfilename}' 的簽署資料 -> '{sigdir}'"
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "File disappeared while processing it: {path}"
|
||||
msgstr "檔案 「路徑: {path}」在處理過程中消失了!"
|
||||
msgstr "檔案 「{path}」在處理過程中消失了"
|
||||
|
||||
#: ../fdroidserver/build.py ../fdroidserver/install.py
|
||||
#: ../fdroidserver/rewritemeta.py ../fdroidserver/scanner.py
|
||||
@ -805,6 +839,11 @@ msgstr "有些應用的版本代號無效"
|
||||
msgid "Found multiple JAR Signature Block Files in {path}"
|
||||
msgstr "{path} 找到多筆簽名證書"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Found multiple Signer Certificates!"
|
||||
msgstr "軟體庫找到多份簽署證書。"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-brace-format
|
||||
msgid "Found multiple metadata files for {appid}"
|
||||
@ -824,14 +863,14 @@ msgid "Found non-file at %s"
|
||||
msgstr "%s 中找到 non-file"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy, python-brace-format
|
||||
#, python-brace-format
|
||||
msgid "Found {apkfilename} at {url}"
|
||||
msgstr "在鏈接 {url} 找到了Android軟體程式包 {apkfilename} 。"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Found {count} problems in {filename}"
|
||||
msgstr "掃瞄器在 {appid} 發現{count} 個問題:"
|
||||
msgstr "在 {filename} 發現{count} 個問題"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -870,6 +909,11 @@ msgstr "Git 遠端 set-head 失敗: \"%s\""
|
||||
msgid "Git reset failed"
|
||||
msgstr "Git 重置失敗"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Git submodule deinit failed"
|
||||
msgstr "Git 子模組更新失敗"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Git submodule sync failed"
|
||||
msgstr "Git 子模組同步失敗"
|
||||
@ -885,12 +929,12 @@ msgstr "HTTPS 必須與 Subversion 網址一起使用!"
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "If a git mirror gets to big, allow the archive to be deleted"
|
||||
msgstr "如果一個 git mirror 變得太大, 允許刪除該 git mirror 的檔案。"
|
||||
msgstr "如果一個 git mirror 變得太大, 允許刪除該 git mirror 的檔案"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "If this upload fails, try manually uploading to {url}"
|
||||
msgstr "如果本次上傳失敗, 嘗試手動上傳至 {url} 。"
|
||||
msgstr "如果本次上傳失敗, 嘗試手動上傳至 {url}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
@ -898,9 +942,9 @@ msgid "Ignoring '{field}' in '{metapath}' metadata because it is deprecated."
|
||||
msgstr "忽略 '{metapath}' 中的 '{field}' , 因為它已經過時了。"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy, python-format
|
||||
#, python-format
|
||||
msgid "Ignoring FUNDING.yml entry longer than 2048: %s"
|
||||
msgstr "忽略文檔 FUNDING.yml , 文檔大小超過 2048: %s 。"
|
||||
msgstr "忽略文檔 FUNDING.yml , 文檔大小超過 2048: %s"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-format
|
||||
@ -923,17 +967,17 @@ msgstr "包含 APKs 其簽名為有弱點的演算法,如 MD5"
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "Include the PGP signature .asc files in the mirror"
|
||||
msgstr "在鏡像中加入 PGP 簽名和 .asc 文檔。"
|
||||
msgstr "在鏡像中加入 PGP 簽名和 .asc 文檔"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "Include the build logs in the mirror"
|
||||
msgstr "在鏡像中加入編譯紀錄。"
|
||||
msgstr "在鏡像中加入編譯紀錄"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "Include the source tarballs in the mirror"
|
||||
msgstr "在鏡像中加入軟體的源代碼包。"
|
||||
msgstr "在鏡像中加入軟體的源代碼包"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-format
|
||||
@ -993,12 +1037,12 @@ msgstr "無效的 VercodeOperation:{field}"
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid VercodeOperation: {invalid_ops}"
|
||||
msgstr "無效的 VercodeOperation:{field}"
|
||||
msgstr "無效的 VercodeOperation:{invalid_ops}"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid application ID {appid}"
|
||||
msgstr "無效的 application ID {appid} 。"
|
||||
msgstr "無效的 application ID {appid}"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, python-format
|
||||
@ -1027,17 +1071,17 @@ msgstr "無效的重新導向到非 HTTPS:{before}->{after}。 "
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid scrlib metadata: '{file}' does not exist"
|
||||
msgstr "無效的 scrlib metadata: 檔案 '{file}' 不存在。"
|
||||
msgstr "無效的 scrlib metadata: 檔案 '{file}' 不存在"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid srclib metadata: could not parse '{file}'"
|
||||
msgstr "無效的 scrlib metadata: 無法解析檔案 '{file}' 。"
|
||||
msgstr "無效的 scrlib metadata: 無法解析檔案 '{file}'"
|
||||
|
||||
#: ../fdroidserver/metadata.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Invalid srclib metadata: unknown key '{key}' in '{file}'"
|
||||
msgstr "無效的 scrlib metadata: 檔案 '{file}' 裡有未知的密鑰 '{key}'。"
|
||||
msgstr "無效的 scrlib metadata: 檔案 '{file}' 裡有未知的密鑰 '{key}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
@ -1081,6 +1125,10 @@ msgstr "讀取 minSdkVersion 失敗:\"{apkfilename}\""
|
||||
msgid "Keystore for signing key:\t"
|
||||
msgstr "金鑰庫的簽署金鑰:\t"
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
msgid "Known debug key is used in AllowedAPKSigningKeys: "
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Last used commit '{commit}' looks like a tag, but UpdateCheckMode is '{ucm}'"
|
||||
@ -1167,7 +1215,7 @@ msgstr "查無資訊。"
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, fuzzy
|
||||
msgid "No matching tags found"
|
||||
msgstr "查無資訊。"
|
||||
msgstr "查無資訊"
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, python-brace-format
|
||||
@ -1224,6 +1272,11 @@ msgstr "查無附加的設備"
|
||||
msgid "No unsigned directory - nothing to do"
|
||||
msgstr "無未簽署目錄 - 無須採取行動"
|
||||
|
||||
#: ../fdroidserver/__main__.py
|
||||
#, fuzzy
|
||||
msgid "No version information could be found."
|
||||
msgstr "未發現版本資訊"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Not a valid size definition: \"{}\""
|
||||
@ -1298,7 +1351,7 @@ msgstr "輸出 JSON 到 stdout 。"
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy
|
||||
msgid "Outputting JSON"
|
||||
msgstr "正在導出 JSON 中 ..."
|
||||
msgstr "正在導出 JSON 中"
|
||||
|
||||
#: ../fdroidserver/import_subcommand.py
|
||||
msgid "Overall license of the project."
|
||||
@ -1388,6 +1441,11 @@ msgstr "將日誌推送到 git 遠端軟體庫"
|
||||
msgid "Pushing binary transparency log to {url}"
|
||||
msgstr "推二進制的透明日誌到{url}"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "Pushing to remote server failed!"
|
||||
msgstr "Git 遠端 set-head 失敗: \"%s\""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, python-brace-format
|
||||
msgid "Pushing to {url}"
|
||||
@ -1421,6 +1479,10 @@ msgstr "讀取套件名稱/版本代碼/版本名稱 失敗,APK 無效:'{apk
|
||||
msgid "Reading {apkfilename} from cache"
|
||||
msgstr "從緩存讀取 {apkfilename}"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
msgid "Refresh and cache scanner rules and signatures from the network"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Removing specified files"
|
||||
msgstr "移除指定檔案"
|
||||
@ -1498,7 +1560,7 @@ msgstr "掃描套件包的原始碼"
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Scanner found {count} problems in {apk}"
|
||||
msgstr "掃瞄器在 {appid} 發現{count} 個問題:"
|
||||
msgstr "掃瞄器在 {apk} 發現{count} 個問題"
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, python-brace-format
|
||||
@ -1532,7 +1594,7 @@ msgstr "設定時鐘到那時使用:"
|
||||
#: ../fdroidserver/nightly.py
|
||||
#, fuzzy
|
||||
msgid "Set maximum releases in repo before older ones are archived"
|
||||
msgstr "先設置軟體庫的軟體最大釋出數, 再將舊軟體歸檔。"
|
||||
msgstr "先設置軟體庫的軟體最大釋出數, 再將舊軟體歸檔"
|
||||
|
||||
#: ../fdroidserver/build.py
|
||||
#, python-brace-format
|
||||
@ -1673,6 +1735,13 @@ msgstr "發生主要別名衝突 - 發佈中止"
|
||||
msgid "These are the apps that have been archived from the main repo."
|
||||
msgstr "這些是從主軟體庫中歸檔的軟體。"
|
||||
|
||||
#: ../fdroidserver/mirror.py
|
||||
#, fuzzy
|
||||
msgid "This command should never be used to mirror f-droid.org! A full copy requires more than 600GB."
|
||||
msgstr ""
|
||||
"錯誤:此命令絕不該用於鏡像 f-droid.org!\n"
|
||||
"完整的 f-droid.org 鏡像需要超過 200GB。"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
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."
|
||||
@ -1721,7 +1790,7 @@ msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用 https://spdx
|
||||
#: ../fdroidserver/lint.py
|
||||
#, fuzzy
|
||||
msgid "Unexpected license tag \"{}\"! Only use license tags configured in your config file"
|
||||
msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用你的配置文檔裡面配置好的許可證標籤啦。"
|
||||
msgstr "這個許可證標籤不符合預期 \"{}\"! 只能使用你的配置文檔裡面配置好的許可證標籤啦"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, python-brace-format
|
||||
@ -1838,6 +1907,10 @@ msgstr "UpdateCheckData 必須使用 HTTPS URL:{url}"
|
||||
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 ""
|
||||
|
||||
#. 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"
|
||||
@ -1851,12 +1924,12 @@ msgstr "UpdateCheckName 已經被設定成已知的 application id - 它可以
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Uploading {apkfilename} to androidobservatory.org"
|
||||
msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org 。"
|
||||
msgstr "正在將軟體檔案 {apkfilename} 上傳到 androidobservatory.org"
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "Uploading {apkfilename} to virustotal"
|
||||
msgstr "正在將軟體檔案 {apkfilename} 上傳到 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
|
||||
@ -1871,6 +1944,11 @@ msgstr "使用方法"
|
||||
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 來指向默認分支的一個檔案"
|
||||
@ -1902,6 +1980,11 @@ msgstr "使用 APK Signature v2"
|
||||
msgid "Using APK Signature v3"
|
||||
msgstr "使用 APK Signature v3"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "Using JAR Signature"
|
||||
msgstr "使用 APK Signature v2"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
msgid "Using Java's jarsigner, not recommended for verifying APKs! Use apksigner"
|
||||
msgstr "使用 Java 的 jarsigner,這並不建議用於驗證 APK!使用 apksigner"
|
||||
@ -1960,6 +2043,10 @@ msgstr "當已組態為簽名的索引時,只能在此階段建立無簽名的
|
||||
msgid "When linting the entire repository yamllint is disabled by default. This option forces yamllint regardless."
|
||||
msgstr "在默認情況下, 檢查整個軟體庫中的可疑代碼時不會檢查 yaml 檔案 (yamllint) 。 使用本選項將會忽略默認選項,在檢查整個軟體庫中的可疑代碼時強制檢查 yaml 檔案 (yamllint) 。"
|
||||
|
||||
#: ../fdroidserver/publish.py
|
||||
msgid "When signing or verifying fails, exit with an error code."
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/init.py
|
||||
msgid "X.509 'Distinguished Name' used when generating keys"
|
||||
msgstr "產生金鑰時使用 X.509 的'專有名稱'"
|
||||
@ -2116,6 +2203,11 @@ msgstr "相衝突的選項字串:%s"
|
||||
msgid "could not parse '{path}'"
|
||||
msgstr "無法解析 '{path}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no name specified): '{}'"
|
||||
msgstr "無法解析 scrlib spec (沒有指定參考文獻): '{}'"
|
||||
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy
|
||||
msgid "could not parse srclib spec (no ref specified): '{}'"
|
||||
@ -2295,6 +2387,11 @@ msgstr "local_copy_dir 為目錄,不是檔案!"
|
||||
msgid "mirror '%s' does not end with 'fdroid'!"
|
||||
msgstr "鏡像 '%s' 並不是以 'fdroid' 作結尾!"
|
||||
|
||||
#: ../fdroidserver/index.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "mirrors set twice, in config.yml and {path}!"
|
||||
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
|
||||
@ -2329,7 +2426,7 @@ msgstr "未發現版本資訊!"
|
||||
#: ../fdroidserver/checkupdates.py
|
||||
#, fuzzy
|
||||
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
|
||||
@ -2454,6 +2551,11 @@ msgstr "軟體庫圖標 (repo_icon)\"repo/icons/%s\" 不存在, 正在生
|
||||
msgid "repo_url needs to end with /repo"
|
||||
msgstr ""
|
||||
|
||||
#: ../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."
|
||||
@ -2469,6 +2571,11 @@ msgstr "s3cmd 同步索引 {path} 到 {url} 並刪除"
|
||||
msgid "scanner cache is malformed! You can clear it with: '{clear}'"
|
||||
msgstr ""
|
||||
|
||||
#: ../fdroidserver/deploy.py
|
||||
#, fuzzy
|
||||
msgid "serverwebroot: path does not end with \"fdroid\", perhaps you meant one of these:"
|
||||
msgstr "local_copy_dir 未以 \"fdroid\"結尾,也許你指示的是: \"{path}\""
|
||||
|
||||
#: ../fdroidserver/scanner.py
|
||||
#, fuzzy
|
||||
msgid "shared library"
|
||||
@ -2658,7 +2765,7 @@ msgstr "{name} \"{section}/icons/{path}\" 不存在! 請檢查 \"config.yml\"."
|
||||
#: ../fdroidserver/common.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{oldfile} is deprecated, use {newfile}"
|
||||
msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile} 。"
|
||||
msgstr "檔案 {oldfile} 已經過時了, 請使用檔案 {newfile}"
|
||||
|
||||
#: ../fdroidserver/import_subcommand.py
|
||||
#, fuzzy, python-brace-format
|
||||
@ -2675,6 +2782,31 @@ msgstr "\"{path}\" 不存在!經由執行建立它:"
|
||||
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 ""
|
||||
|
||||
#: ../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 "{path} is not a standard config file!"
|
||||
msgstr "'config.yml' 未設定 'sdk_path'!"
|
||||
|
||||
#: ../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!"
|
||||
@ -2685,6 +2817,11 @@ msgstr "{path} 為零尺寸!"
|
||||
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 ""
|
||||
|
||||
#: ../fdroidserver/update.py
|
||||
#, fuzzy, python-brace-format
|
||||
msgid "{path}: {error}"
|
||||
|
@ -47,35 +47,22 @@ logging.basicConfig(format=logformat, level=loglevel)
|
||||
|
||||
tail = None
|
||||
|
||||
BASEBOX_DEFAULT = 'fdroid/bullseye64'
|
||||
BASEBOX_VERSION_DEFAULT = "11.20221010.1"
|
||||
BASEBOX_DEFAULT = 'debian/bookworm64'
|
||||
BASEBOX_VERSION_DEFAULT = "12.20231211.1"
|
||||
BASEBOX_CHECKSUMS = {
|
||||
"11.20221010.1": {
|
||||
"12.20231211.1": {
|
||||
"libvirt": {
|
||||
"box.img": "c2114aa276c176fa65b8072f5dcd1e8a6ab9f7d15fd5da791727a0164fd43254",
|
||||
"box.img": "80b048312c423b7fbbbac934c348f9a29bdf2f98fae96dd13b3af70ddfe7f12a",
|
||||
"Vagrantfile": "f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47",
|
||||
"metadata.json": "42b96a01106c25f3a222ddad0baead0b811cc64926f924fb836bbfa43580e646",
|
||||
"metadata.json": "9d717678c19bb81d077e4e7eeb3602c168b6568cc38fee8fd3aa9d8f3cfe639b",
|
||||
},
|
||||
"virtualbox": {
|
||||
"box.ovf": "5e4de5f1f4b481b2c1917c0b2f6e6334f4741cc18c5b278e3bafb094535ff2cb",
|
||||
"box.vmdk": "737053bc886037ae76bb38a1776eba2a5579d49423de990e93ef4a3f0cab4f1c",
|
||||
"box.ovf": "8ad49ba600fbd1027e35c8fd41d37383c04bad30fdbafa860a29911d207a3e7b",
|
||||
"box.vmdk": "57602a776860805e82bd3f61cdca9711f39781011db0f8f1dee9b2a614b2c889",
|
||||
"Vagrantfile": "0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d",
|
||||
"metadata.json": "ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a",
|
||||
}
|
||||
},
|
||||
'11.20220317.1': {
|
||||
'libvirt': {
|
||||
'box.img': 'fbde152a2f61d191983be9d1dbeae2591af32cca1ec27daa342485d97187515e',
|
||||
'metadata.json': '42b96a01106c25f3a222ddad0baead0b811cc64926f924fb836bbfa43580e646',
|
||||
'Vagrantfile': 'f9c6fcbb47a4d0d33eb066859c8e87efd642287a638bd7da69a9e7a6f25fec47',
|
||||
},
|
||||
'virtualbox': {
|
||||
'box.ovf': 'becd5cea2666d42e12def13a91766aa0d4b0e8e6f53102486c2a6cdb4e401b08',
|
||||
'box.vmdk': '49c96a58a3ee99681d348075864a290c60a8d334fddd21be453c825fcee75eda',
|
||||
'metadata.json': 'ffdaa989f2f6932cd8042e1102371f405cc7ad38e324210a1326192e4689e83a',
|
||||
'Vagrantfile': '0bbc2ae97668d8da27ab97b766752dcd0bf9e41900e21057de15a58ee7fae47d',
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
configfile = 'buildserver/Vagrantfile.yaml'
|
||||
|
@ -38,10 +38,8 @@ force-exclude = '''(
|
||||
| fdroidserver/build\.py
|
||||
| fdroidserver/checkupdates\.py
|
||||
| fdroidserver/common\.py
|
||||
| fdroidserver/deploy\.py
|
||||
| fdroidserver/import_subcommand\.py
|
||||
| fdroidserver/index\.py
|
||||
| fdroidserver/install\.py
|
||||
| fdroidserver/metadata\.py
|
||||
| fdroidserver/nightly\.py
|
||||
| fdroidserver/publish\.py
|
||||
@ -53,7 +51,6 @@ force-exclude = '''(
|
||||
| tests/extra/manual-vmtools-test\.py
|
||||
| tests/gradle-release-checksums\.py
|
||||
| tests/openssl-version-check-test\.py
|
||||
| tests/testcommon\.py
|
||||
| tests/valid-package-names/test\.py
|
||||
| tests/checkupdates\.TestCase
|
||||
| tests/common\.TestCase
|
||||
|
9
setup.py
9
setup.py
@ -71,7 +71,7 @@ with open("README.md", "r") as fh:
|
||||
|
||||
setup(
|
||||
name='fdroidserver',
|
||||
version='2.3a0',
|
||||
version='2.3a1',
|
||||
description='F-Droid Server Tools',
|
||||
long_description=long_description,
|
||||
long_description_content_type='text/markdown',
|
||||
@ -91,15 +91,16 @@ setup(
|
||||
'babel',
|
||||
],
|
||||
install_requires=[
|
||||
'androguard >= 3.1.0, != 3.3.0, != 3.3.1, != 3.3.2, <4',
|
||||
'appdirs',
|
||||
'androguard >= 3.3.5',
|
||||
'asn1crypto',
|
||||
'clint',
|
||||
'defusedxml',
|
||||
'GitPython',
|
||||
'oscrypto',
|
||||
'paramiko',
|
||||
'Pillow',
|
||||
'apache-libcloud >= 0.14.1',
|
||||
'pyasn1 >=0.4.1, < 0.5.0',
|
||||
'pyasn1-modules >= 0.2.1, < 0.3',
|
||||
'python-vagrant',
|
||||
'PyYAML',
|
||||
'qrcode',
|
||||
|
BIN
tests/SANAPPSI.RSA
Normal file
BIN
tests/SANAPPSI.RSA
Normal file
Binary file not shown.
2044
tests/SANAPPSI.SF
Normal file
2044
tests/SANAPPSI.SF
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,7 +4,6 @@
|
||||
|
||||
import inspect
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
@ -29,7 +28,7 @@ import fdroidserver.common
|
||||
import fdroidserver.metadata
|
||||
import fdroidserver.scanner
|
||||
import fdroidserver.vmtools
|
||||
from testcommon import mkdtemp
|
||||
from testcommon import mkdtemp, parse_args_for_test
|
||||
|
||||
|
||||
class FakeProcess:
|
||||
@ -49,8 +48,6 @@ class BuildTest(unittest.TestCase):
|
||||
|
||||
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')
|
||||
os.chdir(self.basedir)
|
||||
fdroidserver.common.config = None
|
||||
@ -221,7 +218,7 @@ class BuildTest(unittest.TestCase):
|
||||
|
||||
@mock.patch('fdroidserver.common.get_apk_id')
|
||||
@mock.patch('fdroidserver.build.FDroidPopen')
|
||||
@mock.patch('fdroidserver.common.is_apk_and_debuggable', lambda f: False)
|
||||
@mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda f: False)
|
||||
@mock.patch('fdroidserver.common.get_native_code', lambda f: 'x86')
|
||||
def test_build_local_maven(self, fake_FDroidPopen, fake_get_apk_id):
|
||||
"""Test build_local() with a maven project"""
|
||||
@ -342,7 +339,8 @@ class BuildTest(unittest.TestCase):
|
||||
'fdroidserver.common.sha256sum',
|
||||
return_value='ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
|
||||
) as _ignored, mock.patch(
|
||||
'fdroidserver.common.is_apk_and_debuggable', return_value=False
|
||||
'fdroidserver.common.is_debuggable_or_testOnly',
|
||||
return_value=False,
|
||||
) as _ignored, mock.patch(
|
||||
'fdroidserver.build.FDroidPopen', FakeProcess
|
||||
) as _ignored, mock.patch(
|
||||
@ -394,7 +392,7 @@ class BuildTest(unittest.TestCase):
|
||||
@mock.patch('sdkmanager.build_package_list', lambda use_net: None)
|
||||
@mock.patch('fdroidserver.build.FDroidPopen', FakeProcess)
|
||||
@mock.patch('fdroidserver.common.get_native_code', lambda _ignored: 'x86')
|
||||
@mock.patch('fdroidserver.common.is_apk_and_debuggable', lambda _ignored: False)
|
||||
@mock.patch('fdroidserver.common.is_debuggable_or_testOnly', lambda _ignored: False)
|
||||
@mock.patch(
|
||||
'fdroidserver.common.sha256sum',
|
||||
lambda f: 'ad7ce5467e18d40050dc51b8e7affc3e635c85bd8c59be62de32352328ed467e',
|
||||
@ -531,7 +529,8 @@ class BuildTest(unittest.TestCase):
|
||||
return_value=(app.id, build.versionCode, build.versionName),
|
||||
):
|
||||
with mock.patch(
|
||||
'fdroidserver.common.is_apk_and_debuggable', return_value=False
|
||||
'fdroidserver.common.is_debuggable_or_testOnly',
|
||||
return_value=False,
|
||||
):
|
||||
fdroidserver.build.build_local(
|
||||
app,
|
||||
@ -562,7 +561,7 @@ class BuildTest(unittest.TestCase):
|
||||
os.chdir(self.testdir)
|
||||
os.mkdir("build")
|
||||
|
||||
config = fdroidserver.common.get_config()
|
||||
config = fdroidserver.common.read_config()
|
||||
config['sdk_path'] = os.getenv('ANDROID_HOME')
|
||||
config['ndk_paths'] = {'r10d': os.getenv('ANDROID_NDK_HOME')}
|
||||
fdroidserver.common.config = config
|
||||
@ -1104,15 +1103,17 @@ class BuildTest(unittest.TestCase):
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Spew out even more information than normal",
|
||||
)
|
||||
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(BuildTest))
|
||||
|
@ -3,7 +3,6 @@
|
||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
@ -30,8 +29,6 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
os.chdir(self.basedir)
|
||||
|
||||
def test_autoupdatemode_no_suffix(self):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
fdroidserver.checkupdates.options.auto = 'bleh'
|
||||
fdroidserver.checkupdates.config = {}
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
@ -52,7 +49,7 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
):
|
||||
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
|
||||
with mock.patch('subprocess.call', lambda cmd: 0):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
|
||||
|
||||
build = app['Builds'][-1]
|
||||
self.assertEqual(build.versionName, '1.1.9')
|
||||
@ -64,15 +61,13 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
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)
|
||||
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.options = mock.Mock()
|
||||
fdroidserver.checkupdates.options.auto = 'bleh'
|
||||
fdroidserver.checkupdates.config = {}
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
@ -93,15 +88,13 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
):
|
||||
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
|
||||
with mock.patch('subprocess.call', lambda cmd: 0):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
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.options = mock.Mock()
|
||||
fdroidserver.checkupdates.options.auto = 'bleh'
|
||||
fdroidserver.checkupdates.config = {}
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
@ -134,7 +127,7 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
):
|
||||
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
|
||||
with mock.patch('subprocess.call', lambda cmd: 0):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
|
||||
|
||||
build = app['Builds'][-2]
|
||||
self.assertEqual(build.versionName, '1.1.9')
|
||||
@ -150,8 +143,6 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
self.assertEqual(app.CurrentVersionCode, 101093)
|
||||
|
||||
def test_checkupdates_app_http(self):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
fdroidserver.checkupdates.options.auto = 'bleh'
|
||||
fdroidserver.checkupdates.config = {}
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
@ -165,7 +156,7 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
'fdroidserver.checkupdates.check_http', lambda app: (None, 'bla')
|
||||
):
|
||||
with self.assertRaises(FDroidException):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
|
||||
|
||||
with mock.patch(
|
||||
'fdroidserver.checkupdates.check_http', lambda app: ('1.1.9', 10109)
|
||||
@ -174,12 +165,10 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
'fdroidserver.metadata.write_metadata', mock.Mock()
|
||||
) as wrmock:
|
||||
with mock.patch('subprocess.call', lambda cmd: 0):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
|
||||
wrmock.assert_called_with(app.metadatapath, app)
|
||||
|
||||
def test_checkupdates_app_tags(self):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
fdroidserver.checkupdates.options.auto = 'bleh'
|
||||
fdroidserver.checkupdates.config = {}
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
@ -200,7 +189,7 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
lambda app, pattern: (None, 'bla', None),
|
||||
):
|
||||
with self.assertRaises(FDroidException):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
fdroidserver.checkupdates.checkupdates_app(app, auto=True)
|
||||
|
||||
with mock.patch(
|
||||
'fdroidserver.checkupdates.check_tags',
|
||||
@ -208,15 +197,13 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
):
|
||||
with mock.patch('fdroidserver.metadata.write_metadata', mock.Mock()):
|
||||
with mock.patch('subprocess.call', lambda cmd: 0):
|
||||
fdroidserver.checkupdates.checkupdates_app(app)
|
||||
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):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
app.id = 'loop.starts.shooting'
|
||||
app.metadatapath = 'metadata/' + app.id + '.yml'
|
||||
@ -243,8 +230,6 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
fdroidserver.checkupdates.check_http(app)
|
||||
|
||||
def test_check_http_ignore(self):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
app.id = 'loop.starts.shooting'
|
||||
app.metadatapath = 'metadata/' + app.id + '.yml'
|
||||
@ -260,8 +245,6 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
self.assertEqual(vername, None)
|
||||
|
||||
def test_check_tags_data(self):
|
||||
fdroidserver.checkupdates.options = mock.Mock()
|
||||
|
||||
app = fdroidserver.metadata.App()
|
||||
app.id = 'loop.starts.shooting'
|
||||
app.metadatapath = 'metadata/' + app.id + '.yml'
|
||||
@ -336,15 +319,18 @@ class CheckupdatesTest(unittest.TestCase):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
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.common.options, args) = parser.parse_args(['--verbose'])
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(CheckupdatesTest))
|
||||
|
@ -9,9 +9,9 @@ import importlib
|
||||
import inspect
|
||||
import json
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import re
|
||||
import ruamel.yaml
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
@ -21,6 +21,7 @@ import unittest
|
||||
import textwrap
|
||||
import yaml
|
||||
import gzip
|
||||
from argparse import ArgumentParser
|
||||
from zipfile import BadZipFile, ZipFile
|
||||
from unittest import mock
|
||||
from pathlib import Path
|
||||
@ -37,13 +38,19 @@ import fdroidserver.index
|
||||
import fdroidserver.signindex
|
||||
import fdroidserver.common
|
||||
import fdroidserver.metadata
|
||||
from testcommon import TmpCwd, mkdtemp
|
||||
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
|
||||
from fdroidserver.common import ANTIFEATURES_CONFIG_NAME, CATEGORIES_CONFIG_NAME
|
||||
from fdroidserver.exception import FDroidException, VCSException,\
|
||||
MetaDataException, VerificationException
|
||||
from fdroidserver.looseversion import LooseVersion
|
||||
|
||||
|
||||
def _mock_common_module_options_instance():
|
||||
"""Helper method to deal with difficult visibility of the module-level options."""
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.verbose = False
|
||||
|
||||
|
||||
class CommonTest(unittest.TestCase):
|
||||
'''fdroidserver/common.py'''
|
||||
|
||||
@ -56,17 +63,22 @@ class CommonTest(unittest.TestCase):
|
||||
if not os.path.exists(self.tmpdir):
|
||||
os.makedirs(self.tmpdir)
|
||||
os.chdir(self.basedir)
|
||||
|
||||
# these are declared as None at the top of the module file
|
||||
fdroidserver.common.config = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options = None
|
||||
fdroidserver.metadata.srclibs = None
|
||||
|
||||
self._td = mkdtemp()
|
||||
self.testdir = self._td.name
|
||||
|
||||
def tearDown(self):
|
||||
fdroidserver.common.config = None
|
||||
fdroidserver.common.options = None
|
||||
os.chdir(self.basedir)
|
||||
self._td.cleanup()
|
||||
shutil.rmtree(self.tmpdir)
|
||||
if os.path.exists(self.tmpdir):
|
||||
shutil.rmtree(self.tmpdir)
|
||||
|
||||
def test_parse_human_readable_size(self):
|
||||
for k, v in (
|
||||
@ -184,7 +196,7 @@ class CommonTest(unittest.TestCase):
|
||||
fdroidserver.common._add_java_paths_to_config(pathlist, config)
|
||||
self.assertEqual(config['java_paths']['8'], choice[1:])
|
||||
|
||||
def test_is_apk_and_debuggable(self):
|
||||
def test_is_debuggable_or_testOnly(self):
|
||||
config = dict()
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
fdroidserver.common.config = config
|
||||
@ -196,7 +208,7 @@ class CommonTest(unittest.TestCase):
|
||||
testfiles.append(os.path.join(self.basedir, 'urzip-badcert.apk'))
|
||||
for apkfile in testfiles:
|
||||
self.assertTrue(
|
||||
fdroidserver.common.is_apk_and_debuggable(apkfile),
|
||||
fdroidserver.common.is_debuggable_or_testOnly(apkfile),
|
||||
"debuggable APK state was not properly parsed!",
|
||||
)
|
||||
|
||||
@ -207,7 +219,7 @@ class CommonTest(unittest.TestCase):
|
||||
testfiles.append(os.path.join(self.basedir, 'v2.only.sig_2.apk'))
|
||||
for apkfile in testfiles:
|
||||
self.assertFalse(
|
||||
fdroidserver.common.is_apk_and_debuggable(apkfile),
|
||||
fdroidserver.common.is_debuggable_or_testOnly(apkfile),
|
||||
"debuggable APK state was not properly parsed!",
|
||||
)
|
||||
|
||||
@ -355,6 +367,7 @@ class CommonTest(unittest.TestCase):
|
||||
config = dict()
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
fdroidserver.common.config = config
|
||||
_mock_common_module_options_instance()
|
||||
|
||||
srclibname = 'FakeSrcLib'
|
||||
srclib_testdir = os.path.join(self.testdir, 'build', 'srclib')
|
||||
@ -396,6 +409,7 @@ class CommonTest(unittest.TestCase):
|
||||
onserver=True, refresh=False) # do not clone in this test
|
||||
|
||||
def test_prepare_sources_refresh(self):
|
||||
_mock_common_module_options_instance()
|
||||
packageName = 'org.fdroid.ci.test.app'
|
||||
os.chdir(self.tmpdir)
|
||||
os.mkdir('build')
|
||||
@ -466,6 +480,7 @@ class CommonTest(unittest.TestCase):
|
||||
config = dict()
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
fdroidserver.common.config = config
|
||||
_mock_common_module_options_instance()
|
||||
|
||||
commands = ['sh', '-c', 'echo stdout message && echo stderr message 1>&2']
|
||||
|
||||
@ -476,7 +491,8 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertEqual(p.output, 'stdout message\n')
|
||||
|
||||
def test_signjar(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
|
||||
fdroidserver.common.config = config
|
||||
fdroidserver.signindex.config = config
|
||||
@ -496,7 +512,8 @@ class CommonTest(unittest.TestCase):
|
||||
)
|
||||
|
||||
def test_verify_apk_signature(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
fdroidserver.common.config = config
|
||||
|
||||
self.assertTrue(fdroidserver.common.verify_apk_signature('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
|
||||
@ -518,7 +535,8 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertFalse(fdroidserver.common.verify_apk_signature('urzip-release-unsigned.apk'))
|
||||
|
||||
def test_verify_old_apk_signature(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
|
||||
fdroidserver.common.config = config
|
||||
|
||||
@ -539,7 +557,7 @@ class CommonTest(unittest.TestCase):
|
||||
|
||||
def test_verify_jar_signature(self):
|
||||
"""Sign entry.jar and make sure it validates"""
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
|
||||
config['keystore'] = os.path.join(self.basedir, 'keystore.jks')
|
||||
config['repo_keyalias'] = 'sova'
|
||||
@ -557,7 +575,7 @@ class CommonTest(unittest.TestCase):
|
||||
|
||||
def test_verify_jar_signature_fails(self):
|
||||
"""Test verify_jar_signature fails on unsigned and deprecated algorithms"""
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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')
|
||||
@ -567,7 +585,7 @@ class CommonTest(unittest.TestCase):
|
||||
fdroidserver.common.verify_jar_signature(testfile)
|
||||
|
||||
def test_verify_deprecated_jar_signature(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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')
|
||||
@ -580,8 +598,9 @@ class CommonTest(unittest.TestCase):
|
||||
fdroidserver.common.verify_deprecated_jar_signature(testfile)
|
||||
|
||||
def test_verify_apks(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
fdroidserver.common.config = config
|
||||
_mock_common_module_options_instance()
|
||||
|
||||
sourceapk = os.path.join(self.basedir, 'urzip.apk')
|
||||
|
||||
@ -614,6 +633,27 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertFalse(fdroidserver.common.verify_apk_signature(twosigapk))
|
||||
self.assertIsNone(fdroidserver.common.verify_apks(sourceapk, twosigapk, self.tmpdir))
|
||||
|
||||
def test_get_certificate_with_chain_sandisk(self):
|
||||
"""Test that APK signatures with a cert chain are parsed like apksigner.
|
||||
|
||||
SanDisk signs their APKs with a X.509 certificate chain of
|
||||
trust, so there are actually three certificates
|
||||
included. apksigner only cares about the certificate in the
|
||||
chain that actually signs the manifest.
|
||||
|
||||
The correct value comes from:
|
||||
apksigner verify --print-certs 883cbdae7aeb2e4b122e8ee8d89966c7062d0d49107a130235fa220a5b994a79.apk
|
||||
|
||||
"""
|
||||
cert = fdroidserver.common.get_certificate(
|
||||
signature_block_file=Path('SANAPPSI.RSA').read_bytes(),
|
||||
signature_file=Path('SANAPPSI.SF').read_bytes(),
|
||||
)
|
||||
self.assertEqual(
|
||||
'ea0abbf2a142e4b167405d516b2cc408c4af4b29cd50ba281aa4470d4aab3e53',
|
||||
fdroidserver.common.signer_fingerprint(cert),
|
||||
)
|
||||
|
||||
def test_write_to_config(self):
|
||||
with tempfile.TemporaryDirectory() as tmpPath:
|
||||
cfgPath = os.path.join(tmpPath, 'config.py')
|
||||
@ -867,7 +907,8 @@ class CommonTest(unittest.TestCase):
|
||||
)
|
||||
|
||||
def test_sign_apk(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
if 'apksigner' not in config:
|
||||
self.skipTest('SKIPPING test_sign_apk, apksigner not installed!')
|
||||
|
||||
@ -901,7 +942,7 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertTrue(os.path.isfile(signed))
|
||||
self.assertFalse(os.path.isfile(unsigned))
|
||||
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
|
||||
self.assertEqual('18', fdroidserver.common._get_androguard_APK(signed).get_min_sdk_version())
|
||||
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)
|
||||
unsigned = os.path.join(self.testdir, 'minimal_targetsdk_30_unsigned.apk')
|
||||
@ -914,7 +955,7 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertFalse(os.path.isfile(unsigned))
|
||||
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
|
||||
# verify it has a v2 signature
|
||||
self.assertTrue(fdroidserver.common._get_androguard_APK(signed).is_signed_v2())
|
||||
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)
|
||||
unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk30_unsigned.apk')
|
||||
@ -922,7 +963,7 @@ class CommonTest(unittest.TestCase):
|
||||
|
||||
fdroidserver.common.sign_apk(unsigned, signed, config['keyalias'])
|
||||
self.assertTrue(fdroidserver.common.verify_apk_signature(signed))
|
||||
self.assertTrue(fdroidserver.common._get_androguard_APK(signed).is_signed_v2())
|
||||
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)
|
||||
unsigned = os.path.join(self.testdir, 'no_targetsdk_minsdk1_unsigned.apk')
|
||||
@ -937,7 +978,8 @@ class CommonTest(unittest.TestCase):
|
||||
|
||||
@unittest.skipIf(os.getuid() == 0, 'This is meaningless when run as root')
|
||||
def test_sign_apk_fail(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
if 'apksigner' not in config:
|
||||
self.skipTest('SKIPPING test_sign_apk_fail, apksigner not installed!')
|
||||
|
||||
@ -960,7 +1002,8 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertFalse(os.path.isfile(signed))
|
||||
|
||||
def test_sign_apk_corrupt(self):
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
if 'apksigner' not in config:
|
||||
self.skipTest('SKIPPING test_sign_apk_corrupt, apksigner not installed!')
|
||||
|
||||
@ -986,7 +1029,8 @@ class CommonTest(unittest.TestCase):
|
||||
)
|
||||
def test_resign_apk(self):
|
||||
"""When using apksigner, it should resign signed APKs"""
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
_mock_common_module_options_instance()
|
||||
config = fdroidserver.common.read_config()
|
||||
if 'apksigner' not in config:
|
||||
self.skipTest('SKIPPING test_resign_apk, apksigner not installed!')
|
||||
|
||||
@ -1038,6 +1082,11 @@ class CommonTest(unittest.TestCase):
|
||||
('org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', 3, '1.0.2'),
|
||||
('org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', 4, '1.0.3'),
|
||||
('org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', 20, 'v1.6pre2'),
|
||||
('issue-1128-min-sdk-30-poc.apk', 'org.fdroid.ci', 1, '1.0'),
|
||||
('issue-1128-poc1.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
|
||||
('issue-1128-poc2.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
|
||||
('issue-1128-poc3a.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
|
||||
('issue-1128-poc3b.apk', 'android.appsecurity.cts.tinyapp', 10, '1.0'),
|
||||
('urzip.apk', 'info.guardianproject.urzip', 100, '0.1'),
|
||||
('urzip-badcert.apk', 'info.guardianproject.urzip', 100, '0.1'),
|
||||
('urzip-badsig.apk', 'info.guardianproject.urzip', 100, '0.1'),
|
||||
@ -1145,14 +1194,19 @@ class CommonTest(unittest.TestCase):
|
||||
"""This is a sanity test that androguard isn't broken"""
|
||||
|
||||
def get_minSdkVersion(apkfile):
|
||||
apk = fdroidserver.common._get_androguard_APK(apkfile)
|
||||
apk = fdroidserver.common.get_androguard_APK(apkfile)
|
||||
return fdroidserver.common.get_min_sdk_version(apk)
|
||||
|
||||
def get_targetSdkVersion(apkfile):
|
||||
apk = fdroidserver.common._get_androguard_APK(apkfile)
|
||||
apk = fdroidserver.common.get_androguard_APK(apkfile)
|
||||
return apk.get_effective_target_sdk_version()
|
||||
|
||||
self.assertEqual(4, get_minSdkVersion('bad-unicode-πÇÇ现代通用字-български-عربي1.apk'))
|
||||
self.assertEqual(30, get_minSdkVersion('issue-1128-min-sdk-30-poc.apk'))
|
||||
self.assertEqual(29, get_minSdkVersion('issue-1128-poc1.apk'))
|
||||
self.assertEqual(29, get_minSdkVersion('issue-1128-poc2.apk'))
|
||||
self.assertEqual(23, get_minSdkVersion('issue-1128-poc3a.apk'))
|
||||
self.assertEqual(23, get_minSdkVersion('issue-1128-poc3b.apk'))
|
||||
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_1.apk'))
|
||||
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_2.apk'))
|
||||
self.assertEqual(14, get_minSdkVersion('org.bitbucket.tickytacky.mirrormirror_3.apk'))
|
||||
@ -1163,6 +1217,7 @@ class CommonTest(unittest.TestCase):
|
||||
self.assertEqual(4, get_minSdkVersion('urzip-badsig.apk'))
|
||||
self.assertEqual(4, get_minSdkVersion('urzip-release.apk'))
|
||||
self.assertEqual(4, get_minSdkVersion('urzip-release-unsigned.apk'))
|
||||
self.assertEqual(27, get_minSdkVersion('v2.only.sig_2.apk'))
|
||||
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_3.apk'))
|
||||
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_4.apk'))
|
||||
self.assertEqual(3, get_minSdkVersion('repo/com.politedroid_5.apk'))
|
||||
@ -1881,7 +1936,7 @@ class CommonTest(unittest.TestCase):
|
||||
os.chdir(self.tmpdir)
|
||||
self.assertFalse(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertFalse(config.get('update_stats'))
|
||||
self.assertIsNotNone(config.get('char_limits'))
|
||||
|
||||
@ -1891,7 +1946,7 @@ class CommonTest(unittest.TestCase):
|
||||
open('config.yml', 'w').close()
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertFalse(config.get('update_stats'))
|
||||
self.assertIsNotNone(config.get('char_limits'))
|
||||
|
||||
@ -1902,7 +1957,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner: yml')
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual('yml', config.get('apksigner'))
|
||||
|
||||
def test_with_config_yml_utf8(self):
|
||||
@ -1913,7 +1968,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner: ' + teststr)
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual(teststr, config.get('apksigner'))
|
||||
|
||||
def test_with_config_yml_utf8_as_ascii(self):
|
||||
@ -1924,7 +1979,7 @@ class CommonTest(unittest.TestCase):
|
||||
yaml.dump({'apksigner': teststr}, fp)
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual(teststr, config.get('apksigner'))
|
||||
|
||||
def test_with_config_yml_with_env_var(self):
|
||||
@ -1936,20 +1991,20 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write("""keypass: {'env': 'SECRET'}""")
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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')
|
||||
with self.assertRaises(TypeError):
|
||||
fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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):
|
||||
fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
fdroidserver.common.read_config()
|
||||
|
||||
def test_with_config_py(self):
|
||||
"""Make sure it is still possible to use config.py alone."""
|
||||
@ -1958,7 +2013,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner = "py"')
|
||||
self.assertFalse(os.path.exists('config.yml'))
|
||||
self.assertTrue(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual("py", config.get('apksigner'))
|
||||
|
||||
def test_config_perm_warning(self):
|
||||
@ -1968,7 +2023,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('keystore: foo.jks')
|
||||
self.assertTrue(os.path.exists(fp.name))
|
||||
os.chmod(fp.name, 0o666)
|
||||
fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
fdroidserver.common.read_config()
|
||||
os.remove(fp.name)
|
||||
fdroidserver.common.config = None
|
||||
|
||||
@ -1976,7 +2031,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('keystore = "foo.jks"')
|
||||
self.assertTrue(os.path.exists(fp.name))
|
||||
os.chmod(fp.name, 0o666)
|
||||
fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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."""
|
||||
@ -1987,7 +2042,7 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner = "py"')
|
||||
self.assertTrue(os.path.exists('config.yml'))
|
||||
self.assertTrue(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual('yml', config.get('apksigner'))
|
||||
|
||||
def test_config_repo_url(self):
|
||||
@ -2038,14 +2093,14 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner: yml')
|
||||
self.assertTrue(os.path.exists(fp.name))
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual('mysecretpassword', config['keypass'])
|
||||
|
||||
def test_write_to_config_py(self):
|
||||
@ -2054,12 +2109,12 @@ class CommonTest(unittest.TestCase):
|
||||
fp.write('apksigner = "py"')
|
||||
self.assertTrue(os.path.exists(fp.name))
|
||||
self.assertFalse(os.path.exists('config.yml'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
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(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual('mysecretpassword', config['keypass'])
|
||||
|
||||
def test_config_dict_with_int_keys(self):
|
||||
@ -2068,7 +2123,7 @@ class CommonTest(unittest.TestCase):
|
||||
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'))
|
||||
config = fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertEqual('/usr/lib/jvm/java-8-openjdk', config.get('java_paths', {}).get('8'))
|
||||
|
||||
@mock.patch.dict(os.environ, {'PATH': os.getenv('PATH')}, clear=True)
|
||||
@ -2146,7 +2201,7 @@ class CommonTest(unittest.TestCase):
|
||||
shutil.copy(os.path.join(self.basedir, '..', 'buildserver', 'config.buildserver.yml'),
|
||||
'config.yml')
|
||||
self.assertFalse(os.path.exists('config.py'))
|
||||
fdroidserver.common.read_config(fdroidserver.common.options)
|
||||
fdroidserver.common.read_config()
|
||||
|
||||
def test_setup_status_output(self):
|
||||
os.chdir(self.tmpdir)
|
||||
@ -2499,6 +2554,7 @@ class CommonTest(unittest.TestCase):
|
||||
|
||||
@mock.patch.dict(os.environ, clear=True)
|
||||
def test_FDroidPopen_envs_paths_can_be_pathlib(self):
|
||||
_mock_common_module_options_instance()
|
||||
os.environ['PATH'] = '/usr/bin:/usr/sbin'
|
||||
envs = {'PATHLIB': Path('/pathlib/path'), 'STRING': '/string/path'}
|
||||
p = fdroidserver.common.FDroidPopen(['/bin/sh', '-c', 'export'], envs=envs)
|
||||
@ -2892,19 +2948,394 @@ class CommonTest(unittest.TestCase):
|
||||
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)
|
||||
self.assertEqual(
|
||||
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
|
||||
)
|
||||
|
||||
def test_parse_mirrors_config_list(self):
|
||||
s = 'foo@example.com:/var/www'
|
||||
mirrors = ruamel.yaml.YAML(typ='safe').load("""- '%s'""" % s)
|
||||
self.assertEqual(
|
||||
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
|
||||
)
|
||||
|
||||
def test_parse_mirrors_config_dict(self):
|
||||
s = 'foo@example.com:/var/www'
|
||||
mirrors = ruamel.yaml.YAML(typ='safe').load("""- url: '%s'""" % s)
|
||||
self.assertEqual(
|
||||
[{'url': s}], fdroidserver.common.parse_mirrors_config(mirrors)
|
||||
)
|
||||
|
||||
|
||||
APKS_WITH_JAR_SIGNATURES = (
|
||||
(
|
||||
'SpeedoMeterApp.main_1.apk',
|
||||
'2e6b3126fb7e0db6a9d4c2a06df690620655454d6e152cf244cc9efe9787a77d',
|
||||
),
|
||||
(
|
||||
'apk.embedded_1.apk',
|
||||
'764f0eaac0cdcde35023658eea865c4383ab580f9827c62fdd3daf9e654199ee',
|
||||
),
|
||||
(
|
||||
'bad-unicode-πÇÇ现代通用字-български-عربي1.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'issue-1128-poc3a.apk',
|
||||
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
|
||||
),
|
||||
(
|
||||
'issue-1128-poc3b.apk',
|
||||
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
|
||||
),
|
||||
(
|
||||
'janus.apk',
|
||||
'ebb0fedf1942a099b287c3db00ff732162152481abb2b6c7cbcdb2ba5894a768',
|
||||
),
|
||||
(
|
||||
'org.bitbucket.tickytacky.mirrormirror_1.apk',
|
||||
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
|
||||
),
|
||||
(
|
||||
'org.bitbucket.tickytacky.mirrormirror_2.apk',
|
||||
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
|
||||
),
|
||||
(
|
||||
'org.bitbucket.tickytacky.mirrormirror_3.apk',
|
||||
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
|
||||
),
|
||||
(
|
||||
'org.bitbucket.tickytacky.mirrormirror_4.apk',
|
||||
'feaa63df35b4635cf091513dfcd6d11209632555efdfc47e33b70d4e4eb5ba28',
|
||||
),
|
||||
(
|
||||
'org.dyndns.fules.ck_20.apk',
|
||||
'9326a2cc1a2f148202bc7837a0af3b81200bd37fd359c9e13a2296a71d342056',
|
||||
),
|
||||
(
|
||||
'org.sajeg.fallingblocks_3.apk',
|
||||
'033389681f4288fdb3e72a28058c8506233ca50de75452ab6c9c76ea1ca2d70f',
|
||||
),
|
||||
(
|
||||
'repo/com.example.test.helloworld_1.apk',
|
||||
'c3a5ca5465a7585a1bda30218ae4017083605e3576867aa897d724208d99696c',
|
||||
),
|
||||
(
|
||||
'repo/com.politedroid_3.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/com.politedroid_4.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/com.politedroid_5.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/com.politedroid_6.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/duplicate.permisssions_9999999.apk',
|
||||
'659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84',
|
||||
),
|
||||
(
|
||||
'repo/info.zwanenburg.caffeinetile_4.apk',
|
||||
'51cfa5c8a743833ad89acf81cb755936876a5c8b8eca54d1ffdcec0cdca25d0e',
|
||||
),
|
||||
(
|
||||
'repo/no.min.target.sdk_987.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/obb.main.oldversion_1444412523.apk',
|
||||
'818e469465f96b704e27be2fee4c63ab9f83ddf30e7a34c7371a4728d83b0bc1',
|
||||
),
|
||||
(
|
||||
'repo/obb.main.twoversions_1101613.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/obb.main.twoversions_1101615.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/obb.main.twoversions_1101617.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/obb.mainpatch.current_1619.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/obb.mainpatch.current_1619_another-release-key.apk',
|
||||
'ce9e200667f02d96d49891a2e08a3c178870e91853d61bdd33ef5f0b54701aa5',
|
||||
),
|
||||
(
|
||||
'repo/souch.smsbypass_9.apk',
|
||||
'd3aec784b1fd71549fc22c999789122e3639895db6bd585da5835fbe3db6985c',
|
||||
),
|
||||
(
|
||||
'repo/urzip-; Рахма́, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢·.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'repo/v1.v2.sig_1020.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'urzip-release.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
(
|
||||
'urzip.apk',
|
||||
'7eabd8c15de883d1e82b5df2fd4f7f769e498078e9ad6dc901f0e96db77ceac3',
|
||||
),
|
||||
)
|
||||
APKS_WITHOUT_JAR_SIGNATURES = (
|
||||
(
|
||||
'issue-1128-poc1.apk', # APK v3 Signature only
|
||||
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
|
||||
),
|
||||
(
|
||||
'issue-1128-poc2.apk', # APK v3 Signature only
|
||||
'1dbb8be012293e988a0820f7d455b07abd267d2c0b500fc793fcfd80141cb5ce',
|
||||
),
|
||||
(
|
||||
'issue-1128-min-sdk-30-poc.apk', # APK v3 Signature only
|
||||
'09350d5f3460a8a0ea5cf6b68ccd296a58754f7e683ba6aa08c19be8353504f3',
|
||||
),
|
||||
(
|
||||
'v2.only.sig_2.apk',
|
||||
'32a23624c201b949f085996ba5ed53d40f703aca4989476949cae891022e0ed6',
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
class SignerExtractionTest(unittest.TestCase):
|
||||
"""Test extraction of the signer certificate from JARs and APKs
|
||||
|
||||
These fingerprints can be confirmed with:
|
||||
apksigner verify --print-certs foo.apk | grep SHA-256
|
||||
keytool -printcert -file ____.RSA
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
os.chdir(os.path.join(localmodule, 'tests'))
|
||||
self._td = mkdtemp()
|
||||
self.testdir = self._td.name
|
||||
|
||||
self.apksigner = shutil.which('apksigner')
|
||||
self.keytool = shutil.which('keytool')
|
||||
|
||||
def tearDown(self):
|
||||
self._td.cleanup()
|
||||
|
||||
def test_get_first_signer_certificate_with_jars(self):
|
||||
for jar in (
|
||||
'signindex/guardianproject-v1.jar',
|
||||
'signindex/guardianproject.jar',
|
||||
'signindex/testy.jar',
|
||||
):
|
||||
outdir = os.path.join(self.testdir, jar[:-4].replace('/', '_'))
|
||||
os.mkdir(outdir)
|
||||
fdroidserver.common.apk_extract_signatures(jar, outdir)
|
||||
certs = glob.glob(os.path.join(outdir, '*.RSA'))
|
||||
with open(certs[0], 'rb') as fp:
|
||||
self.assertEqual(
|
||||
fdroidserver.common.get_certificate(fp.read()),
|
||||
fdroidserver.common.get_first_signer_certificate(jar),
|
||||
)
|
||||
|
||||
@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')
|
||||
pat = re.compile(r'[0-9A-F:]{95}')
|
||||
cmd = [self.keytool, '-printcert', '-jarfile']
|
||||
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
|
||||
o = subprocess.check_output(cmd + [apk], text=True)
|
||||
try:
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
pat.search(o).group().replace(':', '').lower(),
|
||||
)
|
||||
except AttributeError as e:
|
||||
print(e, o)
|
||||
|
||||
@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')
|
||||
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:
|
||||
output = subprocess.check_output(cmd + [apk], text=True)
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
pat.search(output).group().strip(),
|
||||
apk + " should have matching signer fingerprints",
|
||||
)
|
||||
|
||||
def test_apk_signer_fingerprint_with_v1_apks(self):
|
||||
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
fdroidserver.common.apk_signer_fingerprint(apk),
|
||||
f'apk_signer_fingerprint should match stored fingerprint for {apk}',
|
||||
)
|
||||
|
||||
def test_apk_signer_fingerprint_without_v1_apks(self):
|
||||
for apk, fingerprint in APKS_WITHOUT_JAR_SIGNATURES:
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
fdroidserver.common.apk_signer_fingerprint(apk),
|
||||
f'apk_signer_fingerprint should match stored fingerprint for {apk}',
|
||||
)
|
||||
|
||||
def test_get_first_signer_certificate_with_unsigned_jar(self):
|
||||
self.assertIsNone(
|
||||
fdroidserver.common.get_first_signer_certificate('signindex/unsigned.jar')
|
||||
)
|
||||
|
||||
def test_apk_extract_fingerprint(self):
|
||||
"""Test extraction of JAR signatures (does not cover APK v2+ extraction)."""
|
||||
for apk, fingerprint in APKS_WITH_JAR_SIGNATURES:
|
||||
outdir = os.path.join(self.testdir, apk[:-4].replace('/', '_'))
|
||||
os.mkdir(outdir)
|
||||
try:
|
||||
fdroidserver.common.apk_extract_signatures(apk, outdir)
|
||||
except fdroidserver.apksigcopier.APKSigCopierError:
|
||||
# nothing to test here when this error is thrown
|
||||
continue
|
||||
v1_certs = [str(cert) for cert in Path(outdir).glob('*.[DR]SA')]
|
||||
cert = fdroidserver.common.get_certificate(
|
||||
signature_block_file=Path(v1_certs[0]).read_bytes(),
|
||||
signature_file=Path(v1_certs[0][:-4] + '.SF').read_bytes(),
|
||||
)
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
fdroidserver.common.signer_fingerprint(cert),
|
||||
)
|
||||
apkobject = fdroidserver.common.get_androguard_APK(apk, skip_analysis=True)
|
||||
v2_certs = apkobject.get_certificates_der_v2()
|
||||
if v2_certs:
|
||||
if v1_certs:
|
||||
self.assertEqual(len(v1_certs), len(v2_certs))
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
fdroidserver.common.signer_fingerprint(v2_certs[0]),
|
||||
)
|
||||
v3_certs = apkobject.get_certificates_der_v3()
|
||||
if v3_certs:
|
||||
if v2_certs:
|
||||
self.assertEqual(len(v2_certs), len(v3_certs))
|
||||
self.assertEqual(
|
||||
fingerprint,
|
||||
fdroidserver.common.signer_fingerprint(v3_certs[0]),
|
||||
)
|
||||
|
||||
|
||||
class ConfigOptionsScopeTest(unittest.TestCase):
|
||||
"""Test assumptions about variable scope for "config" and "options".
|
||||
|
||||
The ancient architecture of config and options in fdroidserver has
|
||||
weird issues around unexpected scope, like there are cases where
|
||||
the global config is not the same as the module-level config, and
|
||||
more.
|
||||
|
||||
This is about describing what is happening, it is not about
|
||||
documenting behaviors that are good design. The config and options
|
||||
handling should really be refactored into a well-known, workable
|
||||
Pythonic pattern.
|
||||
|
||||
"""
|
||||
|
||||
def setUp(self):
|
||||
# these are declared as None at the top of the module file
|
||||
fdroidserver.common.config = None
|
||||
fdroidserver.common.options = None
|
||||
|
||||
def tearDown(self):
|
||||
fdroidserver.common.config = None
|
||||
fdroidserver.common.options = None
|
||||
if 'config' in globals():
|
||||
global config
|
||||
del config
|
||||
if 'options' in globals():
|
||||
global options
|
||||
del options
|
||||
|
||||
def test_parse_args(self):
|
||||
"""Test that options is properly set up at the module-level and not global."""
|
||||
self.assertFalse('options' in globals())
|
||||
self.assertIsNone(fdroidserver.common.options)
|
||||
parser = ArgumentParser()
|
||||
fdroidserver.common.setup_global_opts(parser)
|
||||
with mock.patch('sys.argv', ['$0']):
|
||||
o = fdroidserver.common.parse_args(parser)
|
||||
self.assertEqual(o, fdroidserver.common.options)
|
||||
|
||||
# No function should set options as a global, and the global
|
||||
# keyword does not create the variable.
|
||||
global options
|
||||
with self.assertRaises(NameError):
|
||||
options
|
||||
self.assertFalse('options' in globals())
|
||||
|
||||
def test_parse_args_without_args(self):
|
||||
"""Test that the parsing function works fine when there are no args."""
|
||||
parser = ArgumentParser()
|
||||
fdroidserver.common.setup_global_opts(parser)
|
||||
with mock.patch('sys.argv', ['$0']):
|
||||
o = fdroidserver.common.parse_args(parser)
|
||||
self.assertFalse(o.verbose)
|
||||
|
||||
def test_parse_args_with_args(self):
|
||||
parser = ArgumentParser()
|
||||
fdroidserver.common.setup_global_opts(parser)
|
||||
with mock.patch('sys.argv', ['$0', '-v']):
|
||||
o = fdroidserver.common.parse_args(parser)
|
||||
self.assertTrue(o.verbose)
|
||||
|
||||
def test_get_config(self):
|
||||
"""Show how the module-level variables are initialized."""
|
||||
self.assertTrue('config' not in vars() and 'config' not in globals())
|
||||
self.assertIsNone(fdroidserver.common.config)
|
||||
config = fdroidserver.common.read_config()
|
||||
self.assertIsNotNone(fdroidserver.common.config)
|
||||
self.assertEqual(dict, type(config))
|
||||
self.assertEqual(config, fdroidserver.common.config)
|
||||
|
||||
def test_get_config_global(self):
|
||||
"""Test assumptions about variable scope using global keyword."""
|
||||
global config
|
||||
self.assertTrue('config' not in vars() and 'config' not in globals())
|
||||
self.assertIsNone(fdroidserver.common.config)
|
||||
c = fdroidserver.common.read_config()
|
||||
self.assertIsNotNone(fdroidserver.common.config)
|
||||
self.assertEqual(dict, type(c))
|
||||
self.assertEqual(c, fdroidserver.common.config)
|
||||
self.assertTrue(
|
||||
'config' not in vars() and 'config' not in globals(),
|
||||
"The config should not be set in the global context, only module-level.",
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
parser = ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Spew out even more information than normal",
|
||||
)
|
||||
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(CommonTest))
|
||||
|
@ -1,9 +1,10 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import configparser
|
||||
import inspect
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
@ -21,7 +22,12 @@ if localmodule not in sys.path:
|
||||
import fdroidserver.common
|
||||
import fdroidserver.deploy
|
||||
from fdroidserver.exception import FDroidException
|
||||
from testcommon import TmpCwd, mkdtemp
|
||||
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
|
||||
|
||||
|
||||
class Options:
|
||||
quiet = False
|
||||
verbose = False
|
||||
|
||||
|
||||
class DeployTest(unittest.TestCase):
|
||||
@ -34,6 +40,10 @@ class DeployTest(unittest.TestCase):
|
||||
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()
|
||||
|
||||
@ -63,7 +73,7 @@ class DeployTest(unittest.TestCase):
|
||||
url1.mkdir(parents=True)
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.deploy.config['make_current_version_link'] = False
|
||||
|
||||
dest_apk0 = url0 / fake_apk
|
||||
@ -94,6 +104,96 @@ class DeployTest(unittest.TestCase):
|
||||
with self.assertRaises(SystemExit):
|
||||
fdroidserver.deploy.update_serverwebroots([{'url': 'ssh://nope'}], 'repo')
|
||||
|
||||
@unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone')
|
||||
def test_update_remote_storage_with_rclone(self):
|
||||
os.chdir(self.testdir)
|
||||
repo = Path('repo')
|
||||
repo.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
fake_apk = repo / 'another_fake.apk'
|
||||
with fake_apk.open('w') as fp:
|
||||
fp.write('not an APK, but has the right filename')
|
||||
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
|
||||
with fake_index.open('w') as fp:
|
||||
fp.write('not an index, but has the right filename')
|
||||
|
||||
# write out rclone config for test use
|
||||
rclone_config = configparser.ConfigParser()
|
||||
rclone_config.add_section("test-local-config")
|
||||
rclone_config.set("test-local-config", "type", "local")
|
||||
|
||||
rclone_config_path = Path('rclone_config_path')
|
||||
rclone_config_path.mkdir(parents=True, exist_ok=True)
|
||||
rclone_file = rclone_config_path / 'rclone.conf'
|
||||
with open(rclone_file, 'w') as configfile:
|
||||
rclone_config.write(configfile)
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder'
|
||||
fdroidserver.deploy.config['rclone'] = True
|
||||
fdroidserver.deploy.config['rclone_config'] = 'test-local-config'
|
||||
fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file)
|
||||
fdroidserver.common.options = Options
|
||||
|
||||
# write out destination path
|
||||
destination = Path('some_bucket_folder/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)
|
||||
self.assertTrue(dest_apk.is_file())
|
||||
self.assertTrue(dest_index.is_file())
|
||||
|
||||
@unittest.skipUnless(shutil.which('rclone'), '/usr/bin/rclone')
|
||||
def test_update_remote_storage_with_rclone_in_index_only_mode(self):
|
||||
os.chdir(self.testdir)
|
||||
repo = Path('repo')
|
||||
repo.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
fake_apk = repo / 'another_fake.apk'
|
||||
with fake_apk.open('w') as fp:
|
||||
fp.write('not an APK, but has the right filename')
|
||||
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
|
||||
with fake_index.open('w') as fp:
|
||||
fp.write('not an index, but has the right filename')
|
||||
|
||||
# write out rclone config for test use
|
||||
rclone_config = configparser.ConfigParser()
|
||||
rclone_config.add_section("test-local-config")
|
||||
rclone_config.set("test-local-config", "type", "local")
|
||||
|
||||
rclone_config_path = Path('rclone_config_path')
|
||||
rclone_config_path.mkdir(parents=True, exist_ok=True)
|
||||
rclone_file = rclone_config_path / 'rclone.conf'
|
||||
with open(rclone_file, 'w') as configfile:
|
||||
rclone_config.write(configfile)
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.config['awsbucket'] = 'test_bucket_folder'
|
||||
fdroidserver.deploy.config['rclone'] = True
|
||||
fdroidserver.deploy.config['rclone_config'] = 'test-local-config'
|
||||
fdroidserver.deploy.config['path_to_custom_rclone_config'] = str(rclone_file)
|
||||
fdroidserver.common.options = Options
|
||||
|
||||
# write out destination path
|
||||
destination = Path('some_bucket_folder/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
|
||||
)
|
||||
self.assertFalse(dest_apk.is_file())
|
||||
self.assertTrue(dest_index.is_file())
|
||||
|
||||
def test_update_serverwebroot(self):
|
||||
"""rsync works with file paths, so this test uses paths for the URLs"""
|
||||
os.chdir(self.testdir)
|
||||
@ -109,7 +209,9 @@ class DeployTest(unittest.TestCase):
|
||||
url.mkdir()
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.deploy.config['make_current_version_link'] = False
|
||||
|
||||
dest_apk = Path(url) / fake_apk
|
||||
@ -128,16 +230,15 @@ class DeployTest(unittest.TestCase):
|
||||
fake_apk = repo / 'fake.apk'
|
||||
with fake_apk.open('w') as fp:
|
||||
fp.write('not an APK, but has the right filename')
|
||||
for i in fdroidserver.deploy.INDEX_FILES:
|
||||
fake_index = repo / i
|
||||
with fake_index.open('w') as fp:
|
||||
fp.write('not an index, but has the right filename')
|
||||
fake_index = repo / fdroidserver.deploy.INDEX_FILES[0]
|
||||
with fake_index.open('w') as fp:
|
||||
fp.write('not an index, but has the right filename')
|
||||
url = Path('url')
|
||||
url.mkdir()
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.deploy.config['make_current_version_link'] = False
|
||||
|
||||
dest_apk = Path(url) / fake_apk
|
||||
@ -159,14 +260,16 @@ class DeployTest(unittest.TestCase):
|
||||
fdroidserver.deploy.update_serverwebroot('serverwebroot', 'repo')
|
||||
|
||||
def test_update_serverwebroot_make_cur_version_link(self):
|
||||
self.maxDiff = None
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.config['make_current_version_link'] = True
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.no_checksum = True
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options.quiet = True
|
||||
fdroidserver.common.options.index_only = False
|
||||
fdroidserver.deploy.config = {'make_current_version_link': True}
|
||||
url = "example.com:/var/www/fdroid"
|
||||
repo_section = 'repo'
|
||||
|
||||
@ -185,6 +288,8 @@ class DeployTest(unittest.TestCase):
|
||||
'--safe-links',
|
||||
'--quiet',
|
||||
'--exclude',
|
||||
'repo/altstore-index.json',
|
||||
'--exclude',
|
||||
'repo/entry.jar',
|
||||
'--exclude',
|
||||
'repo/entry.json',
|
||||
@ -252,12 +357,12 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_serverwebroot_make_cur_version_link_in_index_only_mode(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.no_checksum = True
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options.quiet = True
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.deploy.config['make_current_version_link'] = True
|
||||
url = "example.com:/var/www/fdroid"
|
||||
repo_section = 'repo'
|
||||
@ -276,6 +381,7 @@ class DeployTest(unittest.TestCase):
|
||||
'--delete-after',
|
||||
'--safe-links',
|
||||
'--quiet',
|
||||
'repo/altstore-index.json',
|
||||
'repo/entry.jar',
|
||||
'repo/entry.json',
|
||||
'repo/entry.json.asc',
|
||||
@ -335,14 +441,14 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_serverwebroot_with_id_file(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.verbose = True
|
||||
fdroidserver.deploy.options.quiet = False
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.config['identity_file'] = './id_rsa'
|
||||
fdroidserver.deploy.config['make_current_version_link'] = False
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.no_checksum = True
|
||||
fdroidserver.common.options.verbose = True
|
||||
fdroidserver.common.options.quiet = False
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.index_only = False
|
||||
fdroidserver.deploy.config = {'identity_file': './id_rsa'}
|
||||
url = "example.com:/var/www/fdroid"
|
||||
repo_section = 'archive'
|
||||
|
||||
@ -364,6 +470,8 @@ class DeployTest(unittest.TestCase):
|
||||
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
|
||||
+ fdroidserver.deploy.config['identity_file'],
|
||||
'--exclude',
|
||||
'archive/altstore-index.json',
|
||||
'--exclude',
|
||||
'archive/entry.jar',
|
||||
'--exclude',
|
||||
'archive/entry.json',
|
||||
@ -414,11 +522,11 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_serverwebroot_with_id_file_in_index_only_mode(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_chcksum = False
|
||||
fdroidserver.deploy.options.verbose = True
|
||||
fdroidserver.deploy.options.quiet = False
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.no_chcksum = False
|
||||
fdroidserver.common.options.verbose = True
|
||||
fdroidserver.common.options.quiet = False
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.deploy.config['identity_file'] = './id_rsa'
|
||||
fdroidserver.deploy.config['make_current_version_link'] = False
|
||||
url = "example.com:/var/www/fdroid"
|
||||
@ -441,6 +549,7 @@ class DeployTest(unittest.TestCase):
|
||||
'-e',
|
||||
'ssh -oBatchMode=yes -oIdentitiesOnly=yes -i '
|
||||
+ fdroidserver.deploy.config['identity_file'],
|
||||
'archive/altstore-index.json',
|
||||
'archive/entry.jar',
|
||||
'archive/entry.json',
|
||||
'archive/entry.json.asc',
|
||||
@ -484,8 +593,8 @@ class DeployTest(unittest.TestCase):
|
||||
not os.getenv('VIRUSTOTAL_API_KEY'), 'VIRUSTOTAL_API_KEY is not set'
|
||||
)
|
||||
def test_upload_to_virustotal(self):
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.verbose = True
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.verbose = True
|
||||
virustotal_apikey = os.getenv('VIRUSTOTAL_API_KEY')
|
||||
fdroidserver.deploy.upload_to_virustotal('repo', virustotal_apikey)
|
||||
|
||||
@ -503,10 +612,10 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_awsbucket_s3cmd(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
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)
|
||||
@ -543,6 +652,8 @@ class DeployTest(unittest.TestCase):
|
||||
'--acl-public',
|
||||
'--quiet',
|
||||
'--exclude',
|
||||
'repo/altstore-index.json',
|
||||
'--exclude',
|
||||
'repo/entry.jar',
|
||||
'--exclude',
|
||||
'repo/entry.json',
|
||||
@ -578,6 +689,8 @@ class DeployTest(unittest.TestCase):
|
||||
'--acl-public',
|
||||
'--quiet',
|
||||
'--exclude',
|
||||
'repo/altstore-index.json',
|
||||
'--exclude',
|
||||
'repo/entry.jar',
|
||||
'--exclude',
|
||||
'repo/entry.json',
|
||||
@ -634,10 +747,10 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_awsbucket_s3cmd_in_index_only_mode(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
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)
|
||||
@ -674,6 +787,8 @@ class DeployTest(unittest.TestCase):
|
||||
'--acl-public',
|
||||
'--quiet',
|
||||
'--include',
|
||||
'repo/altstore-index.json',
|
||||
'--include',
|
||||
'repo/entry.jar',
|
||||
'--include',
|
||||
'repo/entry.json',
|
||||
@ -712,7 +827,7 @@ class DeployTest(unittest.TestCase):
|
||||
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, index_only=True
|
||||
repo_section, is_index_only=True
|
||||
)
|
||||
self.assertEqual(call_iteration, 2, 'expected 2 invocations of subprocess.call')
|
||||
|
||||
@ -720,10 +835,10 @@ class DeployTest(unittest.TestCase):
|
||||
from libcloud.storage.base import Container
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
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)
|
||||
@ -764,7 +879,10 @@ class DeployTest(unittest.TestCase):
|
||||
container_name=fdroidserver.deploy.config["awsbucket"]
|
||||
)
|
||||
mock_container.list_objects.assert_called_once_with()
|
||||
files_to_upload = ['fdroid/repo/Sym.apk', 'fdroid/repo/entry.jar']
|
||||
files_to_upload = [
|
||||
'fdroid/repo/Sym.apk',
|
||||
f"fdroid/repo/{fdroidserver.deploy.INDEX_FILES[0]}",
|
||||
]
|
||||
calls = [
|
||||
mock.call(
|
||||
iterator=mock.ANY,
|
||||
@ -781,10 +899,10 @@ class DeployTest(unittest.TestCase):
|
||||
from libcloud.storage.base import Container
|
||||
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.no_checksum = True
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
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)
|
||||
@ -819,13 +937,15 @@ class DeployTest(unittest.TestCase):
|
||||
mock_driver.get_container.return_value = mock_container
|
||||
mock_driver.upload_object_via_stream.return_value = None
|
||||
|
||||
fdroidserver.deploy.update_awsbucket_libcloud(repo_section, index_only=True)
|
||||
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 = ['fdroid/repo/entry.jar']
|
||||
files_to_upload = [f"fdroid/repo/{fdroidserver.deploy.INDEX_FILES[0]}"]
|
||||
calls = [
|
||||
mock.call(
|
||||
iterator=mock.ANY,
|
||||
@ -843,11 +963,11 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_servergitmirrors(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options.quiet = True
|
||||
|
||||
config = {}
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
@ -894,11 +1014,11 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_update_servergitmirrors_in_index_only_mode(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options.quiet = True
|
||||
|
||||
config = {}
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
@ -954,12 +1074,12 @@ class DeployTest(unittest.TestCase):
|
||||
|
||||
def test_upload_to_servergitmirror_in_index_only_mode(self):
|
||||
# setup parameters for this test run
|
||||
fdroidserver.deploy.options = mock.Mock()
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.deploy.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.deploy.options.verbose = False
|
||||
fdroidserver.deploy.options.quiet = True
|
||||
fdroidserver.deploy.options.identity_file = None
|
||||
fdroidserver.common.options = mock.Mock()
|
||||
fdroidserver.common.options.identity_file = None
|
||||
fdroidserver.common.options.no_keep_git_mirror_archive = False
|
||||
fdroidserver.common.options.verbose = False
|
||||
fdroidserver.common.options.quiet = True
|
||||
fdroidserver.common.options.identity_file = None
|
||||
|
||||
config = {}
|
||||
fdroidserver.common.fill_config_defaults(config)
|
||||
@ -1030,15 +1150,17 @@ class DeployTest(unittest.TestCase):
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Spew out even more information than normal",
|
||||
)
|
||||
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(DeployTest))
|
||||
|
@ -56,9 +56,9 @@ def _build_yaml_representer(dumper, data):
|
||||
parser = ArgumentParser()
|
||||
fdroidserver.common.setup_global_opts(parser)
|
||||
fdroidserver.metadata.add_metadata_arguments(parser)
|
||||
options = parser.parse_args()
|
||||
options = fdroidserver.common.parse_args(parser)
|
||||
fdroidserver.metadata.warnings_action = options.W
|
||||
fdroidserver.common.read_config(None)
|
||||
fdroidserver.common.read_config()
|
||||
|
||||
if not os.path.isdir('metadata'):
|
||||
print("This script must be run in an F-Droid data folder with a 'metadata' subdir!")
|
||||
|
@ -3,7 +3,6 @@
|
||||
# http://www.drdobbs.com/testing/unit-testing-with-python/240165163
|
||||
|
||||
import inspect
|
||||
import optparse
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
@ -57,16 +56,18 @@ class ExceptionTest(unittest.TestCase):
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
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.exception.options, args) = parser.parse_args(['--verbose'])
|
||||
fdroidserver.common.options = fdroidserver.exception.options
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(ExceptionTest))
|
||||
|
@ -3,7 +3,6 @@
|
||||
import inspect
|
||||
import json
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
@ -33,7 +32,7 @@ class GpgsignTest(unittest.TestCase):
|
||||
self.repodir.mkdir()
|
||||
|
||||
gpgsign.config = None
|
||||
config = common.read_config(common.options)
|
||||
config = common.read_config()
|
||||
config['verbose'] = True
|
||||
config['gpghome'] = str((self.basedir / 'gnupghome').resolve())
|
||||
config['gpgkey'] = '1DBA2E89'
|
||||
@ -75,15 +74,17 @@ class GpgsignTest(unittest.TestCase):
|
||||
if __name__ == "__main__":
|
||||
os.chdir(os.path.dirname(__file__))
|
||||
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
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, args) = parser.parse_args(['--verbose'])
|
||||
common.parse_args(parser)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(GpgsignTest))
|
||||
|
@ -759,6 +759,7 @@
|
||||
- ' maven { url ''libs'' }'
|
||||
- ' maven { url = uri("https://jitpack.io") }'
|
||||
- ' maven { url = uri("https://maven.fabric.io/public") }'
|
||||
- ' maven { url = URI("https://jitpack.io") }'
|
||||
- ' maven { url MAVEN_REPO_CACHE }'
|
||||
- ' maven { url(''http://releases.marmeladburk.fidesmo.com/'') }'
|
||||
- ' maven {url "http://dl.bintray.com/tbruyelle/tbruyelle" }'
|
||||
@ -778,3 +779,5 @@
|
||||
- ' maven{url "https://plugins.gradle.org/m2/"}'
|
||||
- ' maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")'
|
||||
- ' maven(url = "https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven")'
|
||||
- ' maven ( url = "https://jitpack.io")'
|
||||
- ' maven( url = "https://oss.sonatype.org/content/repositories/snapshots/" )'
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
import git
|
||||
import logging
|
||||
import optparse
|
||||
import os
|
||||
import shutil
|
||||
import sys
|
||||
@ -15,7 +14,6 @@ from unittest import mock
|
||||
from pathlib import Path
|
||||
|
||||
import requests
|
||||
from testcommon import TmpCwd, mkdtemp
|
||||
|
||||
localmodule = Path(__file__).resolve().parent.parent
|
||||
print('localmodule: ' + str(localmodule))
|
||||
@ -26,6 +24,7 @@ import fdroidserver.common
|
||||
import fdroidserver.import_subcommand
|
||||
import fdroidserver.metadata
|
||||
from fdroidserver.exception import FDroidException
|
||||
from testcommon import TmpCwd, mkdtemp, parse_args_for_test
|
||||
|
||||
|
||||
class ImportTest(unittest.TestCase):
|
||||
@ -34,8 +33,6 @@ class ImportTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
self.basedir = localmodule / 'tests'
|
||||
fdroidserver.import_subcommand.options = mock.Mock()
|
||||
fdroidserver.import_subcommand.options.rev = None
|
||||
os.chdir(self.basedir)
|
||||
self._td = mkdtemp()
|
||||
self.testdir = self._td.name
|
||||
@ -146,7 +143,9 @@ class ImportTest(unittest.TestCase):
|
||||
fdroidserver.import_subcommand.main()
|
||||
|
||||
@mock.patch('sys.argv', ['fdroid import', '-u', 'https://fake/git/url.git'])
|
||||
@mock.patch('fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a: Path('td'))
|
||||
@mock.patch(
|
||||
'fdroidserver.import_subcommand.clone_to_tmp_dir', lambda a, r: Path('td')
|
||||
)
|
||||
def test_main_local_git(self):
|
||||
os.chdir(self.testdir)
|
||||
git.Repo.init('td')
|
||||
@ -161,15 +160,17 @@ class ImportTest(unittest.TestCase):
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
parser = optparse.OptionParser()
|
||||
parser.add_option(
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(
|
||||
"-v",
|
||||
"--verbose",
|
||||
action="store_true",
|
||||
default=False,
|
||||
help="Spew out even more information than normal",
|
||||
)
|
||||
(fdroidserver.common.options, args) = parser.parse_args(['--verbose'])
|
||||
parse_args_for_test(parser, sys.argv)
|
||||
|
||||
newSuite = unittest.TestSuite()
|
||||
newSuite.addTest(unittest.makeSuite(ImportTest))
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user