chiark / gitweb /
Merge branch 'no_sleep' into 'master'
authorMichael Pöhn <uniq@h4x.at>
Sat, 2 Dec 2017 12:49:05 +0000 (12:49 +0000)
committerMichael Pöhn <uniq@h4x.at>
Sat, 2 Dec 2017 12:49:05 +0000 (12:49 +0000)
vmtools: remove old vagrant workaround

See merge request fdroid/fdroidserver!380

53 files changed:
buildserver/config.buildserver.py
buildserver/provision-android-sdk
buildserver/provision-apt-get-install
buildserver/setup-env-vars
completion/bash-completion
examples/config.py
fdroid
fdroidserver/build.py
fdroidserver/common.py
fdroidserver/init.py
fdroidserver/metadata.py
fdroidserver/mirror.py [new file with mode: 0644]
fdroidserver/nightly.py
fdroidserver/server.py
fdroidserver/update.py
fdroidserver/vmtools.py
hooks/pre-commit
jenkins-build-all
jenkins-setup-build-environment
jenkins-test
locale/bo/LC_MESSAGES/fdroidserver.po
locale/de/LC_MESSAGES/fdroidserver.po
locale/es/LC_MESSAGES/fdroidserver.po
locale/es_AR/LC_MESSAGES/fdroidserver.po
locale/fa/LC_MESSAGES/fdroidserver.po
locale/fr/LC_MESSAGES/fdroidserver.po
locale/it/LC_MESSAGES/fdroidserver.po
locale/kab/LC_MESSAGES/fdroidserver.po
locale/ko/LC_MESSAGES/fdroidserver.po [new file with mode: 0644]
locale/nb_NO/LC_MESSAGES/fdroidserver.po
locale/pt_BR/LC_MESSAGES/fdroidserver.po
locale/pt_PT/LC_MESSAGES/fdroidserver.po
locale/tr/LC_MESSAGES/fdroidserver.po
locale/uk/LC_MESSAGES/fdroidserver.po
locale/zh_Hans/LC_MESSAGES/fdroidserver.po
locale/zh_Hant/LC_MESSAGES/fdroidserver.po
makebuildserver
setup.cfg
setup.py
tests/bad-unicode-πÇÇ现代通用字-български-عربي1.apk [moved from tests/bad-unicode-πÇÇπÇÇ现代汉语通用字-български-عربي1234.apk with 100% similarity]
tests/build.TestCase
tests/common.TestCase
tests/import.TestCase
tests/index.TestCase
tests/lint.TestCase
tests/metadata.TestCase
tests/publish.TestCase
tests/repo/index-v1.json
tests/repo/index.xml
tests/repo/urzip-; Рахма́нинов, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·.apk [moved from tests/repo/urzip-Rakhmaninov; Рахма́нинов, IPA: [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·瓦西里耶维奇·拉赫玛.apk尼诺夫 .apk with 100% similarity]
tests/source-files/fdroid/fdroidclient/build.gradle
tests/stats/known_apks.txt
tests/update.TestCase

index 2ac78979310807b1543f1b2013c769bc08087913..1ecf43ced7ceab264d415adae21e9406c86e0e29 100644 (file)
@@ -7,6 +7,7 @@ ndk_paths = {
     'r13b': "/home/vagrant/android-ndk/r13b",
     'r14b': "/home/vagrant/android-ndk/r14b",
     'r15c': "/home/vagrant/android-ndk/r15c",
+    'r16': "/home/vagrant/android-ndk/r16",
 }
 qt_sdk_path = "/home/vagrant/qt-sdk/5.7.0/5.7"
 java_paths = {
index b79c2e4a11638f1deeb03c74df9fbfec7ab26310..7cd96e0c371a0f09c500212012b1c3791fc089fc 100644 (file)
@@ -74,12 +74,25 @@ y
 EOH
 
 mkdir -p $ANDROID_HOME/licenses/
+
 cat << EOF > $ANDROID_HOME/licenses/android-sdk-license
 
 8933bad161af4178b1185d1a37fbf41ea5269c55
+
 d56f5187479451eabf01fb78af6dfcb131a6481e
 EOF
-echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license
+
+cat <<EOF > $ANDROID_HOME/licenses/android-sdk-preview-license
+
+84831b9409646a918e30573bab4c9c91346d8abd
+EOF
+
+cat <<EOF > $ANDROID_HOME/licenses/android-sdk-preview-license-old
+79120722343a6f314e0719f863036c702b0e6b2a
+
+84831b9409646a918e30573bab4c9c91346d8abd
+EOF
+
 echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.1"
 echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout-solver;1.0.1"
 echo y | $ANDROID_HOME/tools/bin/sdkmanager "extras;m2repository;com;android;support;constraint;constraint-layout;1.0.2"
index a1b0f4b1e705eaa5a37c3c3da777dce914dc2a27..70f9acd8ca0169cfa89a8aa69233911abf16a736 100644 (file)
@@ -50,8 +50,8 @@ packages="
  flex
  gettext/jessie-backports
  gettext-base/jessie-backports
- git-core
- git-svn
+ git-core/jessie-backports
+ git-svn/jessie-backports
  gperf
  graphviz
  imagemagick
index 00220a234ccca6f5aa00b7bcf45966266d178ae2..66e3d7e6452220d23a00acad2657d1e0719665e5 100644 (file)
@@ -13,3 +13,7 @@ echo export ANDROID_HOME=$1 >> $bsenv
 echo 'export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:/opt/gradle/bin' >> $bsenv
 
 chmod 0644 $bsenv
+
+# make sure that SSH never hangs at a password or key prompt
+printf '    StrictHostKeyChecking yes' >> /etc/ssh/ssh_config
+printf '    BatchMode yes' >> /etc/ssh/config
index 8bdd333f0fddf2b96af196f723c15d3d05841140..d18edd3501d8e17f815f0aee899cd115a6a2f4e1 100644 (file)
@@ -264,6 +264,12 @@ __complete_btlog() {
        __complete_options
 }
 
+__complete_mirror() {
+       opts="-v"
+       lopts="--archive --output-dir"
+       __complete_options
+}
+
 __complete_nightly() {
        opts="-v -q"
        lopts="--show-secret-var"
@@ -316,6 +322,7 @@ import \
 init \
 install \
 lint \
+mirror \
 nightly \
 publish \
 readmeta \
index 82f77431997ef2ccc220fdbc771cde78ee23b61b..f36d51d24a4e75013196e245e9dbd07b5d47d3a8 100644 (file)
@@ -18,6 +18,7 @@
 #     'r13b': None,
 #     'r14b': None,
 #     'r15c': None,
+#     'r16': None,
 # }
 
 # Path to the Qt SDK. It is of the form "/path/to/Qt5.7.0/5.7"
@@ -215,11 +216,12 @@ The repository of older versions of applications from the main demo repository.
 # 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 is based on apache-libcloud, which supports basically all cloud
-# storage services, so it should be easy to port the fdroid server tools to
-# any of them.
+# 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
+# provider, create a 's3cfg' file next to this file (config.py), and
+# those settings will be used instead of any 'aws' variable below.
 #
 # awsbucket = 'myawsfdroid'
 # awsaccesskeyid = 'SEE0CHAITHEIMAUR2USA'
diff --git a/fdroid b/fdroid
index a07a4ecfb124047a1d900c7650dd15e10305e610..f5e6c92b5dce805a11109987e948531f1cf44599 100755 (executable)
--- a/fdroid
+++ b/fdroid
@@ -48,6 +48,7 @@ commands = OrderedDict([
     ("btlog", _("Update the binary transparency log for a URL")),
     ("signatures", _("Extract signatures from APKs")),
     ("nightly", _("Set up an app build for a nightly build repo")),
+    ("mirror", _("Download complete mirrors of small repos")),
 ])
 
 
index a9ee02d7d84d7f12a5dbb47fbd63fe0bbe091291..17d5cfd21ed0b4e0c03abd5906aa0a720ce01a97 100644 (file)
@@ -23,6 +23,7 @@ import shutil
 import glob
 import subprocess
 import re
+import resource
 import tarfile
 import traceback
 import time
@@ -98,22 +99,19 @@ def build_server(app, build, vcs, build_dir, output_dir, log_dir, force):
 
         # Helper to copy the contents of a directory to the server...
         def send_dir(path):
-            startroot = os.path.dirname(path)
-            main = os.path.basename(path)
-            ftp.mkdir(main)
-            for root, dirs, files in os.walk(path):
-                rr = os.path.relpath(root, startroot)
-                ftp.chdir(rr)
-                for d in dirs:
-                    ftp.mkdir(d)
-                for f in files:
-                    lfile = os.path.join(startroot, rr, f)
-                    if not os.path.islink(lfile):
-                        ftp.put(lfile, f)
-                        ftp.chmod(f, os.stat(lfile).st_mode)
-                for i in range(len(rr.split('/'))):
-                    ftp.chdir('..')
-            ftp.chdir('..')
+            logging.debug("rsyncing " + path + " to " + ftp.getcwd())
+            subprocess.check_call(['rsync', '-rple',
+                                   'ssh -o StrictHostKeyChecking=no' +
+                                   ' -o UserKnownHostsFile=/dev/null' +
+                                   ' -o LogLevel=FATAL' +
+                                   ' -o IdentitiesOnly=yes' +
+                                   ' -o PasswordAuthentication=no' +
+                                   ' -p ' + str(sshinfo['port']) +
+                                   ' -i ' + sshinfo['idfile'],
+                                   path,
+                                   sshinfo['user'] +
+                                   "@" + sshinfo['hostname'] +
+                                   ":" + ftp.getcwd()])
 
         logging.info("Preparing server for build...")
         serverpath = os.path.abspath(os.path.dirname(__file__))
@@ -1113,7 +1111,7 @@ def main():
 
     # Read all app and srclib metadata
     pkgs = common.read_pkg_args(options.appid, True)
-    allapps = metadata.read_metadata(not options.onserver, pkgs)
+    allapps = metadata.read_metadata(not options.onserver, pkgs, sort_by_time=True)
     apps = common.read_app_args(options.appid, allapps, True)
 
     for appid, app in list(apps.items()):
@@ -1123,6 +1121,19 @@ def main():
     if not apps:
         raise FDroidException("No apps to process.")
 
+    # make sure enough open files are allowed to process everything
+    soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
+    if len(apps) > soft:
+        try:
+            soft = len(apps) * 2
+            if soft > hard:
+                soft = hard
+            resource.setrlimit(resource.RLIMIT_NOFILE, (soft, hard))
+            logging.debug(_('Set open file limit to {integer}')
+                          .format(integer=soft))
+        except (OSError, ValueError) as e:
+            logging.warning(_('Setting open file limit failed: ') + str(e))
+
     if options.latest:
         for app in apps.values():
             for build in reversed(app.builds):
index 98bc2cb2aacd8e3601b9aba2d146768bfa2fcab8..6ed43d4c4e465eda49d752eb7ceea09d7eb6af5a 100644 (file)
@@ -40,7 +40,7 @@ import json
 import xml.etree.ElementTree as XMLElementTree
 
 from binascii import hexlify
-from datetime import datetime
+from datetime import datetime, timedelta
 from distutils.version import LooseVersion
 from queue import Queue
 from zipfile import ZipFile
@@ -80,6 +80,7 @@ default_config = {
         'r13b': None,
         'r14b': None,
         'r15c': None,
+        'r16': None,
     },
     'qt_sdk_path': None,
     'build_tools': "25.0.2",
@@ -443,17 +444,16 @@ def get_local_metadata_files():
     return glob.glob('.fdroid.[a-jl-z]*[a-rt-z]')
 
 
-def read_pkg_args(args, allow_vercodes=False):
+def read_pkg_args(appid_versionCode_pairs, allow_vercodes=False):
     """
-    :param args: arguments in the form of multiple appid:[vc] strings
+    :param appids: arguments in the form of multiple appid:[vc] strings
     :returns: a dictionary with the set of vercodes specified for each package
     """
-
     vercodes = {}
-    if not args:
+    if not appid_versionCode_pairs:
         return vercodes
 
-    for p in args:
+    for p in appid_versionCode_pairs:
         if allow_vercodes and ':' in p:
             package, vercode = p.split(':')
         else:
@@ -467,13 +467,17 @@ def read_pkg_args(args, allow_vercodes=False):
     return vercodes
 
 
-def read_app_args(args, allapps, allow_vercodes=False):
-    """
-    On top of what read_pkg_args does, this returns the whole app metadata, but
-    limiting the builds list to the builds matching the vercodes specified.
+def read_app_args(appid_versionCode_pairs, allapps, allow_vercodes=False):
+    """Build a list of App instances for processing
+
+    On top of what read_pkg_args does, this returns the whole app
+    metadata, but limiting the builds list to the builds matching the
+    appid_versionCode_pairs and vercodes specified.  If no appid_versionCode_pairs are specified, then
+    all App and Build instances are returned.
+
     """
 
-    vercodes = read_pkg_args(args, allow_vercodes)
+    vercodes = read_pkg_args(appid_versionCode_pairs, allow_vercodes)
 
     if not vercodes:
         return allapps
@@ -782,6 +786,37 @@ class vcs_git(vcs):
     def clientversioncmd(self):
         return ['git', '--version']
 
+    def GitFetchFDroidPopen(self, gitargs, envs=dict(), cwd=None, output=True):
+        '''Prevent git fetch/clone/submodule from hanging at the username/password prompt
+
+        While fetch/pull/clone respect the command line option flags,
+        it seems that submodule commands do not.  They do seem to
+        follow whatever is in env vars, if the version of git is new
+        enough.  So we just throw the kitchen sink at it to see what
+        sticks.
+
+        '''
+        if cwd is None:
+            cwd = self.local
+        git_config = []
+        for domain in ('bitbucket.org', 'github.com', 'gitlab.com'):
+            git_config.append('-c')
+            git_config.append('url.https://u:p@' + domain + '/.insteadOf=git@' + domain + ':')
+            git_config.append('-c')
+            git_config.append('url.https://u:p@' + domain + '.insteadOf=git://' + domain)
+            git_config.append('-c')
+            git_config.append('url.https://u:p@' + domain + '.insteadOf=https://' + domain)
+        # add helpful tricks supported in git >= 2.3
+        ssh_command = 'ssh -oBatchMode=yes -oStrictHostKeyChecking=yes'
+        git_config.append('-c')
+        git_config.append('core.sshCommand="' + ssh_command + '"')  # git >= 2.10
+        envs.update({
+            'GIT_TERMINAL_PROMPT': '0',
+            'GIT_SSH_COMMAND': ssh_command,  # git >= 2.3
+        })
+        return FDroidPopen(['git', ] + git_config + gitargs,
+                           envs=envs, cwd=cwd, output=output)
+
     def checkrepo(self):
         """If the local directory exists, but is somehow not a git repository,
         git will traverse up the directory tree until it finds one
@@ -798,7 +833,7 @@ class vcs_git(vcs):
     def gotorevisionx(self, rev):
         if not os.path.exists(self.local):
             # Brand new checkout
-            p = FDroidPopen(['git', 'clone', self.remote, self.local])
+            p = FDroidPopen(['git', 'clone', self.remote, self.local], cwd=None)
             if p.returncode != 0:
                 self.clone_failed = True
                 raise VCSException("Git clone failed", p.output)
@@ -818,10 +853,10 @@ class vcs_git(vcs):
                 raise VCSException(_("Git clean failed"), p.output)
             if not self.refreshed:
                 # Get latest commits and tags from remote
-                p = FDroidPopen(['git', 'fetch', 'origin'], cwd=self.local)
+                p = self.GitFetchFDroidPopen(['fetch', 'origin'])
                 if p.returncode != 0:
                     raise VCSException(_("Git fetch failed"), p.output)
-                p = FDroidPopen(['git', 'fetch', '--prune', '--tags', 'origin'], cwd=self.local, output=False)
+                p = self.GitFetchFDroidPopen(['fetch', '--prune', '--tags', 'origin'], output=False)
                 if p.returncode != 0:
                     raise VCSException(_("Git fetch failed"), p.output)
                 # Recreate origin/HEAD as git clone would do it, in case it disappeared
@@ -857,16 +892,14 @@ class vcs_git(vcs):
             lines = f.readlines()
         with open(submfile, 'w') as f:
             for line in lines:
-                if 'git@github.com' in line:
-                    line = line.replace('git@github.com:', 'https://github.com/')
-                if 'git@gitlab.com' in line:
-                    line = line.replace('git@gitlab.com:', 'https://gitlab.com/')
+                for domain in ('bitbucket.org', 'github.com', 'gitlab.com'):
+                    line = re.sub('git@' + domain + ':', 'https://u:p@' + domain + '/', line)
                 f.write(line)
 
         p = FDroidPopen(['git', 'submodule', 'sync'], cwd=self.local, output=False)
         if p.returncode != 0:
             raise VCSException(_("Git submodule sync failed"), p.output)
-        p = FDroidPopen(['git', 'submodule', 'update', '--init', '--force', '--recursive'], cwd=self.local)
+        p = self.GitFetchFDroidPopen(['submodule', 'update', '--init', '--force', '--recursive'])
         if p.returncode != 0:
             raise VCSException(_("Git submodule update failed"), p.output)
 
@@ -1269,27 +1302,58 @@ def parse_androidmanifests(paths, app):
         vercode = None
         package = None
 
+        flavour = ""
+        if app.builds and 'gradle' in app.builds[-1] and app.builds[-1].gradle:
+                flavour = app.builds[-1].gradle[-1]
+
         if has_extension(path, 'gradle'):
+            # first try to get version name and code from correct flavour
             with open(path, 'r') as f:
-                for line in f:
-                    if gradle_comment.match(line):
-                        continue
-                    # Grab first occurence of each to avoid running into
-                    # alternative flavours and builds.
-                    if not package:
-                        matches = psearch_g(line)
-                        if matches:
-                            s = matches.group(2)
-                            if app_matches_packagename(app, s):
-                                package = s
-                    if not version:
-                        matches = vnsearch_g(line)
-                        if matches:
-                            version = matches.group(2)
-                    if not vercode:
-                        matches = vcsearch_g(line)
-                        if matches:
-                            vercode = matches.group(1)
+                buildfile = f.read()
+
+                regex_string = r"" + flavour + ".*?}"
+                search = re.compile(regex_string, re.DOTALL)
+                result = search.search(buildfile)
+
+            if result is not None:
+                resultgroup = result.group()
+
+                if not package:
+                    matches = psearch_g(resultgroup)
+                    if matches:
+                        s = matches.group(2)
+                        if app_matches_packagename(app, s):
+                            package = s
+                if not version:
+                    matches = vnsearch_g(resultgroup)
+                    if matches:
+                        version = matches.group(2)
+                if not vercode:
+                    matches = vcsearch_g(resultgroup)
+                    if matches:
+                        vercode = matches.group(1)
+            else:
+                # fall back to parse file line by line
+                with open(path, 'r') as f:
+                    for line in f:
+                        if gradle_comment.match(line):
+                            continue
+                        # Grab first occurence of each to avoid running into
+                        # alternative flavours and builds.
+                        if not package:
+                            matches = psearch_g(line)
+                            if matches:
+                                s = matches.group(2)
+                                if app_matches_packagename(app, s):
+                                    package = s
+                        if not version:
+                            matches = vnsearch_g(line)
+                            if matches:
+                                version = matches.group(2)
+                        if not vercode:
+                            matches = vcsearch_g(line)
+                            if matches:
+                                vercode = matches.group(1)
         else:
             try:
                 xml = parse_xml(path)
@@ -1583,10 +1647,11 @@ def prepare_source(vcs, app, build, build_dir, srclib_dir, extlib_dir, onserver=
             dest = os.path.join(build_dir, part)
             logging.info("Removing {0}".format(part))
             if os.path.lexists(dest):
-                if os.path.islink(dest):
-                    FDroidPopen(['unlink', dest], output=False)
+                # rmtree can only handle directories that are not symlinks, so catch anything else
+                if not os.path.isdir(dest) or os.path.islink(dest):
+                    os.remove(dest)
                 else:
-                    FDroidPopen(['rm', '-rf', dest], output=False)
+                    shutil.rmtree(dest)
             else:
                 logging.info("...but it didn't exist")
 
@@ -1685,6 +1750,23 @@ def natural_key(s):
     return [int(sp) if sp.isdigit() else sp for sp in re.split(r'(\d+)', s)]
 
 
+def check_system_clock(dt_obj, path):
+    """Check if system clock is updated based on provided date
+
+    If an APK has files newer than the system time, suggest updating
+    the system clock.  This is useful for offline systems, used for
+    signing, which do not have another source of clock sync info. It
+    has to be more than 24 hours newer because ZIP/APK files do not
+    store timezone info
+
+    """
+    checkdt = dt_obj - timedelta(1)
+    if datetime.today() < checkdt:
+        logging.warning(_('System clock is older than date in {path}!').format(path=path)
+                        + '\n' + _('Set clock to that time using:') + '\n'
+                        + 'sudo date -s "' + str(dt_obj) + '"')
+
+
 class KnownApks:
     """permanent store of existing APKs with the date they were added
 
@@ -1713,6 +1795,7 @@ class KnownApks:
                         date = datetime.strptime(t[-1], '%Y-%m-%d')
                         filename = line[0:line.rfind(appid) - 1]
                         self.apks[filename] = (appid, date)
+                        check_system_clock(date, self.path)
         self.changed = False
 
     def writeifchanged(self):
index 9fdb5836c0831285ce834d553f03f50882444a9d..9d03e0b9284b94dbed0d00bd7c9330e2dc758144 100644 (file)
@@ -178,6 +178,7 @@ def main():
                              + '" does not exist, creating a new keystore there.')
     common.write_to_config(test_config, 'keystore', keystore)
     repo_keyalias = None
+    keydname = None
     if options.repo_keyalias:
         repo_keyalias = options.repo_keyalias
         common.write_to_config(test_config, 'repo_keyalias', repo_keyalias)
@@ -211,7 +212,16 @@ def main():
                                    flags=re.MULTILINE)
             with open('opensc-fdroid.cfg', 'w') as f:
                 f.write(opensc_fdroid)
-    elif not os.path.exists(keystore):
+    elif os.path.exists(keystore):
+        to_set = ['keystorepass', 'keypass', 'repo_keyalias', 'keydname']
+        if repo_keyalias:
+            to_set.remove('repo_keyalias')
+        if keydname:
+            to_set.remove('keydname')
+        logging.warning('\n' + _('Using existing keystore "{path}"').format(path=keystore)
+                        + '\n' + _('Now set these in config.py:') + ' '
+                        + ', '.join(to_set) + '\n')
+    else:
         password = common.genpassword()
         c = dict(test_config)
         c['keystorepass'] = password
index d65eb81a69c8afcc713505e38fe3db93cd2b5e1c..c29c1e4c29a079e545f60d678df0d5c11b7c6c5f 100644 (file)
@@ -26,6 +26,7 @@ import logging
 import textwrap
 import io
 import yaml
+from collections import OrderedDict
 # use libyaml if it is available
 try:
     from yaml import CLoader
@@ -703,35 +704,50 @@ def read_srclibs():
         srclibs[srclibname] = parse_srclib(metadatapath)
 
 
-def read_metadata(xref=True, check_vcs=[]):
-    """
-    Read all metadata. Returns a list of 'app' objects (which are dictionaries as
-    returned by the parse_txt_metadata function.
+def read_metadata(xref=True, check_vcs=[], sort_by_time=False):
+    """Return a list of App instances sorted newest first
+
+    This reads all of the metadata files in a 'data' repository, then
+    builds a list of App instances from those files.  The list is
+    sorted based on creation time, newest first.  Most of the time,
+    the newer files are the most interesting.
+
+    If there are multiple metadata files for a single appid, then the first
+    file that is parsed wins over all the others, and the rest throw an
+    exception. So the original .txt format is parsed first, at least until
+    newer formats stabilize.
 
     check_vcs is the list of packageNames to check for .fdroid.yml in source
+
     """
 
     # Always read the srclibs before the apps, since they can use a srlib as
     # their source repository.
     read_srclibs()
 
-    apps = {}
+    apps = OrderedDict()
 
     for basedir in ('metadata', 'tmp'):
         if not os.path.exists(basedir):
             os.makedirs(basedir)
 
-    # If there are multiple metadata files for a single appid, then the first
-    # file that is parsed wins over all the others, and the rest throw an
-    # exception. So the original .txt format is parsed first, at least until
-    # newer formats stabilize.
-
-    for metadatapath in sorted(glob.glob(os.path.join('metadata', '*.txt'))
-                               + glob.glob(os.path.join('metadata', '*.json'))
-                               + glob.glob(os.path.join('metadata', '*.yml'))
-                               + glob.glob('.fdroid.txt')
-                               + glob.glob('.fdroid.json')
-                               + glob.glob('.fdroid.yml')):
+    metadatafiles = (glob.glob(os.path.join('metadata', '*.txt'))
+                     + glob.glob(os.path.join('metadata', '*.json'))
+                     + glob.glob(os.path.join('metadata', '*.yml'))
+                     + glob.glob('.fdroid.txt')
+                     + glob.glob('.fdroid.json')
+                     + glob.glob('.fdroid.yml'))
+
+    if sort_by_time:
+        entries = ((os.stat(path).st_mtime, path) for path in metadatafiles)
+        metadatafiles = []
+        for _ignored, path in sorted(entries, reverse=True):
+            metadatafiles.append(path)
+    else:
+        # most things want the index alpha sorted for stability
+        metadatafiles = sorted(metadatafiles)
+
+    for metadatapath in metadatafiles:
         packageName, _ignored = fdroidserver.common.get_extension(os.path.basename(metadatapath))
         if packageName in apps:
             warn_or_exception(_("Found multiple metadata files for {appid}")
diff --git a/fdroidserver/mirror.py b/fdroidserver/mirror.py
new file mode 100644 (file)
index 0000000..0aa4372
--- /dev/null
@@ -0,0 +1,190 @@
+#!/usr/bin/env python3
+
+import ipaddress
+import logging
+import os
+import posixpath
+import socket
+import subprocess
+import sys
+from argparse import ArgumentParser
+import urllib.parse
+
+from . import _
+from . import common
+from . import index
+from . import update
+
+options = None
+
+
+def _run_wget(path, urls):
+    if options.verbose:
+        verbose = '--verbose'
+    else:
+        verbose = '--no-verbose'
+
+    if not urls:
+        return
+    logging.debug(_('Running wget in {path}').format(path=path))
+    os.makedirs(path, exist_ok=True)
+    os.chdir(path)
+    urls_file = '.fdroid-mirror-wget-input-file'
+    with open(urls_file, 'w') as fp:
+        for url in urls:
+            fp.write(url.split('?')[0] + '\n')  # wget puts query string in the filename
+    subprocess.call(['wget', verbose, '--continue', '--user-agent="fdroid mirror"',
+                     '--input-file=' + urls_file])
+    os.remove(urls_file)
+
+
+def main():
+    global options
+
+    parser = ArgumentParser(usage=_("%(prog)s [options] url"))
+    common.setup_global_opts(parser)
+    parser.add_argument("url", nargs='?',
+                        help=_('Base URL to mirror, can include the index signing key '
+                               + 'using the query string: ?fingerprint='))
+    parser.add_argument("--archive", action='store_true', default=False,
+                        help=_("Also mirror the full archive section"))
+    parser.add_argument("--output-dir", default=None,
+                        help=_("The directory to write the mirror to"))
+    options = parser.parse_args()
+
+    if options.url is None:
+        logging.error(_('A URL is required as an argument!') + '\n')
+        parser.print_help()
+        sys.exit(1)
+
+    scheme, hostname, path, params, query, fragment = urllib.parse.urlparse(options.url)
+    fingerprint = urllib.parse.parse_qs(query).get('fingerprint')
+
+    def _append_to_url_path(*args):
+        '''Append the list of path components to URL, keeping the rest the same'''
+        newpath = posixpath.join(path, *args)
+        return urllib.parse.urlunparse((scheme, hostname, newpath, params, query, fragment))
+
+    if fingerprint:
+        config = common.read_config(options)
+        if not ('jarsigner' in config or 'apksigner' in config):
+            logging.error(_('Java JDK not found! Install in standard location or set java_paths!'))
+            sys.exit(1)
+
+        def _get_index(section, etag=None):
+            url = _append_to_url_path(section)
+            return index.download_repo_index(url, etag=etag)
+    else:
+        def _get_index(section, etag=None):
+            import io
+            import json
+            import zipfile
+            from . import net
+            url = _append_to_url_path(section, 'index-v1.jar')
+            content, etag = net.http_get(url)
+            with zipfile.ZipFile(io.BytesIO(content)) as zip:
+                jsoncontents = zip.open('index-v1.json').read()
+            data = json.loads(jsoncontents.decode('utf-8'))
+            return data, etag
+
+    ip = None
+    try:
+        ip = ipaddress.ip_address(hostname)
+    except ValueError:
+        pass
+    if hostname == 'f-droid.org' \
+       or (ip is not None and hostname in socket.gethostbyname_ex('f-droid.org')[2]):
+        print(_('ERROR: this command should never be used to mirror f-droid.org!\n'
+                'A full mirror of f-droid.org requires more than 200GB.'))
+        sys.exit(1)
+
+    path = path.rstrip('/')
+    if path.endswith('repo') or path.endswith('archive'):
+        logging.warning(_('Do not include "{path}" in URL!')
+                        .format(path=path.split('/')[-1]))
+    elif not path.endswith('fdroid'):
+        logging.warning(_('{url} does not end with "fdroid", check the URL path!')
+                        .format(url=options.url))
+
+    icondirs = ['icons', ]
+    for density in update.screen_densities:
+        icondirs.append('icons-' + density)
+
+    if options.output_dir:
+        basedir = options.output_dir
+    else:
+        basedir = os.path.join(os.getcwd(), hostname, path.strip('/'))
+        os.makedirs(basedir, exist_ok=True)
+
+    if options.archive:
+        sections = ('repo', 'archive')
+    else:
+        sections = ('repo', )
+
+    for section in sections:
+        sectiondir = os.path.join(basedir, section)
+
+        data, etag = _get_index(section)
+
+        os.makedirs(sectiondir, exist_ok=True)
+        os.chdir(sectiondir)
+        for icondir in icondirs:
+            os.makedirs(os.path.join(sectiondir, icondir), exist_ok=True)
+
+        urls = []
+        for packageName, packageList in data['packages'].items():
+            for package in packageList:
+                to_fetch = []
+                for k in ('apkName', 'srcname'):
+                    if k in package:
+                        to_fetch.append(package[k])
+                    elif k == 'apkName':
+                        logging.error(_('{appid} is missing {name}')
+                                      .format(appid=package['packageName'], name=k))
+                for f in to_fetch:
+                    if not os.path.exists(f) \
+                       or (f.endswith('.apk') and os.path.getsize(f) != package['size']):
+                        urls.append(_append_to_url_path(section, f))
+                        urls.append(_append_to_url_path(section, f + '.asc'))
+        _run_wget(sectiondir, urls)
+
+        for app in data['apps']:
+            localized = app.get('localized')
+            if localized:
+                for locale, d in localized.items():
+                    urls = []
+                    components = (section, app['packageName'], locale)
+                    for k in update.GRAPHIC_NAMES:
+                        f = d.get(k)
+                        if f:
+                            filepath_tuple = components + (f, )
+                            urls.append(_append_to_url_path(*filepath_tuple))
+                    _run_wget(os.path.join(basedir, *components), urls)
+                    for k in update.SCREENSHOT_DIRS:
+                        urls = []
+                        filelist = d.get(k)
+                        if filelist:
+                            components = (section, app['packageName'], locale, k)
+                            for f in filelist:
+                                filepath_tuple = components + (f, )
+                                urls.append(_append_to_url_path(*filepath_tuple))
+                            _run_wget(os.path.join(basedir, *components), urls)
+
+        urls = dict()
+        for app in data['apps']:
+            if 'icon' not in app:
+                logging.error(_('no "icon" in {appid}').format(appid=app['packageName']))
+                continue
+            icon = app['icon']
+            for icondir in icondirs:
+                url = _append_to_url_path(section, icondir, icon)
+                if icondir not in urls:
+                    urls[icondir] = []
+                urls[icondir].append(url)
+
+        for icondir in icondirs:
+            _run_wget(os.path.join(basedir, section, icondir), urls[icondir])
+
+
+if __name__ == "__main__":
+    main()
index 9d2d13e478052a2322f16e2983aa9591b4774e68..454616e4965318f3428685930a5baea8cc0c70d4 100644 (file)
@@ -155,11 +155,12 @@ def main():
         repo_url = repo_base + '/repo'
         git_mirror_path = os.path.join(repo_basedir, 'git-mirror')
         git_mirror_repodir = os.path.join(git_mirror_path, 'fdroid', 'repo')
+        git_mirror_metadatadir = os.path.join(git_mirror_path, 'fdroid', 'metadata')
         if not os.path.isdir(git_mirror_repodir):
             logging.debug(_('cloning {url}').format(url=clone_url))
             try:
                 git.Repo.clone_from(clone_url, git_mirror_path)
-            except:
+            except Exception:
                 pass
         if not os.path.isdir(git_mirror_repodir):
             os.makedirs(git_mirror_repodir, mode=0o755)
@@ -186,20 +187,24 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
         mirror_git_repo.git.add(all=True)
         mirror_git_repo.index.commit("update README")
 
-        icon_path = os.path.join(repo_basedir, 'icon.png')
+        icon_path = os.path.join(git_mirror_path, 'icon.png')
         try:
             import qrcode
-            img = qrcode.make('Some data here')
+            img = qrcode.make(repo_url)
             with open(icon_path, 'wb') as fp:
                 fp.write(img)
-        except:
+        except Exception:
             exampleicon = os.path.join(common.get_examples_dir(), 'fdroid-icon.png')
             shutil.copy(exampleicon, icon_path)
         mirror_git_repo.git.add(all=True)
         mirror_git_repo.index.commit("update repo/website icon")
+        shutil.copy(icon_path, repo_basedir)
 
         os.chdir(repo_basedir)
-        common.local_rsync(options, git_mirror_repodir + '/', 'repo/')
+        if os.path.isdir(git_mirror_repodir):
+            common.local_rsync(options, git_mirror_repodir + '/', 'repo/')
+        if os.path.isdir(git_mirror_metadatadir):
+            common.local_rsync(options, git_mirror_metadatadir + '/', 'metadata/')
 
         ssh_private_key_file = _ssh_key_from_debug_keystore()
         # this is needed for GitPython to find the SSH key
@@ -251,13 +256,17 @@ Last updated: {date}'''.format(repo_git_base=repo_git_base,
                 subprocess.check_call(['ssh', '-Tvi', ssh_private_key_file,
                                        '-oIdentitiesOnly=yes', '-oStrictHostKeyChecking=no',
                                        servergitmirror.split(':')[0]])
-            except:
+            except subprocess.CalledProcessError:
                 pass
 
-        subprocess.check_call(['fdroid', 'update', '--rename-apks', '--verbose'], cwd=repo_basedir)
+        subprocess.check_call(['fdroid', 'update', '--rename-apks', '--create-metadata', '--verbose'],
+                              cwd=repo_basedir)
+        common.local_rsync(options, repo_basedir + '/metadata/', git_mirror_metadatadir + '/')
+        mirror_git_repo.git.add(all=True)
+        mirror_git_repo.index.commit("update app metadata")
         try:
             subprocess.check_call(['fdroid', 'server', 'update', '--verbose'], cwd=repo_basedir)
-        except:
+        except subprocess.CalledProcessError:
             logging.error(_('cannot publish update, did you set the deploy key?')
                           + '\n' + deploy_key_url)
             sys.exit(1)
index 116c27f8f1a55a788be65b5a4acb996befb8286c..004a606879c30d156446dff5046b1005a927d0ce 100644 (file)
@@ -38,6 +38,9 @@ options = None
 
 BINARY_TRANSPARENCY_DIR = 'binary_transparency'
 
+AUTO_S3CFG = '.fdroid-server-update-s3cfg'
+USER_S3CFG = 's3cfg'
+
 
 def update_awsbucket(repo_section):
     '''
@@ -72,12 +75,17 @@ def update_awsbucket_s3cmd(repo_section):
     logging.debug(_('Using s3cmd to sync with: {url}')
                   .format(url=config['awsbucket']))
 
-    configfilename = '.s3cfg'
-    fd = os.open(configfilename, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600)
-    os.write(fd, '[default]\n'.encode('utf-8'))
-    os.write(fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8'))
-    os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8'))
-    os.close(fd)
+    if os.path.exists(USER_S3CFG):
+        logging.info(_('Using "{path}" for configuring s3cmd.').format(path=USER_S3CFG))
+        configfilename = USER_S3CFG
+    else:
+        fd = os.open(AUTO_S3CFG, os.O_CREAT | os.O_TRUNC | os.O_WRONLY, 0o600)
+        logging.debug(_('Creating "{path}" for configuring s3cmd.').format(path=AUTO_S3CFG))
+        os.write(fd, '[default]\n'.encode('utf-8'))
+        os.write(fd, ('access_key = ' + config['awsaccesskeyid'] + '\n').encode('utf-8'))
+        os.write(fd, ('secret_key = ' + config['awssecretkey'] + '\n').encode('utf-8'))
+        os.close(fd)
+        configfilename = AUTO_S3CFG
 
     s3bucketurl = 's3://' + config['awsbucket']
     s3cmd = [config['s3cmd'], '--config=' + configfilename]
@@ -151,6 +159,10 @@ def update_awsbucket_libcloud(repo_section):
             _('To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config.py!'))
     awsbucket = config['awsbucket']
 
+    if os.path.exists(USER_S3CFG):
+        raise FDroidException(_('"{path}" exists but s3cmd is not installed!')
+                              .format(path=USER_S3CFG))
+
     cls = get_driver(Provider.S3)
     driver = cls(config['awsaccesskeyid'], config['awssecretkey'])
     try:
@@ -501,7 +513,7 @@ def upload_to_virustotal(repo_section, vt_apikey):
                             with open(outputfilename, 'w') as fp:
                                 json.dump(response, fp, indent=2, sort_keys=True)
 
-                        if response.get('positives') > 0:
+                        if response.get('positives', 0) > 0:
                             logging.warning(repofilename + ' has been flagged by virustotal '
                                             + str(response['positives']) + ' times:'
                                             + '\n\t' + response['permalink'])
index 2019063c6e7df8c2183a40d9411a84c8187cfe0e..61026cabfea4ba41394040428298e5912624f53a 100644 (file)
@@ -29,7 +29,7 @@ import zipfile
 import hashlib
 import pickle
 import time
-from datetime import datetime, timedelta
+from datetime import datetime
 from argparse import ArgumentParser
 
 import collections
@@ -1297,22 +1297,11 @@ def process_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk=Fal
 
         apkzip = zipfile.ZipFile(apkfile, 'r')
 
-        # if an APK has files newer than the system time, suggest updating
-        # the system clock.  This is useful for offline systems, used for
-        # signing, which do not have another source of clock sync info. It
-        # has to be more than 24 hours newer because ZIP/APK files do not
-        # store timezone info
         manifest = apkzip.getinfo('AndroidManifest.xml')
         if manifest.date_time[1] == 0:  # month can't be zero
             logging.debug(_('AndroidManifest.xml has no date'))
         else:
-            dt_obj = datetime(*manifest.date_time)
-            checkdt = dt_obj - timedelta(1)
-            if datetime.today() < checkdt:
-                logging.warning('System clock is older than manifest in: '
-                                + apkfilename
-                                + '\nSet clock to that time using:\n'
-                                + 'sudo date -s "' + str(dt_obj) + '"')
+            common.check_system_clock(datetime(*manifest.date_time), apkfilename)
 
         # extract icons from APK zip file
         iconfilename = "%s.%s.png" % (apk['packageName'], apk['versionCode'])
index 0e57394952a62f505c1bcf06952c6016f83f5c96..2142beb7db0d532bedc24e8ce7fb33b8e17fadeb 100644 (file)
@@ -28,6 +28,8 @@ import textwrap
 from .common import FDroidException
 from logging import getLogger
 
+from fdroidserver import _
+
 logger = getLogger('fdroidserver-vmtools')
 
 
@@ -145,7 +147,7 @@ def get_build_vm(srvdir, provider=None):
     has_libvirt_machine = isdir(joinpath(abssrvdir, '.vagrant',
                                          'machines', 'default', 'libvirt'))
     has_vbox_machine = isdir(joinpath(abssrvdir, '.vagrant',
-                                      'machines', 'default', 'libvirt'))
+                                      'machines', 'default', 'virtualbox'))
     if has_libvirt_machine and has_vbox_machine:
         logger.info('build vm provider lookup found virtualbox and libvirt, defaulting to \'virtualbox\'')
         return VirtualboxBuildVm(abssrvdir)
@@ -374,7 +376,9 @@ class LibvirtBuildVm(FDroidBuildVm):
             vol = storagePool.storageVolLookupByName(self.srvname + '.img')
             imagepath = vol.path()
             # TODO use a libvirt storage pool to ensure the img file is readable
-            _check_call(['sudo', '/bin/chmod', '-R', 'a+rX', '/var/lib/libvirt/images'])
+            if not os.access(imagepath, os.R_OK):
+                logger.warning(_('Cannot read "{path}"!').format(path=imagepath))
+                _check_call(['sudo', '/bin/chmod', '-R', 'a+rX', '/var/lib/libvirt/images'])
             shutil.copy2(imagepath, 'box.img')
             _check_call(['qemu-img', 'rebase', '-p', '-b', '', 'box.img'])
             img_info_raw = _check_output(['qemu-img', 'info', '--output=json', 'box.img'])
index 34a2312ceae79f4c9f9a14c34943fc95aa167d2f..00d777f9829d3cdd92c43fb0b5d39f87b54e94ac 100755 (executable)
@@ -73,7 +73,7 @@ cmd_exists() {
 
 find_command() {
        for name in $@; do
-               for suff in "3" "-python3" ""; do
+               for suff in "3" "-3" "-python3" ""; do
                        cmd=${name}${suff}
                        if cmd_exists $cmd; then
                                echo $cmd
index d33f33b4f2331aad8f6a85da39f2287c84f48ba8..d41d920f79ef5e4b43a638fbbc2007d18babf5d1 100755 (executable)
@@ -31,7 +31,6 @@ else
         echo "No virtualization is used."
 fi
 sudo /bin/chmod -R a+rX /var/lib/libvirt/images
-ulimit -n 2048
 echo 'maximum allowed number of open file descriptors: ' `ulimit -n`
 ls -ld /var/lib/libvirt/images
 ls -l /var/lib/libvirt/images || echo no access
@@ -59,18 +58,13 @@ cd $WORKSPACE
 # set up Android SDK to use the Debian packages in stretch
 export ANDROID_HOME=/usr/lib/android-sdk
 
-# ignore username/password prompt for non-existant repos
-git config --global url."https://fakeusername:fakepassword@github.com".insteadOf https://github.com
-git config --global url."https://fakeusername:fakepassword@gitlab.com".insteadOf https://gitlab.com
-git config --global url."https://fakeusername:fakepassword@bitbucket.org".insteadOf https://bitbucket.org
-
 # now build the whole archive
 cd $WORKSPACE
 
 # this can be handled in the jenkins job, or here:
 if [ -e fdroiddata ]; then
     cd fdroiddata
-    git remote update -p
+    while ! git fetch origin --tags --prune; do sleep 10; done
     git checkout master
     git reset --hard origin/master
     # keep all the cloned source repos
index 026c5507e152f780d0af6025d7497983427122c2..a7829c6fe66cc3558ff90cdeb2f2b842325cbb31 100755 (executable)
@@ -68,7 +68,7 @@ fi
 # this can be handled in the jenkins job, or here:
 if [ -e fdroiddata ]; then
     cd fdroiddata
-    while ! git fetch; do sleep 1; done
+    while ! git fetch origin --tags --prune; do sleep 10; done
     git remote update -p
     git checkout master
     git reset --hard origin/master
@@ -79,6 +79,7 @@ else
 fi
 
 cd fdroiddata
+echo "build_server_always = True" > config.py
 
 if [ -z $ANDROID_HOME ]; then
     if [ -e ~/.android/bashrc ]; then
index 181da6def5fb26cf815bf957916fe2cc58b5cd1f..74fbba53a6d7bfb8468fa0ef4b643cdaf766c957 100755 (executable)
@@ -23,17 +23,19 @@ set -x
 # set up Android SDK to use the Debian packages in stretch
 export ANDROID_HOME=/usr/lib/android-sdk
 
+rm -rf $WORKSPACE/.testfiles
 cd tests
 ./run-tests $WORKSPACE
 
 # this is set up and managed by jenkins-build-all
 cd $WORKSPACE/fdroiddata
 
-test -e config.py || ../fdroid init --verbose
-test -e keystore.jks || ../fdroid update --create-key
+rm -f config.py keystore.jks
+../fdroid init --verbose
+../fdroid update
 
 export GNUPGHOME=$WORKSPACE/tests/gnupghome
-echo "build_server_always = True" > config.py
+echo "build_server_always = True" >> config.py
 echo "gpghome = '$GNUPGHOME'" >> config.py
 echo "gpgkey = 'CE71F7FB'" >> config.py
 chmod 0600 config.py
index 94b794cdde74b3530dc45fcd5050fbed5f1c45ad..adfe6822be842193eda77fa2dde7ab2c82a5d800 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-07-17 18:35+0000\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:39+0100\n"
 "Last-Translator: Lobsang <lobsangsither@gmail.com>\n"
-"Language-Team: Tibetan <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/bo/>\n"
+"Language-Team: Tibetan "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/bo/>\n"
 "Language: bo\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.16-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -35,7 +34,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "\"%s/\" has no matching metadata file!"
-msgstr ""
+msgstr "\"%s 1/\" འདི་དང་མཐུན་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆ་མིན་འདུག!"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -56,60 +55,60 @@ msgstr ""
 #, python-format
 msgid "%(option)s option requires %(number)d argument"
 msgid_plural "%(option)s option requires %(number)d arguments"
-msgstr[0] ""
+msgstr[0] "%(option)s 1 གདམ་ཀ་དགོས་ %(number)d 2རྩོད་པ།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s 1: ནོར་སྐྱོན: %(message)s 2\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "%d1  དཀའ་རྙོག་ཐོན་སོང་།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [གདམ་ཀ།]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r 1 བྱེད་ལས་མིན་འདུག"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "%s is not an accepted build field"
-msgstr ""
+msgstr "%s 1འདི་ཁས་ལེན་ཐུབ་པའི་བཟོ་སྐྲུན་རྭ་བ་མ་རེད།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "%s option does not take a value"
-msgstr ""
+msgstr "%s1གདམ་ཀ་ནུས་མེད་རེད་འདུག"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
-msgstr ""
+msgstr "'keypass' འདི་config.py ནང་རྙེད་མ་སོང་།!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' འདི་ config.py ནང་རྙེད་མ་སོང་།!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' འདི་ config.py ནང་རྙེད་མ་སོང་།!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' འདི་ config.py ནང་རྙེད་མ་སོང་།!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
-msgstr ""
+msgstr "'དགསོ་མཁོ།' ནི་གནས་སྟངས་འདི་ལ་ཁུངས་ལྡན་གྱི་རྩོད་པ་རེད་མིན་འདུག"
 
 #: ../fdroidserver/common.py
 msgid "'sdk_path' not set in 'config.py'!"
-msgstr ""
+msgstr "'sdk_path' འདི་ 'config.py' ནང་སྒྲིག་ཐུབ་མ་སོང་།!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -118,11 +117,13 @@ msgstr ""
 #, python-brace-format
 msgid "'{aapt}' is too old, fdroid requires build-tools-23.0.0 or newer!"
 msgstr ""
+"'{aapt}1' འདི་ཧ་ཅང་གི་རྙིང་པ་རེད་འདུག, ཨེཕ་རོཌ་ལ་བཟོ་སྐྲུན་མ་ལག-23.0.0 "
+"དང་ཡང་ན་དེ་ལས་གསར་བ་དགོས།!"
 
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "'{apkfilename}' is already installed on {dev}."
-msgstr ""
+msgstr "'{apkfilename}1' འདི་{dev}2.ནང་སྔོན་ཚོད་ནས་སྒྲིག་བཅུག་བྱས་ཟིན།"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -130,11 +131,13 @@ msgid ""
 "'{field}' will be in random order! Use () or [] brackets if order is "
 "important!"
 msgstr ""
+"'{field}1' ནི་གོ་རིམ་ངེས་མེད།! བེད་སྤྱོད། () ཡང་ན། [] "
+"གོ་རིམ་གལ་ཆེན་པོའི་རིགས་ལ་གུག་རྟགས་ནང་བཅུག!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{path}' failed to execute!"
-msgstr ""
+msgstr "'{path}1' ལག་བསྟར་ཐུབ་མ་སོང་།!"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -144,20 +147,20 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "...checkupdate failed for {appid} : {error}"
-msgstr ""
+msgstr "...{appid} གྱི་ཆེད་དུ་གསར་བསྒྱུར་འཚོལ་མི་ཐུབ།་: {error} 2"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__()  ངོས་འཛིན་ཐུབ་མེད།"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
-msgstr ""
+msgstr "/གནས་དོན་བོར་བརླག་སོང་འདུག"
 
 #: ../fdroid
-#, fuzzy
 msgid "Add PGP signatures using GnuPG for packages in repo"
-msgstr "gpg གྱི་མིང་རྟགས་དེ་ཐུམ་སྒྲིལ་ནང་ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
+msgstr ""
+"PGP གྱི་མིང་རྟགས་དེ་རེ་པོ་ཐུམ་སྒྲིལ་ནང་GnuPG ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
 
 #: ../fdroid
 msgid "Add a new application from its source code"
@@ -194,24 +197,29 @@ msgstr ""
 msgid "Also warn about formatting issues, like rewritemeta -l"
 msgstr "མ་ཟད་བཀོད་སྒྲིག་བྱས་པའི་གནད་དོན་རྣམས་ལ་ཉེན་བརྡ་སྟོན། དཔེར་ན་rewritemeta -l"
 
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android Build Tools path '{path}' does not exist!"
+msgstr "ཨེན་ཀྲོཌ་བཟོ་སྐྲུན་མ་ལག་ཐབས་ལམ '{path}1' མིན་འདུག!"
+
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK '{path}' does not have '{dirname}' installed!"
-msgstr ""
+msgstr "ཨེན་ཀྲོཌ་SDK '{path}1{dirname}' '{dirname}2'སྒྲིག་བཅུག་མིན་འདུག!"
 
 #: ../fdroidserver/common.py
 msgid "Android SDK not found!"
-msgstr ""
+msgstr "ཨེན་ཀྲོཌ་ SDK རྙེད་སོན་བྱུང་མ་སོང་།!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' does not exist!"
-msgstr ""
+msgstr "ཨེན་ཀྲོཌ་SDK ཐབས་ལམ་ '{path} 1'མིན་འདུག"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' is not a directory!"
-msgstr ""
+msgstr "ཨེན་ཀྲོཌSDKཐབས་ལམ་ '{path}1' ཡིག་ཆ་གསོག་ཉར་རེད་མིན་འདུག!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -228,11 +236,11 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "App is in '{repo}' but has a link to {url}"
-msgstr ""
+msgstr "མཉེན་ཆས་འདི་'{repo}1ནང་འདུག འོན་ཀྱང་སྦྲེལ་མཐུད་དེ་ {url}2ཡོད།"
 
 #: ../fdroidserver/lint.py
 msgid "Appending .git is not necessary"
-msgstr ""
+msgstr "Appending .git ངེས་པར་དགོས་ཀྱི་མེད།"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -244,11 +252,13 @@ msgstr ""
 #, python-brace-format
 msgid "Branch '{branch}' used as commit in build '{versionName}'"
 msgstr ""
+"ཡན་ལག '{branch}1' བཟོ་སྐྲུན་ནང་བེད་སྤྱོད་བྱས་རྒྱུ་ཁས་ལེན་ཡོད།'{versionName}2'"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Branch '{branch}' used as commit in srclib '{srclib}'"
 msgstr ""
+"ཡན་ལག '{branch}1''  srclib ནང་བེད་སྤྱོད་བྱེད་རྒྱུ་ཁས་ལེན་ཡོད་།'{srclib}'"
 
 #: ../fdroid
 msgid "Build a package from source"
@@ -261,6 +271,8 @@ msgstr "མཉེན་ཆས་ཡོད་བཞིན་པ་ཆ་ཚང་
 #: ../fdroidserver/lint.py
 msgid "Build generated by `fdroid import` - remove disable line once ready"
 msgstr ""
+"བཟོ་སྐྲུན་འདི་ཐོན་སྐྱེད་བྱེད་མཁན་ 'ཨེཕ་རོཌ་ནང་འདྲེན།' "
+"-གལ་སྲིད་གྲ་སྒྲིག་ཟིན་ན་ནུས་མེད་ཀྱི་རིམ་པ་དེ་མེད་པ་བཟོས།"
 
 #: ../fdroidserver/build.py
 msgid "Build only the latest version of each package"
@@ -276,12 +288,12 @@ msgstr ""
 #: ../fdroidserver/init.py
 #, python-format
 msgid "Built repo based in \"%s\" with this config:"
-msgstr ""
+msgstr "རེ་པོ་བཟོ་སྐྲུན་གཞི་རྩ་ \"%s\" སྒྲིག་བཀོད་འདི་དང་མཉམ་དུ་ཡོད།:"
 
 #: ../fdroidserver/build.py
 msgid "Can't build due to {} error while scanning"
 msgid_plural "Can't build due to {} errors while scanning"
-msgstr[0] ""
+msgstr[0] "ཚགས་རྒྱབ་པའི་སྐབས་སུ་ནོར་སྐྱོན་ {} ཤོར་བས་བཟོ་སྐྲུན་བྱེད་ཐུབ་མེད།"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -295,7 +307,7 @@ msgstr ""
 
 #: ../fdroidserver/rewritemeta.py
 msgid "Cannot use --list and --to at the same time"
-msgstr ""
+msgstr "བེད་སྤྱོད་གཏོང་མི་ཐུབ་། --ཐོ་གཞུང་དང--དུས་མཉམ།"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -304,12 +316,12 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Categories are not set"
-msgstr ""
+msgstr "སྡེ་ཚན་རྣམས་སྒྲིག་མེད།"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Category '%s' is not valid"
-msgstr ""
+msgstr "སྡེ་ཚན་'%s' ཁུངས་ལྡན་མ་རེད།"
 
 #: ../fdroid
 msgid "Check for updates to applications"
@@ -335,9 +347,9 @@ msgid "Clean up all containers and then exit"
 msgstr "སྣོད་ཆ་ཚང་གཙང་མ་བཟོས་ནས་ཕྱིར་ཐོན།"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Clean update - don't uses caches, reprocess all APKs"
-msgstr "གསར་བསྒྱུར་གཙང་བཟོ།-ཡིག་ཆ་གསོག་ཉར་བེད་སྤྱོ་མ་བྱེད། apks ཚང་མ་སྐྱར་སྤྱོད་བྱེད།"
+msgstr ""
+"གསར་བསྒྱུར་གཙང་བཟོ།-ཡིག་ཆ་གསོག་ཉར་བེད་སྤྱོ་མ་བྱེད། apks ཚང་མ་སྐྱར་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/import.py
 msgid "Comma separated list of categories."
@@ -355,7 +367,7 @@ msgstr "བསྒྱུར་བ་གཏོང་བར་མོས་མཐུ
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Could not find '{command}' on your system"
-msgstr ""
+msgstr "ཁྱེད་རང་གི་མ་ལག་སྒང་ལ་'{command}1' རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -369,16 +381,16 @@ msgstr ""
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version code"
-msgstr ""
+msgstr "ཐོན་རིམ་གསར་གསར་ཤོས་ཀྱི་ཨང་རྟགས་འདི་འདི་རྙེད་མ་སོང་།"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version name"
-msgstr ""
+msgstr "ཐོན་རིམ་གསར་ཤོས་འདིའི་མིང་རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/import.py
 msgid "Couldn't find package ID"
-msgstr ""
+msgstr "ཐུམ་སྒྲིལ་ངོས་འཛིན་རྙེད་སོན་བྱུང་མ་སོང་།"
 
 #: ../fdroidserver/update.py
 msgid "Cowardily refusing to overwrite existing signing key setup!"
@@ -395,33 +407,33 @@ msgstr "བོར་བརླག་ཏུ་སོང་བའི་ཡིག་
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Created new container \"{name}\""
-msgstr ""
+msgstr "དྲྭ་སྣོད་གསར་པ་བཟོས་\"{name} 1\""
 
 #: ../fdroidserver/publish.py
 msgid "Creating log directory"
-msgstr ""
+msgstr "ཉིན་ཐོ་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Creating new S3 bucket: {url}"
-msgstr ""
+msgstr "S3 སྣོད་གསར་པ་བཟོ་བཞིན་པ།:{url} 1"
 
 #: ../fdroidserver/publish.py
 msgid "Creating output directory"
-msgstr ""
+msgstr "ཐོན་སྐྱེད་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།"
 
 #: ../fdroidserver/index.py
 msgid "Creating signed index with this key (SHA256):"
-msgstr ""
+msgstr "ལྡེ་མིག་འདི་(SHA256)དང་མཉམ་དུ་མིང་རྟགས་ཕྱོགས་སྟོན་བཟོ་བཞིན་པ།:"
 
 #: ../fdroidserver/import.py ../fdroidserver/verify.py
 #: ../fdroidserver/publish.py
 msgid "Creating temporary directory"
-msgstr ""
+msgstr "གནས་སྐབས་ཕྱོགས་དེབ་བཟོ་བཞིན་པ།"
 
 #: ../fdroidserver/index.py
 msgid "Creating unsigned index in preparation for signing"
-msgstr ""
+msgstr "མིང་རྟགས་གྲ་སྒྲིག་གི་ཆེད་དུ་མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་སྟོན་བཟོ་བཞིན་པ།"
 
 #: ../fdroidserver/nightly.py
 msgid "DEBUG_KEYSTORE is not set or the value is incomplete"
@@ -439,21 +451,23 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Description '%s' is just the app's summary"
-msgstr ""
+msgstr "འགྲེལ་བཤད་'%s 1'  ནི་མཉེན་ཆས་མདོར་བསྡུས་ཤིག་རེད།"
 
 #: ../fdroidserver/lint.py
 msgid "Description has a duplicate line"
-msgstr ""
+msgstr "འགྲེལ་བཤད་འདི་ལ་རིམ་པ་རྫུན་མ་ཡོད།"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)"
 msgstr ""
+"འགྲེལ་བཤད་འདི་ལ་ཐོ་གཞུང་ཡོད། (%s 1)  "
+"འོན་ཀྱང་འདི་ལ་ཚགས་རྒྱབ་མིན་འདུག(*)གྲངས་ཀྱང་མེད། (#)"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Description of length {length} is over the {limit} char limit"
-msgstr ""
+msgstr "རིང་ཐུང་གི་འགྲེལ་བཤད་ {length} 1  {limit} 2 ལས་བརྒལ་འདུག char limit"
 
 #: ../fdroidserver/init.py
 msgid "Do not prompt for Android SDK path, just fail"
@@ -484,11 +498,12 @@ msgstr "ཐོ་གཞུང་ཕབ་ལེན་ང་ཚོར་མེད
 #: ../fdroidserver/common.py
 msgid "Downloading the repository already failed once, not trying again."
 msgstr ""
+"མཛོད་ཁང་ཕབ་ལེན་ཐེངས་གཅིག་བྱས་པ་འདི་ཐུབ་མ་སོང་། ཡང་སྐྱར་ཐབས་ཤེས་བྱེད་ཀྱི་མིན་།"
 
 #: ../fdroidserver/verify.py
 #, python-brace-format
 msgid "Downloading {url} failed. {error}"
-msgstr ""
+msgstr "{url} 1 ཕབ་ལེན་ཐུབ་མ་སོང་།{error} 2"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -499,7 +514,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Duplicate link in '{field}': {url}"
-msgstr ""
+msgstr "'{field} 1'ནང་གི་ངོ་བཤུས་སྦྲེལ་མཐུད།: {url} 2"
 
 #: ../fdroid
 msgid "Dynamically scan APKs post build"
@@ -520,19 +535,22 @@ msgid ""
 "Enter the path to the Android SDK (%s) here:\n"
 "> "
 msgstr ""
+"ཨེན་ཀྲོཌ་SDKགྱི་ལམ་འདིར་ཡོད་པས་ནང་འཛུལ་བྱེད། (%s) :\n"
+"> "
 
 #: ../fdroidserver/import.py
 msgid "Error while getting repo address"
-msgstr ""
+msgstr "རེ་པོ་ཁ་བྱང་ལེན་སྐབས་ནོར་སྐྱོན།"
 
 #: ../fdroid
 msgid "Extract signatures from APKs"
-msgstr ""
+msgstr "APKs ནས་མིང་རྟགས་ཕྱིར་སྟོན་བྱེད།"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
 msgid "Failed fetching signatures for '{apkfilename}': {error}"
 msgstr ""
+"'{apkfilename} 1'གྱི་ཆེད་དུ་འཚོལ་བཞིན་པའི་མིང་རྟགས་རྙེད་མ་སོང་།: {error} 2"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -545,18 +563,17 @@ msgid "Failed resizing {path}: {error}"
 msgstr ""
 
 #: ../fdroidserver/publish.py
-#, fuzzy
 msgid "Failed to align application"
-msgstr "à½\98à½\89ེà½\93à¼\8bà½\86སà¼\8bཡོà½\91à¼\8bà½\96à½\9eིà½\93à¼\8bà½\94à¼\8bà½\86à¼\8bà½\9aà½\84à¼\8bལà¼\8bà½\90ོà½\93à¼\8bསà¾\90ྱེà½\91à¼\8bà½\96à½\9fོས།"
+msgstr "à½\98à½\89ེà½\93à¼\8bà½\86སà¼\8bཡོà½\91à¼\8bརྣà½\98སà¼\8bà½\95ྱོà½\82སà¼\8bསà¾\92ྲིà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\90ུà½\96à¼\8bà½\98à¼\8bསོà½\84à¼\8b།"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Failed to create S3 bucket: {url}"
-msgstr ""
+msgstr "S3 དྲྭ་སྣོད་བཟོས་ཐུབ་མ་སོང་། :{url} 1"
 
 #: ../fdroidserver/common.py
 msgid "Failed to get APK manifest information"
-msgstr ""
+msgstr "APKནང་གསལ་བའི་གནས་ཚུལ་རྣམས་ལེན་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -571,27 +588,27 @@ msgstr ""
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "Failed to install '{apkfilename}' on {dev}: {error}"
-msgstr ""
+msgstr "སྒྲིག་བཅུག་བྱེད་མ་སོང་། '{apkfilename} 1' སྒང་ལ་ {dev} 2: {error} 3"
 
 #: ../fdroidserver/publish.py
 msgid "Failed to sign application"
-msgstr ""
+msgstr "མཉེན་ཆས་མིང་རྟགས་བཀོད་མིན་འདུག"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
 msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'"
-msgstr ""
+msgstr "'{apkfilename} 1' ཆེད་དུ་མིང་རྟགས་འཚོལ་བཞིན་པ།་> '{sigdir} 2'"
 
 #: ../fdroidserver/verify.py ../fdroidserver/stats.py ../fdroidserver/update.py
 #: ../fdroidserver/rewritemeta.py ../fdroidserver/build.py
 #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
 #: ../fdroidserver/install.py
 msgid "Finished"
-msgstr ""
+msgstr "ཚར་སོང་།"
 
 #: ../fdroidserver/lint.py
 msgid "Flattr donation methods belong in the FlattrID flag"
-msgstr ""
+msgstr "Flattr ཞལ་འདེབས་ཐབས་ལམ་འདི་བཞིན་FlattrID flag ལ་ཐོབ་ཀྱི་ཡོད་།"
 
 #: ../fdroidserver/build.py
 msgid ""
@@ -608,12 +625,12 @@ msgstr ""
 
 #: ../fdroidserver/common.py
 msgid "Found invalid appids in arguments"
-msgstr ""
+msgstr "རྩོད་པའི་ནང་ཁུངས་ལྡན་མིན་པའི་appids རྙེད་འདུག"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/common.py
 msgid "Found invalid versionCodes for some apps"
-msgstr ""
+msgstr "མཉེན་ཆས་ཁ་ཤས་ཀྱི་ཁུངས་ལྡན་མིན་པའི་ཐོན་རིམ་ཨང་རྟགས་རྙེད་འདུག"
 
 #: ../fdroidserver/metadata.py
 #, fuzzy, python-brace-format
@@ -622,7 +639,7 @@ msgstr "བོར་བརླག་ཏུ་སོང་བའི་ཡིག་
 
 #: ../fdroidserver/index.py
 msgid "Found multiple signing certificates for repository."
-msgstr ""
+msgstr "མཛོད་ཁང་ཆེད་དུ་་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་མང་པོ་རྙེད་འདུག"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -631,12 +648,12 @@ msgstr ""
 
 #: ../fdroidserver/index.py
 msgid "Found no signing certificates for repository."
-msgstr ""
+msgstr "མཛོད་ཁང་ཆེད་དུ་མིང་རྟགས་བཀོད་པའི་ལག་ཁྱེར་རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Found non-file at %s"
-msgstr ""
+msgstr "འདི་ལ་%s 1 ཡིག་ཆ་མིན་པ་རྙེད་སོང་།"
 
 #: ../fdroidserver/update.py
 #, fuzzy, python-brace-format
@@ -646,35 +663,35 @@ msgstr "བོར་བརླག་ཏུ་སོང་བའི་ཡིག་
 #: ../fdroidserver/common.py
 #, python-format
 msgid "Git checkout of '%s' failed"
-msgstr ""
+msgstr "གིཊ་ཕྱིར་འཐེན་'%s 1' ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git clean failed"
-msgstr ""
+msgstr "གིཊ་གཙང་བཟོ་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git fetch failed"
-msgstr ""
+msgstr "གིཊ་འཚོལ་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git remote set-head failed"
-msgstr ""
+msgstr "གིཊ་རྒྱང་ཐག་སྒྲིག་འགོ་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git reset failed"
-msgstr ""
+msgstr "གིཊ་སྐྱར་སྒྲིག་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git submodule sync failed"
-msgstr ""
+msgstr "གིཊ་རྒྱ་ཁྱོན་མཉམ་བསྲེ་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "Git submodule update failed"
-msgstr ""
+msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་གསར་བསྒྱུར་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/index.py
 msgid "Ignoring package without metadata: "
-msgstr ""
+msgstr "རྒྱབ་ལྗོངས་ཡིག་ཆ་མེད་པའི་ཐུམ་སྒྲིལ་ཡ་ལན་མ་བྱས། "
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -684,15 +701,15 @@ msgstr ""
 #: ../fdroidserver/rewritemeta.py
 #, python-brace-format
 msgid "Ignoring {ext} file at '{path}'"
-msgstr ""
+msgstr "{ext} 1 ཡིག་ལ་ཡ་ལན་མེད་པ་ '{path} 2'"
 
 #: ../fdroidserver/update.py
 msgid "Include APKs that are signed with disabled algorithms like MD5"
-msgstr ""
+msgstr "MD5ལྟ་བུའི་མཚན་རྟགས་ཡོད་པའི་APKs ནང་ཚུད།"
 
 #: ../fdroidserver/common.py
 msgid "Initialising submodules"
-msgstr ""
+msgstr "ཐོག་མིའི་ཡན་ལག་རྒྱ་ཁྱོན།"
 
 #: ../fdroidserver/install.py
 msgid "Install all signed applications available"
@@ -705,12 +722,12 @@ msgstr "ཡོ་བྱད་སྒང་གི་ཐུམ་སྒྲིལ་
 #: ../fdroidserver/install.py
 #, python-format
 msgid "Installing %s..."
-msgstr ""
+msgstr "སྒྲིག་བཅུག་བྱེད་བཞིན་པ།%s 1..."
 
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "Installing '{apkfilename}' on {dev}..."
-msgstr ""
+msgstr "'{apkfilename} 1' སྒྲིག་བཅུག་བྱེད་བཞིན་པ{dev} 2...གྱི་སྒང་ལ་"
 
 #: ../fdroid
 msgid "Interact with the repo HTTP server"
@@ -741,17 +758,21 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Invalid bulleted list"
-msgstr ""
+msgstr "ཚད་ལྡན་མིན་པའི་ཚགས་ཀྱི་ཐོ་གཞུང་།"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid ""
 "Invalid license tag \"%s\"! Use only tags from https://spdx.org/license-list"
 msgstr ""
+"ཁུངས་ལྡན་མིན་པའི་ཆོག་མཆན་ལག་ཁྱེར་སྦྱར་ \"%s 1\"! https://spdx.org/license-"
+"list ཁོ་ན་ནས་ཡིན་པ་སྦྱར་ཏེ་བེད་སྤྱོད་བྱེད་།"
 
 #: ../fdroidserver/lint.py
 msgid "Invalid link - use [http://foo.bar Link title] or [http://foo.bar]"
 msgstr ""
+"ཁུངས་ལྡན་མིན་པའི་སྦྲེལ་མཐུད།  - [http://foo.bar Link title] or "
+"[http://foo.bar]བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/metadata.py
 #, python-format
@@ -765,12 +786,12 @@ msgstr ""
 #: ../fdroidserver/common.py
 #, python-format
 msgid "Invalid name for published file: %s"
-msgstr ""
+msgstr "པར་སྐྲུན་ཡིག་ཆའི་ཆེད་དུ་ཁུངས་ལྡན་མིན་པའིན་མིང་།: %s 1"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Invalid package name {0}"
-msgstr ""
+msgstr "ཁུངས་ལྡན་མིན་པའི་ཐུམ་སྒྲིལ་གྱི་མིང་།{0} 1"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -780,16 +801,19 @@ msgstr ""
 #: ../fdroidserver/publish.py ../fdroidserver/update.py
 msgid "Java JDK not found! Install in standard location or set java_paths!"
 msgstr ""
+"Java JDK རྙེད་མ་སོང་།! ཚད་ལྡན་གྱི་ས་གནས་ནང་སྒྲིག་བཅུག་བྱེད་པའམ་ཡང་ན་"
+"java_paths སྒྲིག!"
 
 #: ../fdroidserver/signindex.py
 msgid ""
 "Java jarsigner not found! Install in standard location or set java_paths!"
 msgstr ""
+"Java jarsigner རྙེད་མ་སོང་། !ཚད་ལྡན་གྱི་ས་གནས་ནང་སྒྲིག་བཅུག་བྱེད་པའམ་ཡང་ན་"
+"java_paths སྒྲིག!"
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "Keystore for signing key:\t"
-msgstr "རེà¼\8bà½\94ོà¼\8bà½\98ིà½\84à¼\8bརà¾\9fà½\82སà¼\8bà½\96à½\80ོà½\91à¼\8bà½\94འིà¼\8bལྡེà¼\8bà½\98ིà½\82à¼\8bà½\86ེà½\91à¼\8bà½\91ུà¼\8bསà¾\9fོà½\93à¼\8bà½\94འིà¼\8bལྡེà¼\8bà½\98ིà½\82à¼\8bà½\82སོà½\82à¼\8bà½\89རà¼\8bà½\81à½\84à¼\8bà½\82ིà¼\8bལà½\98à¼\8d"
+msgstr "à½\98ིà½\84à¼\8bརà¾\9fà½\82སà¼\8bà½\96à½\80ོà½\91à¼\8bà½\94འིà¼\8bལྡེà¼\8bà½\98ིà½\82à¼\8bà½\86ེà½\91à¼\8bà½\91ུà¼\8bསà¾\9fོà½\93à¼\8bà½\94འིà¼\8bལྡེà¼\8bà½\98ིà½\82à¼\8bà½\82སོà½\82à¼\8bà½\89རà¼\8bà½\81à½\84à¼\8bà½\82ིà¼\8bལà½\98à¼\8d\t"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
@@ -797,6 +821,8 @@ msgid ""
 "Last used commit '{commit}' looks like a tag, but Update Check Mode is "
 "'{ucm}'"
 msgstr ""
+"ཁས་ལེན་བྱས་པའི་བེད་སྤྱོད་ཐ་མ་ '{commit} 1' སྦྱར་བ་འདྲ་པོ་འདུག, "
+"འོན་ཀྱང་གསར་བསྒྱུར་ཡོད་མེད་འཚོལ་བྱེད་ནི།'{ucm} 2'"
 
 #: ../fdroidserver/rewritemeta.py
 msgid "List files that would be reformatted"
@@ -808,36 +834,37 @@ msgstr "དམིགས་བསལ་གྱི་གནས་སྐབས་ལ
 
 #: ../fdroidserver/index.py
 msgid "Malformed repository mirrors."
-msgstr ""
+msgstr "བཟོ་ལྟ་མེད་པའི་མཛོད་ཁང་ཤེལ་སྒོ་རྣམས།"
 
 #: ../fdroidserver/server.py
 msgid "Malformed serverwebroot line:"
-msgstr ""
+msgstr "བཟོ་ལྟ་ཤོར་བའི་ serverwebroot line:"
 
 #: ../fdroidserver/gpgsign.py
 msgid "Missing output directory"
-msgstr ""
+msgstr "ཕྱོགས་དེབ་ཐོན་སྐྱེད་བོར་བརླག"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Name '%s' is just the auto name - remove it"
-msgstr ""
+msgstr "མིང་། '%s 1'  ནི་རང་མིང་ཁོ་ན་རེད་། - མེད་པ་བཟོས།"
 
 #: ../fdroidserver/common.py
 msgid "No 'config.py' found, using defaults."
-msgstr ""
+msgstr "'config.py' རྙེད་མ་སོང་།, སོར་བཞག་བེད་སྤྱོད་བྱེད་བཞིན་པ།"
 
 #: ../fdroidserver/common.py
 msgid "No Android SDK found!"
-msgstr ""
+msgstr "ཨེན་ཀྲོཌ་ SDK རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/import.py
 msgid "No android or kivy project could be found. Specify --subdir?"
 msgstr ""
+"ཨེན་ཀྲོཌ་དང་ཡང་ན་ཀི་བི་ལས་འཆར་གང་ཡང་རྙེད་ས་མ་རེད། དམིགས་སྟོན་བྱེད་--subdir?"
 
 #: ../fdroidserver/install.py
 msgid "No attached devices found"
-msgstr ""
+msgstr "ཟུར་སྣོན་ཡོ་བྱད་རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -846,40 +873,42 @@ msgstr ""
 
 #: ../fdroidserver/index.py
 msgid "No fingerprint in URL."
-msgstr ""
+msgstr "URL ནང་ལག་མཐིལ་པར་ཤུས་རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/common.py
 msgid "No git submodules available"
-msgstr ""
+msgstr "གིཊ་ཡན་ལག་རྒྱ་ཁྱོན་མིན་འདུག"
 
 #: ../fdroidserver/import.py
 msgid "No information found."
-msgstr ""
+msgstr "གནས་ཚུལ་རྙེད་མ་སོང་།"
 
 #: ../fdroidserver/lint.py
 msgid "No need to specify that the app is Free Software"
-msgstr ""
+msgstr "མཉེས་ཆས་འདི་རིན་མེད་མཉེན་ཆས་ཡིན་པ་དམིགས་སྟོན་བྱེད་དགོས་དོན་མེད་།"
 
 #: ../fdroidserver/lint.py
 msgid "No need to specify that the app is for Android"
-msgstr ""
+msgstr "མཉེན་ཆས་འདི་ཨེན་ཀྲོཌ་ཆེད་དུ་ཡིན་པ་དམིགས་སྟོན་བྱེད་དགོས་དོན་མེད།"
 
 #: ../fdroidserver/server.py
 msgid "No option set! Edit your config.py to set at least one of these:"
 msgstr ""
+"གདམ་ཀ་མེད་པ་སྒྲིག།! ཁྱེད་རང་གི་config.py "
+"འདིའི་ནང་ནས་མ་མཐའ་ཡིན་ཡང་གང་རུང་ཞིག་རྩོམ་སྒྲིག་བྱེད་:"
 
 #: ../fdroidserver/common.py
 msgid "No packages specified"
-msgstr ""
+msgstr "ཐུམ་སྒྲིལ་དམིགས་སྟོན་བྱེད་མེད།"
 
 #: ../fdroidserver/install.py
 #, python-format
 msgid "No signed apk available for %s"
-msgstr ""
+msgstr "%s 1ཆེད་དུ་མིང་རྟགས་བཀོད་པའི་ apk མེད།"
 
 #: ../fdroidserver/install.py
 msgid "No signed output directory - nothing to do"
-msgstr ""
+msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་ཐོན་སྐྱེད། -བྱ་རྒྱུ་གང་ཡང་མེད།"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -889,26 +918,27 @@ msgstr ""
 #: ../fdroidserver/common.py
 #, python-format
 msgid "No such package: %s"
-msgstr ""
+msgstr "ཐུམ་སྒྲིལ་དེ་འདྲ་མིན་འདུག: %s 1"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "No such versionCode {versionCode} for app {appid}"
 msgstr ""
+"ཐོན་རིམ་ཨང་རྟགས་དེ་འདྲ་མིན་འདུག {versionCode} 1  མཉེན་ཆས་ཆེད་དུ།{appid} 2"
 
 #: ../fdroidserver/verify.py ../fdroidserver/publish.py
 msgid "No unsigned directory - nothing to do"
-msgstr ""
+msgstr "མིང་རྟགས་མ་བཀོད་པའི་ཕྱོགས་དེབ་མིན་འདུག-བྱ་རྒྱུ་གང་ཡང་མེད།"
 
 #: ../fdroidserver/signindex.py
 msgid "Nothing to do"
-msgstr ""
+msgstr "བྱ་རྒྱུ་གང་ཡང་མེད་།"
 
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "Nothing to do for {appid}."
-msgstr ""
+msgstr "{appid} 1 ཆེད་དུ་བྱ་རྒྱུ་གང་ཡང་མེད་།"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/update.py
@@ -939,7 +969,7 @@ msgstr "མཉེན་ཆས་ཁོ་ནར་རང་འགུལ་གས
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "གདམ་ཀ།"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -952,17 +982,17 @@ msgstr "རེ་པོ་APKs ལམ་གྱི་སྒང་ལ་སྐྱ
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Parsing manifest at '{path}'"
-msgstr ""
+msgstr "'{path} 1'འདིའི་ནང་དབྱེ་མཚམས་མངོན་གྱི་འདུག"
 
 #: ../fdroidserver/common.py
 msgid "Password required with username"
-msgstr ""
+msgstr "སྤྱོད་མིང་དང་མཉམ་དུ་གསང་ཨང་དགོས།"
 
 #: ../fdroidserver/import.py
-#, fuzzy
 msgid "Path to main Android project subdirectory, if not in root."
 msgstr ""
-"གལ་སྲིད་ཆོག་མཆན་ཨ་མའི་ནང་ལ་མེད་ན། ལམ་གྱི་གཙོ་བོ་འདི་ཨེན་ཀྲོཌ་ལས་འཆར་གྱི་ཕྱོགས་དེབ་ཡན་ལག་སྟོན་ཡོད།"
+"གལ་སྲིད་ཆོག་མཆན་ཨ་མའི་ནང་ལ་མེད་ན། "
+"ལམ་གྱི་གཙོ་བོ་འདི་ཨེན་ཀྲོཌ་ལས་འཆར་གྱི་ཕྱོགས་དེབ་ཡན་ལག་སྟོན་ཡོད།"
 
 msgid "Path to main android project subdirectory, if not in root."
 msgstr ""
@@ -981,7 +1011,6 @@ msgid "Path to the keystore for the repo signing key"
 msgstr "རེ་པོ་མིང་རྟགས་བཀོད་པའི་ལྡེ་མིག་ཆེད་དུ་སྟོན་པའི་ལྡེ་མིག་གསོག་ཉར་ཁང་གི་ལམ།"
 
 #: ../fdroidserver/dscanner.py
-#, fuzzy
 msgid "Prepare Drozer to run a scan"
 msgstr "འཚག་རྒྱབ་འཁོར་སྐྱོད་ཐུབ་པའི་ཆེད་དུ་ཌོ་ཛར་གྲ་སྒྲིག་བྱེད།"
 
@@ -1000,7 +1029,7 @@ msgstr ""
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Problem with xml at '{path}'"
-msgstr ""
+msgstr "'{path} 1'ལ་xml མཉམ་དུ་སྐྱོན་འདུག"
 
 #: ../fdroidserver/checkupdates.py
 msgid "Process auto-updates"
@@ -1009,12 +1038,12 @@ msgstr "རང་འགུལ་གྱི་གསར་བསྒྱུར་ར
 #: ../fdroidserver/publish.py ../fdroidserver/update.py
 #, python-brace-format
 msgid "Processing {apkfilename}"
-msgstr ""
+msgstr "ལས་ཀ་བྱེད་བཞིན་པ་{apkfilename} 1"
 
 #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
 #, python-brace-format
 msgid "Processing {appid}"
-msgstr ""
+msgstr "ལས་ཀ་བྱེད་བཞིན་པ།{appid} 1"
 
 #: ../fdroidserver/update.py
 #, fuzzy
@@ -1031,21 +1060,21 @@ msgstr "URL ལས་འཆར་ནང་འདྲེན།"
 
 #: ../fdroidserver/lint.py
 msgid "Punctuation should be avoided"
-msgstr ""
+msgstr "ཡི་གེའི་བར་རྟགས་རིགས་ངེས་པར་མེད་པ་དགོས་།"
 
 #: ../fdroidserver/btlog.py
 msgid "Push the log to this git remote repository"
 msgstr "ཐོ་གཞུད་འདི་གིཊ་ཐག་རིང་གི་མཛོད་ཁང་ནང་འབུད་རྒྱག་གཏོང་།"
 
 #: ../fdroidserver/server.py
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Pushing binary transparency log to {url}"
-msgstr "URLཆེད་དུ་ཨང་གྲངས་ཀྱི་ཐོ་གཞུང་གསར་བསྒྱུར།"
+msgstr "{url} 1ཆེད་དུ་ཨང་གྲངས་ཀྱི་ཐོ་གཞུང་གསར་བསྒྱུར།"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Pushing to {url}"
-msgstr ""
+msgstr "{url} 1ཕྱོགས་ལ་འབུད་རྒྱབ་རྒྱོབ།"
 
 #: ../fdroid
 msgid "Quickly start a new repository"
@@ -1058,7 +1087,7 @@ msgstr "ཡིག་ཚགས་ཀྱི་རྒྱབ་ལྗོངས་ལ
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Reading '{config_file}'"
-msgstr ""
+msgstr "ཀློག་བཞིན་པ་། '{config_file} 1'"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #. https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
@@ -1068,6 +1097,8 @@ msgid ""
 "Reading packageName/versionCode/versionName failed, APK invalid: "
 "'{apkfilename}'"
 msgstr ""
+"ཐུམ་སྒྲིལ་གྱི་མིང་ཀློག་བཞིནཔ།/ཐོན་རིམ་ཨང་རྟགས་/ཐོན་རིམ་གྱི་མིང་བདེ་སྤྱོད་མེད།"
+" APK ཁུངས་ལྡན་མིན།: '{apkfilename} 1'"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -1075,15 +1106,16 @@ msgid "Reading {apkfilename} from cache"
 msgstr ""
 
 #: ../fdroidserver/stats.py
-#, fuzzy
 msgid ""
 "Recalculate aggregate stats - use when changes have been made that would "
 "invalidate old cached data."
-msgstr "ཕྱོགས་བསྡོམས་བྱས་པའི་གྲངས་ཐོ་རྣམས་སྐྱར་རྩིས་བྱེད། -བསྒྱུར་བ་འགྲོ་བའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད། "
+msgstr ""
+"ཕྱོགས་བསྡོམས་བྱས་པའི་གྲངས་ཐོ་རྣམས་སྐྱར་རྩིས་བྱེད། "
+"-བསྒྱུར་བ་འགྲོ་བའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/common.py
 msgid "Removing specified files"
-msgstr ""
+msgstr "དམིགས་སྟོན་བྱས་པའི་ཡིག་ཆ་རྣམས་མེད་པ་བཟོ་བཞིན་པ།"
 
 #: ../fdroidserver/update.py
 msgid "Rename APK files that do not match package.name_123.apk"
@@ -1120,21 +1152,20 @@ msgstr "བཀོད་སྒྲིག་འདི་ག་རང་ལ་སྐ
 #: ../fdroidserver/rewritemeta.py
 #, python-brace-format
 msgid "Rewriting '{appid}'"
-msgstr ""
+msgstr "སྐྱར་བྲིས། '{appid} 1'"
 
 #: ../fdroidserver/rewritemeta.py
 #, python-brace-format
 msgid "Rewriting '{appid}' to '{path}'"
-msgstr ""
+msgstr "སྐྱར་བྲིས '{appid} 1' དེ་ནས། '{path} 2'"
 
 #: ../fdroidserver/lint.py
-#, fuzzy
 msgid "Run rewritemeta to fix formatting"
-msgstr "བཀོད་སྒྲིག་འདི་ག་རང་ལ་སྐྱར་བྲིས་བྱེད།"
+msgstr "བཀོད་སྒྲིག་འདི་ག་རང་ལ་སྐྱར་བྲིས་བྱེད།"
 
 #: ../fdroidserver/server.py
 msgid "Running first pass with MD5 checking disabled"
-msgstr ""
+msgstr "MD5 ཚོད་ལྟ་བེད་སྤྱོད་མེད་པ་དང་མཉམ་དུ་ཐེངས་དང་པོ་འཁོར་སྐྱོད་བྱེད་བཞིན་པ།"
 
 #: ../fdroidserver/dscanner.py
 msgid "Scan only the latest version of each package"
@@ -1147,18 +1178,17 @@ msgstr "ཐུམ་སྒྲིལ་བྱས་པའི་འབྱུང་
 #: ../fdroidserver/build.py
 msgid "Scanner found {} problem"
 msgid_plural "Scanner found {} problems"
-msgstr[0] ""
+msgstr[0] "འཚག་རྒྱབ་ལ་སྐྱོན་རྙེད་པ།"
 
 #: ../fdroid
 msgid "Set up an app build for a nightly build repo"
 msgstr ""
 
 #: ../fdroidserver/build.py
-#, fuzzy
 msgid "Setup an emulator, install the APK on it and perform a Drozer scan"
 msgstr ""
-"གློག་ཀླད་ལད་མོ་མཁན་ཞིག་སྒྲིག འདིའི་སྒང་ལ་apk ནང་འགྲིག་བཅུག་བྱེད་དུ་བཅུག་ནས་ཌོ་ཛར་འཚག་རྒྱབ་འགོ་བཙུགས་"
-"བྱེད།"
+"གློག་ཀླད་ལད་མོ་མཁན་ཞིག་སྒྲིག འདིའི་སྒང་ལ་ APK "
+"à½\93à½\84à¼\8bའà½\82ྲིà½\82à¼\8bà½\96à½\85ུà½\82à¼\8bà½\96ྱེà½\91à¼\8bà½\91ུà¼\8bà½\96à½\85ུà½\82à¼\8bà½\93སà¼\8bà½\8cོà¼\8bà½\9bརà¼\8bའà½\9aà½\82à¼\8bརà¾\92ྱà½\96à¼\8bའà½\82ོà¼\8bà½\96à½\99ུà½\82སà¼\8bà½\96ྱེà½\91à¼\8d"
 
 msgid "Setup an emulator, install the apk on it and perform a drozer scan"
 msgstr ""
@@ -1180,7 +1210,7 @@ msgstr "འབྱུང་ཁུངས་ཨ་རྟགས་དང་དཀའ
 #: ../fdroidserver/update.py
 #, python-brace-format
 msgid "Skipping '{apkfilename}' with invalid signature!"
-msgstr ""
+msgstr "'{apkfilename} 1'མཆོང་ནས་ཁུངས་ལྡན་མ་ཡིན་པའི་མིང་རྟགས་དང་མཉམ་དུ།!"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -1195,12 +1225,12 @@ msgstr ""
 #: ../fdroidserver/scanner.py
 #, python-brace-format
 msgid "Skipping {appid}: disabled"
-msgstr ""
+msgstr "མཆོང་བཞིན་པ་ {appid} 1: བེད་མེད།"
 
 #: ../fdroidserver/scanner.py
 #, python-brace-format
 msgid "Skipping {appid}: no builds specified"
-msgstr ""
+msgstr "མཆོང་བཞིན་པ་ {appid} 1: བཟོ་སྐྲུན་དམིགས་སྟོན་མིན་འདུག"
 
 #: ../fdroidserver/server.py
 msgid "Specify a local folder to sync the repo to"
@@ -1213,7 +1243,8 @@ msgstr "rsync གྱི་ཆེད་དུ་SSH འདི་ངོ་ཐག
 #: ../fdroidserver/update.py
 #, fuzzy
 msgid "Specify editor to use in interactive mode. Default "
-msgstr "སྒྲིག་བཀོད་པར་དམིགས་སྟོན་བྱས་ནས་ལན་འདེབས་ཀྱི་ཚུལ་འདི་བེད་སྤྱོད་བྱེད་ སོར་བཞག %s 1"
+msgstr ""
+"སྒྲིག་བཀོད་པར་དམིགས་སྟོན་བྱས་ནས་ལན་འདེབས་ཀྱི་ཚུལ་འདི་བེད་སྤྱོད་བྱེད་ སོར་བཞག "
 
 #, c-format
 msgid "Specify editor to use in interactive mode. Default %s"
@@ -1235,12 +1266,12 @@ msgstr "ནམ་རྒྱུན་ལས་ཀྱང་མང་བའི་ག
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Summary '%s' is just the app's name"
-msgstr ""
+msgstr "སྙིང་བསྔུས་ '%s 1' ནི་མཉེན་ཆས་ཀྱི་མིང་ཞིག་རེད་།"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Summary of length {length} is over the {limit} char limit"
-msgstr ""
+msgstr "སྙིང་བསྔུས་ཀྱི་རིང་ཐུང་། {length} 1  charཚད་{limit} 2 ལས་བརྒལ་འདུག"
 
 #: ../fdroidserver/build.py
 msgid ""
@@ -1261,22 +1292,21 @@ msgid "The base URL for the repo to log (default: https://f-droid.org)"
 msgstr "གཞི་རྩའི་URL དེ་རེ་པོ་ཡི་ཐོ་གཞུང་བཀོད་པའི་ཆེད་དུ་(སོར་བཞག: https://f-droid.org)"
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "The only commands currently supported are 'init' and 'update'"
 msgstr "ལག་བསྟར་བྱེད་རྒྱུར་བཀའ་གཏོང། ཡང་ན་'init'འམ་ཡང་ན་ 'གསར་བསྒྱུར།'"
 
 #: ../fdroidserver/index.py
 msgid "The repository's fingerprint does not match."
-msgstr ""
+msgstr "མཛོད་ཁང་གི་མཛུབ་མཐིལ་དང་མཐུན་གྱི་མིན་འདུག"
 
 #: ../fdroidserver/common.py
 msgid "The repository's index could not be verified."
-msgstr ""
+msgstr "མཛོད་ཁང་གི་ཕྱོགས་སྟོན་ར་སྤྲོད་ཐུབ་མ་སོང་།"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "The root dir for local_copy_dir \"{path}\" does not exist!"
-msgstr ""
+msgstr "dir གྱི་རྩ་བ་ for local_copy_dir \"{path} 1\" མིན་འདུག!"
 
 #: ../fdroidserver/nightly.py
 msgid "The the file to be included in the repo (path or glob)"
@@ -1284,26 +1314,28 @@ msgstr ""
 
 #: ../fdroidserver/publish.py
 msgid "There is a keyalias collision - publishing halted"
-msgstr ""
+msgstr "ལྡེ་མིག་གཞན་ལ་སྐྱོན་ཆ་འདུག། -པར་སྐྲུན་བཀག"
 
 #: ../fdroidserver/import.py
 #, python-format
 msgid "This repo already has local metadata: %s"
-msgstr ""
+msgstr "རེ་པོ་འདི་ལ་སྔོན་ཚོད་ནས་ས་གནས་ཀྱི་རྒྱབ་ལྗོངས་ཡིག་ཆ་འདུག: %s 1"
 
 #: ../fdroidserver/server.py
 msgid ""
 "To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config."
 "py!"
 msgstr ""
+"awsbucket, awssecretkey དང་། awsaccesskeyid བེད་སྤྱོད་བྱེད་པའི་ཆེད་དུ་ "
+"config.py ནང་དུ་ངེས་པར་དུ་སྒྲིག་དགོས།!"
 
 #: ../fdroidserver/lint.py
 msgid "UCM is set but it looks like checkupdates hasn't been run yet"
-msgstr ""
+msgstr "UCMསྒྲིག་བཀོད་བྱས་ཟིན་ཡང་གསར་བསྒྱུར་འཚོལ་བ་དེ་འགོ་འཛུགས་མིན་འདུག"
 
 #: ../fdroidserver/lint.py
 msgid "URL shorteners should not be used"
-msgstr ""
+msgstr "URL ཐུང་དུ་གཏོང་མཁན་ངེས་པར་དུ་བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/metadata.py
 msgid "URL title is just the URL, use brackets: [URL]"
@@ -1312,7 +1344,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "URL {url} in Description: {error}"
-msgstr ""
+msgstr "URL {url} 1 ནང་འགྲེལ་བཤད་རྒྱབ་པ་: {error} 2"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -1328,6 +1360,8 @@ msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བས
 #, python-brace-format
 msgid "Unknown file '{filename}' in build '{versionName}'"
 msgstr ""
+"ངོས་འཛིན་མི་ཐུབ་པའི་ཡིག་ཆ། '{filename} 1' བཟོ་སྐྲུན་གྱི་ནང་། '{versionName} "
+"2'"
 
 #: ../fdroidserver/metadata.py
 #, python-format
@@ -1341,19 +1375,21 @@ msgstr "བོར་བརླག་ཏུ་སོང་བའི་ཡིག་
 
 #: ../fdroidserver/common.py
 msgid "Unknown version of aapt, might cause problems: "
-msgstr ""
+msgstr "aapt གྱི་ངོས་འཛིན་མ་ཐུབ་པའི་ཐོན་རིམ། དཀའ་ངལ་ཕྲད་སྲིད་པ།: "
 
 #: ../fdroidserver/lint.py
 msgid "Unlinkified link - use [http://foo.bar Link title] or [http://foo.bar]"
 msgstr ""
+"སྦྲེལ་མཐུད་བྱེད་མི་ཐུབ་པའི་སྦྲེལ་མཐུད། -བེད་སྤྱོད། [http://foo.bar Link "
+"title] or [http://foo.bar]"
 
 #: ../fdroidserver/lint.py
 msgid "Unnecessary leading space"
-msgstr ""
+msgstr "དགོས་མེད་ཀྱི་སྣེ་ཁྲིད་བར་མཚམས།"
 
 #: ../fdroidserver/lint.py
 msgid "Unnecessary trailing space"
-msgstr ""
+msgstr "དགོས་མེད་ཀྱི་རྫེས་ཤུལ་བར་མཚམས།"
 
 #: ../fdroidserver/metadata.py
 msgid "Unrecognised app field: "
@@ -1373,6 +1409,8 @@ msgstr ""
 #, python-brace-format
 msgid "Unsupported metadata format, use: --to [{supported}]"
 msgstr ""
+"རྒྱབ་སྐྱོར་མེད་པའི་རྒྱབ་ལྗོངས་ཡིག་ཆའི་འགྲོ་ལུགས། བེད་སྤྱོད་: --to "
+"[{supported} 1]"
 
 #: ../fdroidserver/metadata.py
 msgid "Unterminated ]"
@@ -1395,16 +1433,18 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Unused extlib at %s"
-msgstr ""
+msgstr "བེད་སྤྱོད་མེད་པའི་ extlib at %s 1"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Unused file at %s"
-msgstr ""
+msgstr "%s 1 དེ་ལ་བེད་སྤྱོད་མེད་པའི་ཡིག་ཆ།"
 
 #: ../fdroidserver/lint.py
 msgid "Update Check Name is set to the known app id - it can be removed"
 msgstr ""
+"མཉེན་ཆས་ཁ་བྱང་ནང་ལ་གསར་བསྒྱུར་འཚོལ་བའི་མིང་སྒྲིག་ཚར་འདུག "
+"-འདི་སུབས་ཆོག་གི་རེད།"
 
 #: ../fdroid
 msgid "Update repo information for new packages"
@@ -1424,16 +1464,16 @@ msgstr "ཝི་ཀི་གསར་བསྒྱུར་བྱེད།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "བེད་སྤྱོད།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "བེད་སྤྱོད།:%s 1\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
-msgstr ""
+msgstr "བེད་སྤྱོད།/HEAD གྱི་ཚབ་ཏུ།/ སོར་བཞག་ཡན་ལག་ནང་དུ་ཡོད་པའི་དོན་ཚན་ཨ་མ།"
 
 #: ../fdroidserver/update.py
 msgid "Use `fdroid update -c` to create it."
@@ -1444,10 +1484,10 @@ msgid "Use build server"
 msgstr "ཐོན་སྐྱེད་ཞབས་ཞུ་འཕྲུལ་ཆས་བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Use date from APK instead of current time for newly added APKs"
 msgstr ""
-"apk རང་གི་ཚེས་གྲངས་དེ་བེད་སྤྱོད་བྱས་པ་ལས་ཁ་སྣོན་བྱས་པའི་apk གསར་པའི་དུས་ཚོས་བེད་སྤྱོད་མ་བྱེད།"
+"APK རང་གི་ཚེས་གྲངས་དེ་བེད་སྤྱོད་བྱས་པ་ལས་ཁ་སྣོན་བྱས་པའི་ APKs "
+"གསར་པའི་དུས་ཚོས་བེད་སྤྱོད་མ་བྱེད།"
 
 msgid "Use date from apk instead of current time for newly added apks"
 msgstr ""
@@ -1456,7 +1496,7 @@ msgstr ""
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Using s3cmd to sync with: {url}"
-msgstr ""
+msgstr "s3cmd བེད་སྤྱོད་བྱས་ནས་: {url}1དང་མཉམ་དུ་sync"
 
 #: ../fdroid
 msgid "Valid commands are:"
@@ -1481,13 +1521,14 @@ msgid "X.509 'Distiguished Name' used when generating keys"
 msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "X.509 'Distinguished Name' used when generating keys"
 msgstr "X.509 'ཁྱད་པར་ཅན་གྱི་མིང་' ལྡེ་མིག་བཟོས་པའི་སྐབས་ལ་བེད་སྤྱོད་བྱེད།"
 
 #: ../fdroidserver/common.py
 msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:"
 msgstr ""
+"ཁྱེད་རང་གིས་ཨེན་ཀྲོཌ་མདུན་ངོས་བེད་སྤྱོད་བྱས་ནས་ཁྱེད་རང་གི་SDKའགྲོ་ལམ་སྒྲིག་བཀ"
+"ོད་བྱེད། དེ་ནི།:"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1502,20 +1543,18 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "གསལ་ཁ་མེད་པའི་གདམ་ཀ: %(option)s 1  མཐུན་མི་སོང་།%(matches)s 2"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "གསལ་ཁ་མེད་པའི་གདམ་ཀ:%s 1 (%s 2?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
-#, fuzzy
 msgid "applicationId in the form APPID"
 msgstr "APPID བཀོད་པའི་ནང་གི་མཉེས་ཆས་ཁ་བྱང་།"
 
 #: ../fdroidserver/checkupdates.py
-#, fuzzy
 msgid "applicationId to check for updates"
 msgstr "མཉེས་ཆས་ཁ་བྱང་རྒྱུད་གསར་བསྒྱར་ཡོད་མིན་ལྟོས།"
 
@@ -1523,14 +1562,14 @@ msgstr "མཉེས་ཆས་ཁ་བྱང་རྒྱུད་གསར་
 #: ../fdroidserver/verify.py ../fdroidserver/publish.py
 #: ../fdroidserver/dscanner.py ../fdroidserver/build.py
 #: ../fdroidserver/scanner.py ../fdroidserver/install.py
-#, fuzzy
 msgid "applicationId with optional versionCode in the form APPID[:VERCODE]"
-msgstr "མཉེན་ཆས་ཀྱི་ངོ་བོ་དང་མཉམ་དུ་གདམ་ཀ་ཅན་གྱི་ཐོན་རིམ་ཨང་རྟགས་APPID[:VERCODE]"
+msgstr ""
+"མཉེན་ཆས་ཀྱི་ངོ་བོ་དང་མཉམ་དུ་གདམ་ཀ་ཅན་གྱི་ཐོན་རིམ་ཨང་རྟགས་APPID[:VERCODE]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "argument \"-\" with mode %r"
-msgstr ""
+msgstr "རྩོད་པ།\"-\" འགྲོ་ལུགས་འདི་དང་མཉམ་དུ། %r 1"
 
 #: ../fdroidserver/nightly.py
 msgid "attempting bare ssh connection to test deploy key:"
@@ -1539,16 +1578,16 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "ཁ་ཕྱེས་ཐུབ་མ་སོང་།'%s 1': %s 2"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
-msgstr ""
+msgstr "subparser རྩོད་པ་དུ་མ་ཡོད་ཐབས་མེད།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "cannot merge actions - two groups are named %r"
-msgstr ""
+msgstr "བྱ་བ་ཟླ་སྒྲིལ་བཏང་ཐུབ་མ་སོང་། - སྡེ་ཚན་གཉིས་ཀྱི་མིང་ལ་%r 1"
 
 #: ../fdroidserver/nightly.py
 msgid "cannot publish update, did you set the deploy key?"
@@ -1565,13 +1604,13 @@ msgstr "ལག་བསྟར་བྱེད་རྒྱུར་བཀའ་ག
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "complex"
-msgstr ""
+msgstr "མགོ་རྙོག"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "conflicting option string: %s"
 msgid_plural "conflicting option strings: %s"
-msgstr[0] ""
+msgstr[0] "ཚིག་སྒྲུབ་ཀྱི་གདམ་ཀའི་རྙོག་ཕྲ།: %s 1"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1586,25 +1625,25 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "dest= is required for options like %r"
-msgstr ""
+msgstr "dest= ནི་གདམ་ཀ་འདི་འདྲ་ལ་%r 1དགོས་པ་ཡོད།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "expected %s argument"
 msgid_plural "expected %s arguments"
-msgstr[0] ""
+msgstr[0] "ཚོད་དཔག་བྱེད་པའི་%s 1 རྩོད་པ་"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "expected at least one argument"
-msgstr ""
+msgstr "མ་མཐའ་ཡིན་ནའང་རེ་བ་བྱེད་པའི་རྩོད་པ།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "expected at most one argument"
-msgstr ""
+msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་ཆེ་ཤེོས་གཅིག"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "expected one argument"
-msgstr ""
+msgstr "རེ་བ་བྱས་པའི་རྩོད་པ་གཅིག"
 
 #: ../fdroid
 #, fuzzy
@@ -1613,7 +1652,7 @@ msgstr "བེད་སྤྱོད་: ཨེཕ་རོཌ་ [-h|-རོག
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "floating-point"
-msgstr ""
+msgstr "གཡེང་ཚེག"
 
 #: ../fdroidserver/metadata.py
 msgid "force errors to be warnings, or ignore"
@@ -1622,30 +1661,32 @@ msgstr "སྐྱོན་ཤོར་བ་ལ་ཉེན་བརྡ་ངེ
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ignored explicit argument %r"
-msgstr ""
+msgstr "དངོས་སུ་རྩོད་པ་པ་ལ་ཡ་ལན་མེད། %r 1"
 
 #: ../fdroidserver/index.py
 msgid "index-v1 must have a signature, use `fdroid signindex` to create it!"
 msgstr ""
+"index-v1 ངེས་པར་དུ་མིང་རྟགས་དགོས། བེད་སྤྱོད་`fdroid "
+"signindex`འདི་བཟོས་པ་རེད།!"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "integer"
-msgstr ""
+msgstr "གོང་བུ།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "invalid %(type)s value: %(value)r"
-msgstr ""
+msgstr "ཁུངས་ལྡན་མིན་པ་ %(type)s 1 value: %(value)r 2"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "invalid choice: %(value)r (choose from %(choices)s)"
-msgstr ""
+msgstr "ཁུངས་ལྡན་མིན་པའི་གདམ་ཀ: %(value)r 1  (དེ་ནས་གདམ་ཀ་%(choices)s 2)"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "invalid conflict_resolution value: %r"
-msgstr ""
+msgstr "ཁུངས་ལྡན་མིན་པའི་རྙོག་ཕྲ།_resolution value: %r 1"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1653,106 +1694,109 @@ msgid ""
 "invalid option string %(option)r: must start with a character "
 "%(prefix_chars)r"
 msgstr ""
+"ཁུངས་ལྡན་མིན་པའི་ཚིག་སྒྲུབ་གདམ་ཀ། %(option)r 1: ཁྱད་ཆོས་དང་མཉམ་དུ་འགོ་བཙུགས། "
+"%(prefix_chars)r 2"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid ""
 "local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\""
-msgstr ""
+msgstr "local_copy_dir  \"fdroid\"གིས་མཇུག་སྐྱོང་མིན་འདུག་ : \"{path}1\""
 
 #: ../fdroidserver/server.py
 msgid "local_copy_dir must be an absolute path!"
-msgstr ""
+msgstr "local_copy_dir ནི་ངེས་པར་དུ་མཐའ་མའི་འགྲོ་ལམ་དེ་ཆགས་ཡོད།!"
 
 #: ../fdroidserver/server.py
 msgid "local_copy_dir must be directory, not a file!"
-msgstr ""
+msgstr "local_copy_dir ངེས་པར་ཕྱོགས་དེབ་ཡིན་དགོས། ཡིག་ཆ་མ་རེད།!"
 
 #: ../fdroidserver/index.py
 #, python-format
 msgid "mirror '%s' does not end with 'fdroid'!"
-msgstr ""
+msgstr "མེ་ལོང་། '%s 1'  'fdroid'དང་མཉམ་དུ་མཇུག་སྐྱོང་མི་ཐུབ།!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "mutually exclusive arguments must be optional"
-msgstr ""
+msgstr "ནང་ཕན་ཚུན་རྩོད་པ་དེ་གདམ་ཀ་ཅན་ངེས་པར་དུ་བཞག་དགོས་།"
 
 #: ../fdroidserver/signatures.py
 msgid "no APK supplied"
-msgstr ""
+msgstr "APK མཁོ་སྤྲོད་མིན་འདུག"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "གདམ་ཀ་དེ་འདྲ་མིན་འདུག: %s1"
 
 #: ../fdroid
-#, fuzzy
 msgid "no version info found!"
 msgstr "ཆ་རྒྱུས་མེད་པའི་དམིགས་བསལ་ཞིག་རྙེད་སོང་།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "not allowed with argument %s"
-msgstr ""
+msgstr "རྩོད་པ་དང་མཉམ་དུ་ཆོག་མཆན་མེད། %s 1"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "one of the arguments %s is required"
-msgstr ""
+msgstr "རྩོད་པ་གཅིག་དགོས་ཀྱི་ཡོད། %s 1"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "only accepts strings, lists, and tuples"
-msgstr ""
+msgstr "ཚིག་སྒྲུབ་དང་ཐོ་གཞུང་། ཡིག་ཚགས་ཁོ་ན་ངོས་ལེན་བྱེད།"
 
 #: ../fdroidserver/install.py
 #, python-format
 msgid "option %s: If you really want to install all the signed apps, use --all"
 msgstr ""
+"གདམ་ཀ %s 1: གལ་ཏེ་ཁྱེད་ཀྱིས་མིང་རྟགས་བཀོད་པའི་མཉེན་ཆས་རིགས་ཚང་མ་ངེས་པར་དུ་སྒྲ"
+"ིག་བཅུག་བྱེད་འདོད་ཡོད་། བེད་སྤྱོད་ --ཚང་མ།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "option %s: invalid %s value: %r"
-msgstr ""
+msgstr "གདམ་ཀ %s 1: ཁུངས་ལྡན་མིན་པ་ %s 2  རིན་ཐང་།: %r 3"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "option %s: invalid choice: %r (choose from %s)"
-msgstr ""
+msgstr "གདམ་ཀ %s 1: ཁུངས་ལྡན་མིན་པའི་གདམ་ཀ: %r 2 (choose from %s 3)"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "à½\96à½\80འà¼\8bà½\81ྱà½\96à¼\8b '%s 1'à½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\90ུà½\96à¼\8bà½\98à¼\8bསོà½\84à¼\8bà¼\8d\n"
+msgstr "à½\82à½\91à½\98à¼\8bà½\80à¼\8d '%s 1'à½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\90ུà½\96à¼\8bà½\98à¼\8bསོà½\84à¼\8bà¼\8d"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "གདམ་ཀ།  -%s 1 རྩོད་དགོས།"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "གདམ་ཀ། --%s 1གང་བྱས་ཀྱང་རྩོད་པ་མེད།"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s not a unique prefix"
-msgstr ""
+msgstr "གདམ་ཀ་--%s1 ཐུན་མོང་མ་ཡིན་པའི་སྔོན་འཇུག་མ་རེད།"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "à½\96à½\80འà¼\8bà½\81ྱà½\96à¼\8b '%s 1'à½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\90ུà½\96à¼\8bà½\98à¼\8bསོà½\84à¼\8bà¼\8d\n"
+msgstr "à½\82à½\91à½\98à¼\8bà½\80à¼\8d--%s 1 à½\84ོསà¼\8bའà½\9bིà½\93à¼\8bà½\90ུà½\96à¼\8bà½\98à¼\8bསོà½\84à¼\8bà¼\8d"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "གདམ་ཀ། --%s1 རྩོད་དགོས།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "གདམ་ཀ་ཅན་གྱི་རྩོད་པ།"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1761,7 +1805,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "གནས་སྟངས་ལ་གཞིགས་པའི་རྩོད་པ།"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1776,24 +1820,26 @@ msgid ""
 "refuse downloading via insecure http connection (use https or specify --no-"
 "https-check): {apkfilename}"
 msgstr ""
+"བེད་ཆགས་མེད་པའི་དྲྭ་རྒྱའི་ཁ་བྱང་http ནས་ཕབ་ལེན་བཀག།  (use https or specify "
+"--no-https-check): {apkfilename} 1"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "s3cmd sync indexes {path} to {url} and delete"
-msgstr ""
+msgstr "s3cmd sync ཕྱོགས་སྟོན།{path}1 དེ་ནས {url} 2 དང་སུབས།"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "ལས་རིམ་རྣམ་གཞག་གི་ཐོན་རིམ་ཨང་གྲངས་སྟོན་ནས་ཕྱིར་ཐོན་བྱེད།"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "རོགས་པ་བྱེད་པའི་འཕྲིན་ཐུང་སྟོན་ནས་ཕྱིར་ཐོན།"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
-msgstr ""
+msgstr "APK མིང་རྟགས་, ཡིག་ཆའི་འགྲོ་ལམ་མམ་ཡང་ན།  HTTPS URL."
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -1803,46 +1849,46 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "གཤམ་གྱི་རྩོད་པ་དེ་དག་དགོས།:%s1"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unexpected option string: %s"
-msgstr ""
+msgstr "རེ་བ་མེད་པའི་གདམ་ཀ་ཅན་གྱི་ཚིག་སྒྲུབ།:%s1"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unknown parser %(parser_name)r (choices: %(choices)s)"
-msgstr ""
+msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་ parser %(parser_name)r1 (གདམ་ཀ།: %(choices)s2)"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unrecognized arguments: %s"
-msgstr ""
+msgstr "ངོས་འཛིན་མི་ཐུབ་པའི་རྩོད་པ།: %s1"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "unsafe permissions on '{config_file}' (should be 0600)!"
-msgstr ""
+msgstr "'{config_file} 1' སྒང་གི་བདེ་ཆགས་མེད་པའི་ཆོག་མཆན་ (ངེས་པར་དུ། 0600)!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "བེད་སྤྱོད།: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
-msgstr "བེད་སྤྱོད་: ཨེཕ་རོཌ་ [-h|-རོགས་པ་|--ཐོན་རིམ་] <command> [<args>]"
+msgstr "བེད་སྤྱོད་: ཨེཕ་རོཌ་[-h|--help|--version] <command> [<args>]"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "using Apache libcloud to sync with {url}"
-msgstr ""
+msgstr "Apache libcloud བེད་སྤྱོད་བྱས་པའི་ཐོག་ {url}1དང་མཉམ་དུ་ཟླ་སྒྲིལ་གཏོང་།"
 
 #: ../fdroidserver/publish.py
 #, python-brace-format
 msgid "{0} app, {1} key aliases"
 msgid_plural "{0} apps, {1} key aliases"
-msgstr[0] ""
+msgstr[0] "{0} 1  མཉེས་ཆས་, {1} 2 key aliases"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -1859,6 +1905,8 @@ msgstr ""
 #, python-brace-format
 msgid "{appid}: Unknown extlib {path} in build '{versionName}'"
 msgstr ""
+"{appid}1: ངོས་འཛིན་མི་ཐུབ་པའི་ extlib {path}2  བཟོ་སྐྲུན་ནང་ལ "
+"'{versionName}3'"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -1878,19 +1926,12 @@ msgstr ""
 #: ../fdroidserver/build.py
 msgid "{} build failed"
 msgid_plural "{} builds failed"
-msgstr[0] ""
+msgstr[0] "{} བཟོ་སྐྲུན་བྱེད་མི་ཐུབ།"
 
 #: ../fdroidserver/build.py
 msgid "{} build succeeded"
 msgid_plural "{} builds succeeded"
-msgstr[0] ""
-
-#, fuzzy
-#~ msgid "Add PGP signatures for packages in repo using GnuPG"
-#~ msgstr "gpg གྱི་མིང་རྟགས་དེ་ཐུམ་སྒྲིལ་ནང་ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
-
-#~ msgid "Add gpg signatures for packages in repo"
-#~ msgstr "gpg གྱི་མིང་རྟགས་དེ་ཐུམ་སྒྲིལ་ནང་ཁ་སྣོན་བྱས་ནས་རེ་པོ་ནང་ལ་བཅུག"
+msgstr[0] "{} བཟོ་སྐྲུན་ལེགས་སྒྲུབ།"
 
 #~ msgid "Clean update - don't uses caches, reprocess all apks"
 #~ msgstr "གསར་བསྒྱུར་གཙང་བཟོ།-ཡིག་ཆ་གསོག་ཉར་བེད་སྤྱོ་མ་བྱེད། apks ཚང་མ་སྐྱར་སྤྱོད་བྱེད།"
@@ -1906,3 +1947,4 @@ msgstr[0] ""
 
 #~ msgid "app-id with optional versioncode in the form APPID[:VERCODE]"
 #~ msgstr "མཉེས་ཆས་ཁ་བྱང་དང་མཉམ་དུ་གདམ་ཀ་ཅན་གྱི་ཐོན་རིམ་ཨང་རྟགས།APPID[:VERCODE]"
+
index 65caf180c2032f4639e84c8a3a1659dc246d6eb9..f2964ac40f8600086f2d5cb5e63b7006128957c9 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-07-16 20:06+0000\n"
-"Last-Translator: Claus Rüdinger <Mail-an-CR@web.de>\n"
-"Language-Team: German <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/de/>\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:39+0100\n"
+"Last-Translator: Tobias Bannert <tobannert@gmail.com>\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 2.16-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -62,21 +61,21 @@ msgstr[1] ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: Fehler: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "%d Probleme gefunden"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [Optionen]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r ist nicht abrufbar"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -149,16 +148,15 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() nicht festgelegt"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
 msgstr ""
 
 #: ../fdroid
-#, fuzzy
 msgid "Add PGP signatures using GnuPG for packages in repo"
-msgstr "GPG-Signaturen für Programmpakete in der Paketquelle hinzufügen"
+msgstr "GnuPG PGP-Signaturen für Programmpakete in der Paketquelle hinzufügen"
 
 #: ../fdroid
 msgid "Add a new application from its source code"
@@ -202,17 +200,17 @@ msgstr ""
 
 #: ../fdroidserver/common.py
 msgid "Android SDK not found!"
-msgstr ""
+msgstr "Android-SDK nicht gefunden!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' does not exist!"
-msgstr ""
+msgstr "Android-SDK-Pfad »{path}« nicht vorhanden!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' is not a directory!"
-msgstr ""
+msgstr "Android-SDK-Pfad »{path}« ist kein Verzeichnis!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -311,7 +309,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Category '%s' is not valid"
-msgstr ""
+msgstr "Kategorie »%s« ist nicht gültig"
 
 #: ../fdroid
 msgid "Check for updates to applications"
@@ -337,10 +335,9 @@ msgid "Clean up all containers and then exit"
 msgstr "Alle Container bereinigen und danach beenden"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Clean update - don't uses caches, reprocess all APKs"
 msgstr ""
-"Sauber - ohne Verwendung der Zwischenspeicher - aktualisieren, alle APKs "
+"Sauber aktualisieren - ohne Verwendung der Zwischenspeicher, alle APKs "
 "wiederaufbereiten"
 
 #: ../fdroidserver/import.py
@@ -457,7 +454,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Description of length {length} is over the {limit} char limit"
-msgstr ""
+msgstr "Beschreibung der Länge {length} ist über dem {limit}-Zeichen Limit"
 
 #: ../fdroidserver/init.py
 msgid "Do not prompt for Android SDK path, just fail"
@@ -551,9 +548,8 @@ msgid "Failed resizing {path}: {error}"
 msgstr ""
 
 #: ../fdroidserver/publish.py
-#, fuzzy
 msgid "Failed to align application"
-msgstr "Alle verfügbaren Anwendungen erstellen"
+msgstr "Anwendung konnte nicht angepasst werden"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -793,9 +789,8 @@ msgid ""
 msgstr ""
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "Keystore for signing key:\t"
-msgstr "Pfad zum Schlüsselspeicher für den Repository-Signierschlüssel"
+msgstr "Schlüsselspeicher für den Signierschlüssel:\t"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
@@ -945,7 +940,7 @@ msgstr "Nur Apps mit automatischen Aktualisierungen verarbeiten"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Optionen"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -965,10 +960,9 @@ msgid "Password required with username"
 msgstr ""
 
 #: ../fdroidserver/import.py
-#, fuzzy
 msgid "Path to main Android project subdirectory, if not in root."
 msgstr ""
-"Pfad zum zentralen Androidprojekt-Unterverzeichnis, wenn es nicht im "
+"Pfad zum Unterverzeichnis des Android-Hauptprojekts, wenn es nicht im "
 "Stammverzeichnis ist."
 
 msgid "Path to main android project subdirectory, if not in root."
@@ -991,9 +985,8 @@ msgid "Path to the keystore for the repo signing key"
 msgstr "Pfad zum Schlüsselspeicher für den Repository-Signierschlüssel"
 
 #: ../fdroidserver/dscanner.py
-#, fuzzy
 msgid "Prepare Drozer to run a scan"
-msgstr "Drozer auf einen Scan vorbereiten"
+msgstr "Drozer auf einen Suchlauf vorbereiten"
 
 msgid "Prepare drozer to run a scan"
 msgstr "Drozer auf einen Scan vorbereiten"
@@ -1048,9 +1041,9 @@ msgid "Push the log to this git remote repository"
 msgstr "Anmeldung an diesem Git-Repository durchführen"
 
 #: ../fdroidserver/server.py
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Pushing binary transparency log to {url}"
-msgstr "Binäres Transparency-Log einer URL aktualisieren"
+msgstr "Binäres Transparenz-Log nach {url} pushen"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -1085,11 +1078,12 @@ msgid "Reading {apkfilename} from cache"
 msgstr ""
 
 #: ../fdroidserver/stats.py
-#, fuzzy
 msgid ""
 "Recalculate aggregate stats - use when changes have been made that would "
 "invalidate old cached data."
-msgstr "Sammelstatistik neu berechnen - nach Änderungen anwenden "
+msgstr ""
+"Sammelstatistik neu berechnen - nach Änderungen anwenden, die alte "
+"zwischengespeicherte Daten entwerten würden."
 
 #: ../fdroidserver/common.py
 msgid "Removing specified files"
@@ -1142,9 +1136,8 @@ msgid "Rewriting '{appid}' to '{path}'"
 msgstr ""
 
 #: ../fdroidserver/lint.py
-#, fuzzy
 msgid "Run rewritemeta to fix formatting"
-msgstr "In ein spezielles Format umschreiben: "
+msgstr "Metadaten neu schreiben, um Formatierungen zu korrigieren"
 
 #: ../fdroidserver/server.py
 msgid "Running first pass with MD5 checking disabled"
@@ -1169,7 +1162,6 @@ msgid "Set up an app build for a nightly build repo"
 msgstr ""
 
 #: ../fdroidserver/build.py
-#, fuzzy
 msgid "Setup an emulator, install the APK on it and perform a Drozer scan"
 msgstr ""
 "Einen Emulator einrichten, die APK installieren und mit ihm eine "
@@ -1231,11 +1223,9 @@ msgstr ""
 "wird"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Specify editor to use in interactive mode. Default "
 msgstr ""
 "Editor festlegen, der im interaktiven Modus verwendet werden soll. Standard "
-"%s"
 
 #, c-format
 msgid "Specify editor to use in interactive mode. Default %s"
@@ -1288,9 +1278,8 @@ msgstr ""
 "Basis-Adresse zur Anmeldung am Repository (Standard: https://f-droid.org)"
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "The only commands currently supported are 'init' and 'update'"
-msgstr "Ausführungsbefehl, entweder 'init' oder 'update'"
+msgstr "Derzeit werden nur die Befehle „init” und „update” unterstützt"
 
 #: ../fdroidserver/index.py
 msgid "The repository's fingerprint does not match."
@@ -1451,12 +1440,12 @@ msgstr "Wiki aktualisieren"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Verwendung"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Verwendung: %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1471,7 +1460,6 @@ msgid "Use build server"
 msgstr "Build-Server verwenden"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Use date from APK instead of current time for newly added APKs"
 msgstr "APK-Datum statt der aktuellen Zeit für neu hinzugefügte APKs verwenden"
 
@@ -1507,9 +1495,8 @@ msgid "X.509 'Distiguished Name' used when generating keys"
 msgstr "X.509 'Angesehener Name' wenn Schlüssel generiert werden"
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "X.509 'Distinguished Name' used when generating keys"
-msgstr "X.509 'Angesehener Name' wenn Schlüssel generiert werden"
+msgstr "X.509 'Distinguished Name' zum Erzeugen von Schlüsseln"
 
 #: ../fdroidserver/common.py
 msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:"
@@ -1528,7 +1515,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "Mehrdeutige Option: %(option)s könnte übereinstimmen mit %(matches)s"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
@@ -1536,12 +1523,10 @@ msgid "ambiguous option: %s (%s?)"
 msgstr ""
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
-#, fuzzy
 msgid "applicationId in the form APPID"
 msgstr "App-ID in der Form APPID"
 
 #: ../fdroidserver/checkupdates.py
-#, fuzzy
 msgid "applicationId to check for updates"
 msgstr "App-ID, um auf Aktualisierungen zu prüfen"
 
@@ -1549,7 +1534,6 @@ msgstr "App-ID, um auf Aktualisierungen zu prüfen"
 #: ../fdroidserver/verify.py ../fdroidserver/publish.py
 #: ../fdroidserver/dscanner.py ../fdroidserver/build.py
 #: ../fdroidserver/scanner.py ../fdroidserver/install.py
-#, fuzzy
 msgid "applicationId with optional versionCode in the form APPID[:VERCODE]"
 msgstr "App-ID mit optionalem Versionscode in der Form APPID[:VERCODE]"
 
@@ -1565,7 +1549,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "»%s« kann nicht geöffnet werden: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1715,9 +1699,8 @@ msgid "no such option: %s"
 msgstr ""
 
 #: ../fdroid
-#, fuzzy
 msgid "no version info found!"
-msgstr "Unbekannter Fehler aufgetreten!"
+msgstr "Keine Versionsinformationen gefunden!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1749,14 +1732,14 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "Befehl '%s' nicht erkannt.\n"
+msgstr "Option -%s nicht erkannt"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "Option -%s erfordert Argument"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
@@ -1769,9 +1752,9 @@ msgid "option --%s not a unique prefix"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "Befehl '%s' nicht erkannt.\n"
+msgstr "Option --%s nicht erkannt"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
@@ -1780,7 +1763,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "optionale Argumente"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1812,12 +1795,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "Versionsnummer der Anwendung anzeigen und beenden"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "diese Hilfemeldung anzeigen und beenden"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1855,7 +1838,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "Verwendung: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index fd8d2385d52e934de3e31a17ee57de6ccaf803a5..91028dd92f45b72a35217414fdf3db67ffbc2e6e 100644 (file)
@@ -5,7 +5,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
 "PO-Revision-Date: 2017-07-03 15:20+0000\n"
index 774a1b2aff32e82e043675507b1a77bbd36af021..ea99ed8ff3feb5d54f3ba963885c19d4cb3d7f22 100644 (file)
@@ -5,7 +5,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
 "PO-Revision-Date: 2017-10-01 01:48+0000\n"
index c49643c5921952b2f651ea615e30e403e15eef19..3c5391c466a67c0a017e17a03f597849d8cc3e4d 100644 (file)
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2017-11-27 12:40+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: fa\n"
index 0506b3317dca62c4543e2a865a92a764b9d4a533..51841ef838d00e649a5c69b63d3b1d8f410a8a1c 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-10-17 11:46+0000\n"
-"Last-Translator: xin <xin@riseup.net>\n"
-"Language-Team: French <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/fr/>\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:40+0100\n"
+"Last-Translator: Ldm Public <ldmpub@gmail.com>\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 2.17\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -62,21 +61,21 @@ msgstr[1] ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: erreur: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "%d problèmes trouvés"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [options]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
-#, python-format
+#, fuzzy, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r n'est pas appelable"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -86,23 +85,23 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "%s option does not take a value"
-msgstr ""
+msgstr "l'option %s ne prend pas de valeur"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
-msgstr ""
+msgstr "'keypass' non trouvé dans config.py !"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' non trouvé dans config.py !"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' non trouvé dans config.py !"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' non trouvé dans config.py !"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
@@ -123,7 +122,7 @@ msgstr ""
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "'{apkfilename}' is already installed on {dev}."
-msgstr ""
+msgstr "'{apkfilename}' est déjà installé sur '{dev}'."
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -131,11 +130,13 @@ msgid ""
 "'{field}' will be in random order! Use () or [] brackets if order is "
 "important!"
 msgstr ""
+"'{field}' sera ordonné aléatoirement ! Utilisez des parenthèses () ou des "
+"crochets [] si l'ordre est important !"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{path}' failed to execute!"
-msgstr ""
+msgstr "'{path}' n'a pas pu être exécuté !"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -149,7 +150,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() n'est pas défini"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
@@ -192,6 +193,11 @@ msgstr ""
 msgid "Also warn about formatting issues, like rewritemeta -l"
 msgstr ""
 
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android Build Tools path '{path}' does not exist!"
+msgstr "Le chemin '{path}' pour Android Build Tools n'existe pas !"
+
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK '{path}' does not have '{dirname}' installed!"
@@ -199,7 +205,7 @@ msgstr ""
 
 #: ../fdroidserver/common.py
 msgid "Android SDK not found!"
-msgstr ""
+msgstr "SDK Android introuvable !"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -230,7 +236,7 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Appending .git is not necessary"
-msgstr ""
+msgstr "Il n'est pas nécessaire d'ajouter .git"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -261,7 +267,6 @@ msgid "Build generated by `fdroid import` - remove disable line once ready"
 msgstr ""
 
 #: ../fdroidserver/build.py
-#, fuzzy
 msgid "Build only the latest version of each package"
 msgstr "Compiler uniquement la dernière version de chaque paquet"
 
@@ -304,7 +309,7 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Categories are not set"
-msgstr ""
+msgstr "Catégories non définies"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -347,7 +352,7 @@ msgstr ""
 #: ../fdroid
 #, c-format, python-format
 msgid "Command '%s' not recognised.\n"
-msgstr "La commande '%s 1' n'est pas reconnue.\n"
+msgstr "La commande '%s' n'est pas reconnue.\n"
 
 #: ../fdroidserver/checkupdates.py
 msgid "Commit changes"
@@ -370,12 +375,12 @@ msgstr ""
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version code"
-msgstr ""
+msgstr "Impossible de trouver la dernière version du code"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version name"
-msgstr ""
+msgstr "Impossible de trouver le nom de la dernière version"
 
 #: ../fdroidserver/import.py
 msgid "Couldn't find package ID"
@@ -400,7 +405,7 @@ msgstr ""
 
 #: ../fdroidserver/publish.py
 msgid "Creating log directory"
-msgstr ""
+msgstr "Création du répertoire des logs"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -418,7 +423,7 @@ msgstr ""
 #: ../fdroidserver/import.py ../fdroidserver/verify.py
 #: ../fdroidserver/publish.py
 msgid "Creating temporary directory"
-msgstr ""
+msgstr "Création du répertoire temporaire"
 
 #: ../fdroidserver/index.py
 msgid "Creating unsigned index in preparation for signing"
@@ -444,17 +449,21 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Description has a duplicate line"
-msgstr ""
+msgstr "Ligne dupliquée dans la description"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)"
 msgstr ""
+"La description contient une liste (%s) mais ce n'est ni une liste à puces (*)"
+" ni une liste numérotée (#)"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Description of length {length} is over the {limit} char limit"
 msgstr ""
+"La longueur de la description {length} dépasser la limite du nombre de "
+"caractères autorisés {limit}"
 
 #: ../fdroidserver/init.py
 msgid "Do not prompt for Android SDK path, just fail"
@@ -576,7 +585,7 @@ msgstr ""
 
 #: ../fdroidserver/publish.py
 msgid "Failed to sign application"
-msgstr ""
+msgstr "Erreur lors de la signature de l'application"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -588,7 +597,7 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
 #: ../fdroidserver/install.py
 msgid "Finished"
-msgstr ""
+msgstr "Terminé"
 
 #: ../fdroidserver/lint.py
 msgid "Flattr donation methods belong in the FlattrID flag"
@@ -622,6 +631,7 @@ msgstr "Créer les métadonnées de base manquantes"
 #: ../fdroidserver/index.py
 msgid "Found multiple signing certificates for repository."
 msgstr ""
+"Plusieurs certificats de signature ont étés trouvés pour le référentiel."
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -815,7 +825,7 @@ msgstr ""
 
 #: ../fdroidserver/gpgsign.py
 msgid "Missing output directory"
-msgstr ""
+msgstr "Répertoire de destination manquant"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -853,15 +863,15 @@ msgstr ""
 
 #: ../fdroidserver/import.py
 msgid "No information found."
-msgstr ""
+msgstr "Aucune information trouvée."
 
 #: ../fdroidserver/lint.py
 msgid "No need to specify that the app is Free Software"
-msgstr ""
+msgstr "Pas besoin de spécifier que l'application est un logiciel libre"
 
 #: ../fdroidserver/lint.py
 msgid "No need to specify that the app is for Android"
-msgstr ""
+msgstr "Pas besoin de spécifier que l'application est pour Android"
 
 #: ../fdroidserver/server.py
 msgid "No option set! Edit your config.py to set at least one of these:"
@@ -902,12 +912,12 @@ msgstr ""
 
 #: ../fdroidserver/signindex.py
 msgid "Nothing to do"
-msgstr ""
+msgstr "Rien à faire"
 
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "Nothing to do for {appid}."
-msgstr ""
+msgstr "Rien à faire pour {appid}."
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/update.py
@@ -929,9 +939,8 @@ msgid "Only PNG and JPEG are supported for graphics, found: {path}"
 msgstr ""
 
 #: ../fdroidserver/checkupdates.py
-#, fuzzy
 msgid "Only print differences with the Play Store"
-msgstr "Afficher seulement les différences avec le Google Play Store"
+msgstr "Afficher uniquement les différences avec le Play Store"
 
 #: ../fdroidserver/checkupdates.py
 msgid "Only process apps with auto-updates"
@@ -939,11 +948,11 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Options"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
-msgstr ""
+msgstr "Licence globale du projet."
 
 #: ../fdroidserver/dscanner.py
 msgid "Override path for repo APKs (default: ./repo)"
@@ -956,7 +965,7 @@ msgstr ""
 
 #: ../fdroidserver/common.py
 msgid "Password required with username"
-msgstr ""
+msgstr "Mot de passe requis avec nom d'utilisateur"
 
 #: ../fdroidserver/import.py
 msgid "Path to main Android project subdirectory, if not in root."
@@ -1022,7 +1031,6 @@ msgid "Produce human-readable index.xml"
 msgstr "Produire un fichier index.xml lisible par un humain"
 
 #: ../fdroidserver/import.py
-#, fuzzy
 msgid "Project URL to import from."
 msgstr "URL du projet à importer"
 
@@ -1031,9 +1039,8 @@ msgid "Punctuation should be avoided"
 msgstr ""
 
 #: ../fdroidserver/btlog.py
-#, fuzzy
 msgid "Push the log to this git remote repository"
-msgstr "Envoyer les logs dans ce dépôt distant"
+msgstr "Envoyer les logs dans ce dépôt git distant"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -1098,14 +1105,12 @@ msgid ""
 msgstr ""
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Resize all the icons exceeding the max pixel size and exit"
 msgstr ""
 "Redimensionner toutes les icônes excédant la taille maximale en pixels et "
 "quitter"
 
 #: ../fdroidserver/common.py
-#, fuzzy
 msgid "Restrict output to warnings and errors"
 msgstr "Restreindre les résultats aux avertissements et erreurs"
 
@@ -1114,7 +1119,6 @@ msgid "Rewrite all the metadata files"
 msgstr "Réécrire toutes les métadonnées"
 
 #: ../fdroidserver/rewritemeta.py
-#, fuzzy
 msgid "Rewrite to a specific format: "
 msgstr "Réécrire dans un format spécifique : "
 
@@ -1129,16 +1133,14 @@ msgid "Rewriting '{appid}' to '{path}'"
 msgstr ""
 
 #: ../fdroidserver/lint.py
-#, fuzzy
 msgid "Run rewritemeta to fix formatting"
-msgstr "Réécrire dans un format spécifique : "
+msgstr "Exécuter rewritemeta pour corriger le formatage"
 
 #: ../fdroidserver/server.py
 msgid "Running first pass with MD5 checking disabled"
 msgstr ""
 
 #: ../fdroidserver/dscanner.py
-#, fuzzy
 msgid "Scan only the latest version of each package"
 msgstr "Analyser seulement la dernière version de chaque paquet"
 
@@ -1209,11 +1211,10 @@ msgid "Specify an identity file to provide to SSH for rsyncing"
 msgstr ""
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Specify editor to use in interactive mode. Default "
-msgstr "Définir l'éditeur à utiliser en mode interactif. Par défaut %s"
+msgstr "Définir l'éditeur à utiliser en mode interactif. Par défaut "
 
-#, fuzzy, c-format
+#, c-format
 msgid "Specify editor to use in interactive mode. Default %s"
 msgstr "Définir l'éditeur à utiliser en mode interactif. Par défaut %s"
 
@@ -1258,9 +1259,8 @@ msgid "The base URL for the repo to log (default: https://f-droid.org)"
 msgstr "URL de base pour le dépôt du journal (par défaut: https://f-droid.org)"
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "The only commands currently supported are 'init' and 'update'"
-msgstr "Commande à exécuter, soit 'init' soit 'update'"
+msgstr "Les seules commandes disponibles actuellement sont 'init' et 'update'"
 
 #: ../fdroidserver/index.py
 msgid "The repository's fingerprint does not match."
@@ -1421,12 +1421,12 @@ msgstr "Mettre à jour le wiki"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Usage"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Usage : %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1441,16 +1441,14 @@ msgid "Use build server"
 msgstr ""
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Use date from APK instead of current time for newly added APKs"
 msgstr ""
-"Utiliser la date de l'APK à la place de la date actuelle pour les APKs "
+"Utiliser la date de l'APK plutôt que la date courante pour les APKs "
 "nouvellement ajoutés"
 
-#, fuzzy
 msgid "Use date from apk instead of current time for newly added apks"
 msgstr ""
-"Utiliser la date de l'APK à la place de la date actuelle pour les APKs "
+"Utiliser la date de l'APK plutôt que la date courante pour les APKs "
 "nouvellement ajoutés"
 
 #: ../fdroidserver/server.py
@@ -1500,12 +1498,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "option ambiguë : %(option)s peut correspondre à %(matches)s"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "option ambiguë : %s (%s?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
 msgid "applicationId in the form APPID"
@@ -1534,7 +1532,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "Impossible d'ouvrir %s : %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1555,9 +1553,8 @@ msgid "cloning {url}"
 msgstr ""
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "command to execute, either 'init' or 'update'"
-msgstr "Commande à exécuter, soit 'init' soit 'update'"
+msgstr "Commande à exécuter : 'init' ou 'update'"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "complex"
@@ -1683,12 +1680,11 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "option inexistante : %s"
 
 #: ../fdroid
-#, fuzzy
 msgid "no version info found!"
-msgstr "Exception inconnue détectée !"
+msgstr "aucun information de version n'a été trouvée !"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1720,19 +1716,19 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "La commande '%s 1' n'est pas reconnue.\n"
+msgstr "La commande '%s 1' n'est pas reconnue"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "L'option -%s requiert un argument"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "L'option %s ne doit pas avoir d'argument"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
@@ -1740,18 +1736,18 @@ msgid "option --%s not a unique prefix"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "La commande '%s 1' n'est pas reconnue.\n"
+msgstr "Option --%s non reconnue"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "L'option %s requiert un argument"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "arguments optionnels"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1760,7 +1756,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "arguments de position"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1783,12 +1779,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "afficher le numéro de version du programme et quitter"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "afficher ce message d'aide et quitter"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1802,12 +1798,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "les arguments suivants sont requis  %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unexpected option string: %s"
-msgstr ""
+msgstr "chaîne d'option inattendue : %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1817,7 +1813,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unrecognized arguments: %s"
-msgstr ""
+msgstr "arguments non reconnu : %s"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -1826,7 +1822,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "usage : "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index cef690e0ce96bf2ae7cf957c16a5e55628e75c97..33817b5ddf83e674361cff18526b7e68ed42987a 100644 (file)
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-07-12 15:24+0000\n"
+"PO-Revision-Date: 2017-11-27 12:40+0100\n"
 "Last-Translator: Roberto Albano De Rosa <robertoalbano@protonmail.com>\n"
 "Language-Team: Italian <https://hosted.weblate.org/projects/f-droid/"
 "fdroidserver/it/>\n"
index bf447f0c5683c1ae77b37005ebb9871ec66076e3..1019239fe5acf85cad1dd8c5e9bf9cf773c34415 100644 (file)
@@ -1,18 +1,23 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: Kabyle (F-Droid)\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-08-11 19:09+0100\n"
-"Last-Translator: Belkacem Mohammed <belkacem77@gmail.com>\n"
-"Language-Team: Kabyle <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/kab/>\n"
+"POT-Creation-Date: 2017-11-10 07:47+0200\n"
+"PO-Revision-Date: 2017-11-10 09:07+0000\n"
+"Last-Translator: Muḥend Belqasem <belkacem77@gmail.com>\n"
+"Language-Team: Kabyle "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/kab/>\n"
 "Language: kab\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Poedit 2.0.3\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -85,27 +90,27 @@ msgstr ""
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
-msgstr ""
+msgstr "'keypass' ulac-it di config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' ulac-it di config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' ulac-it di config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' ulac-it di config.py!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
-msgstr ""
+msgstr "'required' d taɣiret ur iṣeḥḥan ara i usideg"
 
 #: ../fdroidserver/common.py
 msgid "'sdk_path' not set in 'config.py'!"
-msgstr ""
+msgstr "'sdk_path' ur yettwasbadu ara 'config.py'!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -113,12 +118,12 @@ msgstr ""
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{aapt}' is too old, fdroid requires build-tools-23.0.0 or newer!"
-msgstr ""
+msgstr "'{aapt}' d aqbuṛ, fdroid yesra build-tools-23.0.0 neɣ amaynut!"
 
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "'{apkfilename}' is already installed on {dev}."
-msgstr ""
+msgstr "'{apkfilename}' yebded yakan ɣef {dev}."
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -126,11 +131,13 @@ msgid ""
 "'{field}' will be in random order! Use () or [] brackets if order is "
 "important!"
 msgstr ""
+"'{field}' ad yili s usmizzwer agacuran ! Seqdec () neɣ tuccar [] ma yella "
+"ilaq usmizzwer!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{path}' failed to execute!"
-msgstr ""
+msgstr "'{path}' ur izmir ara ad yettwaselkem!"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -140,11 +147,11 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "...checkupdate failed for {appid} : {error}"
-msgstr ""
+msgstr "...anadi n ileqman ur yeddi ara i {appid} : {error}"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() ur yettwasbadu ara"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
@@ -577,7 +584,7 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
 #: ../fdroidserver/install.py
 msgid "Finished"
-msgstr ""
+msgstr "Immed"
 
 #: ../fdroidserver/lint.py
 msgid "Flattr donation methods belong in the FlattrID flag"
@@ -693,7 +700,7 @@ msgstr ""
 #: ../fdroidserver/install.py
 #, python-format
 msgid "Installing %s..."
-msgstr ""
+msgstr "Asbeddi n %s..."
 
 #: ../fdroidserver/install.py
 #, python-brace-format
@@ -926,7 +933,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Iɣewwaṛen"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -1394,7 +1401,7 @@ msgstr "Leqqem awiki"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Aseqdec"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
@@ -1593,7 +1600,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "integer"
-msgstr ""
+msgstr "amḍan ummid"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1789,7 +1796,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "aqseqdac: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
diff --git a/locale/ko/LC_MESSAGES/fdroidserver.po b/locale/ko/LC_MESSAGES/fdroidserver.po
new file mode 100644 (file)
index 0000000..07d57f4
--- /dev/null
@@ -0,0 +1,1443 @@
+# SOME DESCRIPTIVE TITLE.
+# This file is put in the public domain.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+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: 2017-10-13 12:47+0000\n"
+"PO-Revision-Date: 2017-11-03 13:14+0000\n"
+"Last-Translator: Myeongjin Lee <aranet100@gmail.com>\n"
+"Language-Team: Korean "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/ko/>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.18-dev\n"
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "\"%s/\" has no matching metadata file!"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "%(option)s option requires %(number)d argument"
+msgid_plural "%(option)s option requires %(number)d arguments"
+msgstr[0] ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "%(prog)s: error: %(message)s\n"
+msgstr "%(prog)s: 오류: %(message)s\n"
+
+#: ../fdroidserver/scanner.py
+#, python-format
+msgid "%d problems found"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "%prog [options]"
+msgstr "%prog [옵션]"
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "%r is not callable"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "%s is not an accepted build field"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "%s option does not take a value"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "'keypass' not found in config.py!"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "'keystore' not found in config.py!"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "'keystorepass' not found in config.py!"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "'repo_keyalias' not found in config.py!"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "'required' is an invalid argument for positionals"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "'sdk_path' not set in 'config.py'!"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "'{aapt}' is too old, fdroid requires build-tools-23.0.0 or newer!"
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-brace-format
+msgid "'{apkfilename}' is already installed on {dev}."
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid ""
+"'{field}' will be in random order! Use () or [] brackets if order is "
+"important!"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "'{path}' failed to execute!"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+#, python-brace-format
+msgid "...checkupdate failed for {appid} : {error}"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid ".__call__() not defined"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "/issues is missing"
+msgstr ""
+
+msgid "Add PGP signatures for packages in repo using GnuPG"
+msgstr ""
+
+#: ../fdroid
+msgid "Add PGP signatures using GnuPG for packages in repo"
+msgstr ""
+
+#: ../fdroid
+msgid "Add a new application from its source code"
+msgstr "새 애플리케이션의 소스 코드로부터 그것을 추가합니다"
+
+msgid "Add gpg signatures for packages in repo"
+msgstr "저장소에서 패키지에 gpg 서명을 추가합니다"
+
+#: ../fdroidserver/init.py
+msgid "Alias of the repo signing key in the keystore"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid ""
+"Allows a different revision (or git branch) to be specified for the initial "
+"import"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Also warn about formatting issues, like rewritemeta -l"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android Build Tools path '{path}' does not exist!"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android SDK '{path}' does not have '{dirname}' installed!"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Android SDK not found!"
+msgstr "Android SDK를 찾을 수 없습니다!"
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android SDK path '{path}' does not exist!"
+msgstr "Android SDK 경로 '{path}' 존재하지 않습니다!"
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android SDK path '{path}' is not a directory!"
+msgstr "Android SDK 경로 '{path}' 디렉터리가 아닙니다!"
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "App is in '{repo}' but has a link to {url}"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Appending .git is not necessary"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Branch '{branch}' used as commit in build '{versionName}'"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Branch '{branch}' used as commit in srclib '{srclib}'"
+msgstr ""
+
+#: ../fdroid
+msgid "Build a package from source"
+msgstr "소스로부터 패키지를 빌드합니다"
+
+#: ../fdroidserver/build.py
+msgid "Build all applications available"
+msgstr "사용 가능한 모든 애플리케이션을 빌드합니다"
+
+#: ../fdroidserver/lint.py
+msgid "Build generated by `fdroid import` - remove disable line once ready"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Build only the latest version of each package"
+msgstr ""
+
+#: ../fdroidserver/init.py
+#, python-format
+msgid "Built repo based in \"%s\" with this config:"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Can't build due to {} error while scanning"
+msgid_plural "Can't build due to {} errors while scanning"
+msgstr[0] ""
+
+#: ../fdroidserver/rewritemeta.py
+msgid "Cannot use --list and --to at the same time"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Categories are not set"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Category '%s' is not valid"
+msgstr ""
+
+#: ../fdroid
+msgid "Check for updates to applications"
+msgstr "애플리케이션으로의 업데이트를 확인합니다"
+
+#: ../fdroidserver/dscanner.py
+msgid "Clean after all scans have finished"
+msgstr ""
+
+#: ../fdroidserver/dscanner.py
+msgid "Clean before the scans start and rebuild the container"
+msgstr ""
+
+#: ../fdroidserver/dscanner.py
+msgid "Clean up all containers and then exit"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Clean update - don't uses caches, reprocess all APKs"
+msgstr ""
+
+msgid "Clean update - don't uses caches, reprocess all apks"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Comma separated list of categories."
+msgstr ""
+
+#: ../fdroid
+#, c-format, python-format
+msgid "Command '%s' not recognised.\n"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+msgid "Commit changes"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Could not find '{command}' on your system"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Couldn't find latest version code"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Couldn't find latest version name"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Couldn't find package ID"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Create a repo signing key in a keystore"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Create skeleton metadata files that are missing"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Created new container \"{name}\""
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "Creating log directory"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Creating new S3 bucket: {url}"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "Creating output directory"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Creating signed index with this key (SHA256):"
+msgstr ""
+
+#: ../fdroidserver/import.py ../fdroidserver/verify.py
+#: ../fdroidserver/publish.py
+msgid "Creating temporary directory"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Creating unsigned index in preparation for signing"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Delete APKs and/or OBBs without metadata from the repo"
+msgstr "저장소에서 메타데이터 없이 APK 및/또는 OBB를 삭제합니다"
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Description '%s' is just the app's summary"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Description has a duplicate line"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Description of length {length} is over the {limit} char limit"
+msgstr ""
+
+#: ../fdroidserver/init.py
+msgid "Do not prompt for Android SDK path, just fail"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Don't create a source tarball, useful when testing a build"
+msgstr ""
+
+#: ../fdroidserver/stats.py
+msgid "Don't do anything logs-related"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid ""
+"Don't refresh the repository, useful when testing a build with no internet "
+"connection"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "Don't use rsync checksums"
+msgstr ""
+
+#: ../fdroidserver/stats.py
+msgid "Download logs we don't have"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Downloading the repository already failed once, not trying again."
+msgstr ""
+
+#: ../fdroidserver/verify.py
+#, python-brace-format
+msgid "Downloading {url} failed. {error}"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Duplicate link in '{field}': {url}"
+msgstr ""
+
+#: ../fdroid
+msgid "Dynamically scan APKs post build"
+msgstr ""
+
+#: ../fdroidserver/init.py
+#, python-format
+msgid ""
+"Enter the path to the Android SDK (%s) here:\n"
+"> "
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Error while getting repo address"
+msgstr ""
+
+#: ../fdroid
+msgid "Extract signatures from APKs"
+msgstr ""
+
+#: ../fdroidserver/signatures.py
+#, python-brace-format
+msgid "Failed fetching signatures for '{apkfilename}': {error}"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "Failed to align application"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Failed to create S3 bucket: {url}"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Failed to get APK manifest information"
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-brace-format
+msgid "Failed to install '{apkfilename}' on {dev}: {error}"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "Failed to sign application"
+msgstr ""
+
+#: ../fdroidserver/signatures.py
+#, python-brace-format
+msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'"
+msgstr ""
+
+#: ../fdroidserver/verify.py ../fdroidserver/stats.py ../fdroidserver/update.py
+#: ../fdroidserver/rewritemeta.py ../fdroidserver/build.py
+#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
+#: ../fdroidserver/install.py
+msgid "Finished"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Flattr donation methods belong in the FlattrID flag"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid ""
+"Force build of disabled apps, and carries on regardless of scan problems. "
+"Only allowed in test mode."
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Found invalid appids in arguments"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Found invalid versionCodes for some apps"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Found multiple signing certificates for repository."
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Found no signing certificates for repository."
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Found non-file at %s"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-format
+msgid "Git checkout of '%s' failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git clean failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git fetch failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git remote set-head failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git reset failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git submodule sync failed"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Git submodule update failed"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Ignoring package without metadata: "
+msgstr ""
+
+#: ../fdroidserver/rewritemeta.py
+#, python-brace-format
+msgid "Ignoring {ext} file at '{path}'"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Include APKs that are signed with disabled algorithms like MD5"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Initialising submodules"
+msgstr ""
+
+#: ../fdroidserver/install.py
+msgid "Install all signed applications available"
+msgstr ""
+
+#: ../fdroid
+msgid "Install built packages on devices"
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-format
+msgid "Installing %s..."
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-brace-format
+msgid "Installing '{apkfilename}' on {dev}..."
+msgstr ""
+
+#: ../fdroid
+msgid "Interact with the repo HTTP server"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Interactively ask about things that need updating."
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Invalid bulleted list"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid ""
+"Invalid license tag \"%s\"! Use only tags from https://spdx.org/license-list"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Invalid link - use [http://foo.bar Link title] or [http://foo.bar]"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-format
+msgid "Invalid name for published file: %s"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Invalid package name {0}"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "Java JDK not found! Install in standard location or set java_paths!"
+msgstr ""
+
+#: ../fdroidserver/signindex.py
+msgid ""
+"Java jarsigner not found! Install in standard location or set java_paths!"
+msgstr ""
+
+#: ../fdroidserver/init.py
+msgid "Keystore for signing key:\t"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid ""
+"Last used commit '{commit}' looks like a tag, but Update Check Mode is "
+"'{ucm}'"
+msgstr ""
+
+#: ../fdroidserver/rewritemeta.py
+msgid "List files that would be reformatted"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Make the build stop on exceptions"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "Malformed repository mirrors."
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "Malformed serverwebroot line:"
+msgstr ""
+
+#: ../fdroidserver/gpgsign.py
+msgid "Missing output directory"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Name '%s' is just the auto name - remove it"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "No 'config.py' found, using defaults."
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "No Android SDK found!"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "No android or kivy project could be found. Specify --subdir?"
+msgstr ""
+
+#: ../fdroidserver/install.py
+msgid "No attached devices found"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "No fingerprint in URL."
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "No git submodules available"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "No information found."
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "No need to specify that the app is Free Software"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "No need to specify that the app is for Android"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "No option set! Edit your config.py to set at least one of these:"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "No packages specified"
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-format
+msgid "No signed apk available for %s"
+msgstr ""
+
+#: ../fdroidserver/install.py
+msgid "No signed output directory - nothing to do"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-format
+msgid "No such package: %s"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "No such versionCode {versionCode} for app {appid}"
+msgstr ""
+
+#: ../fdroidserver/verify.py ../fdroidserver/publish.py
+msgid "No unsigned directory - nothing to do"
+msgstr ""
+
+#: ../fdroidserver/signindex.py
+msgid "Nothing to do"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+#, python-brace-format
+msgid "Nothing to do for {appid}."
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+msgid "Only print differences with the Play Store"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+msgid "Only process apps with auto-updates"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "Options"
+msgstr "옵션"
+
+#: ../fdroidserver/import.py
+msgid "Overall license of the project."
+msgstr ""
+
+#: ../fdroidserver/dscanner.py
+msgid "Override path for repo APKs (default: ./repo)"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Parsing manifest at '{path}'"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Password required with username"
+msgstr ""
+
+#: ../fdroidserver/import.py
+msgid "Path to main Android project subdirectory, if not in root."
+msgstr ""
+
+msgid "Path to main android project subdirectory, if not in root."
+msgstr ""
+
+#: ../fdroidserver/init.py
+msgid "Path to the Android SDK (sometimes set in ANDROID_HOME)"
+msgstr ""
+
+#: ../fdroidserver/btlog.py
+msgid "Path to the git repo to use as the log"
+msgstr ""
+
+#: ../fdroidserver/init.py
+msgid "Path to the keystore for the repo signing key"
+msgstr ""
+
+#: ../fdroidserver/dscanner.py
+msgid "Prepare Drozer to run a scan"
+msgstr ""
+
+msgid "Prepare drozer to run a scan"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Problem with xml at '{path}'"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+msgid "Process auto-updates"
+msgstr ""
+
+#: ../fdroidserver/publish.py ../fdroidserver/update.py
+#, python-brace-format
+msgid "Processing {apkfilename}"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
+#, python-brace-format
+msgid "Processing {appid}"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Produce human-readable index.xml"
+msgstr "사람이 읽을 수 있는 index.xml을 생산합니다"
+
+#: ../fdroidserver/import.py
+msgid "Project URL to import from."
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Punctuation should be avoided"
+msgstr ""
+
+#: ../fdroidserver/btlog.py
+msgid "Push the log to this git remote repository"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Pushing binary transparency log to {url}"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Pushing to {url}"
+msgstr ""
+
+#: ../fdroid
+msgid "Quickly start a new repository"
+msgstr "새 저장소를 빠르게 시작합니다"
+
+#: ../fdroid
+msgid "Read all the metadata files and exit"
+msgstr "모든 메타데이터 파일을 읽고 종료합니다"
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Reading '{config_file}'"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid ""
+"Reading packageName/versionCode/versionName failed, APK invalid: "
+"'{apkfilename}'"
+msgstr ""
+
+#: ../fdroidserver/stats.py
+msgid ""
+"Recalculate aggregate stats - use when changes have been made that would "
+"invalidate old cached data."
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Removing specified files"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Rename APK files that do not match package.name_123.apk"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Report on build data status"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid ""
+"Reset and create a brand new build server, even if the existing one appears "
+"to be ok."
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Resize all the icons exceeding the max pixel size and exit"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Restrict output to warnings and errors"
+msgstr ""
+
+#: ../fdroid
+msgid "Rewrite all the metadata files"
+msgstr "모든 메타데이터 파일을 다시 씁니다"
+
+#: ../fdroidserver/rewritemeta.py
+msgid "Rewrite to a specific format: "
+msgstr ""
+
+#: ../fdroidserver/rewritemeta.py
+#, python-brace-format
+msgid "Rewriting '{appid}'"
+msgstr ""
+
+#: ../fdroidserver/rewritemeta.py
+#, python-brace-format
+msgid "Rewriting '{appid}' to '{path}'"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Run rewritemeta to fix formatting"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "Running first pass with MD5 checking disabled"
+msgstr ""
+
+#: ../fdroidserver/dscanner.py
+msgid "Scan only the latest version of each package"
+msgstr ""
+
+#: ../fdroid
+msgid "Scan the source code of a package"
+msgstr "패키지의 소스 코드를 스캔합니다"
+
+#: ../fdroidserver/build.py
+msgid "Scanner found {} problem"
+msgid_plural "Scanner found {} problems"
+msgstr[0] ""
+
+#: ../fdroidserver/build.py
+msgid "Setup an emulator, install the APK on it and perform a Drozer scan"
+msgstr ""
+
+msgid "Setup an emulator, install the apk on it and perform a drozer scan"
+msgstr ""
+
+#: ../fdroid
+msgid "Sign and place packages in the repo"
+msgstr ""
+
+#: ../fdroid
+msgid "Sign indexes created using update --nosign"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Skip scanning the source code for binaries and other problems"
+msgstr ""
+
+#: ../fdroidserver/update.py
+#, python-brace-format
+msgid "Skipping '{apkfilename}' with invalid signature!"
+msgstr ""
+
+#: ../fdroidserver/scanner.py
+#, python-brace-format
+msgid "Skipping {appid}: disabled"
+msgstr ""
+
+#: ../fdroidserver/scanner.py
+#, python-brace-format
+msgid "Skipping {appid}: no builds specified"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "Specify a local folder to sync the repo to"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "Specify an identity file to provide to SSH for rsyncing"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Specify editor to use in interactive mode. Default "
+msgstr ""
+
+#, c-format
+msgid "Specify editor to use in interactive mode. Default %s"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Specify that we're running on the build server"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Spew out even more information than normal"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Summary '%s' is just the app's name"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Summary of length {length} is over the {limit} char limit"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid ""
+"Test mode - put output in the tmp directory only, and always build, even if "
+"the output already exists."
+msgstr ""
+
+#: ../fdroidserver/btlog.py
+msgid "The base URL for the repo to log (default: https://f-droid.org)"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "The only commands currently supported are 'init' and 'update'"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "The repository's fingerprint does not match."
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "The repository's index could not be verified."
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "The root dir for local_copy_dir \"{path}\" does not exist!"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+msgid "There is a keyalias collision - publishing halted"
+msgstr ""
+
+#: ../fdroidserver/import.py
+#, python-format
+msgid "This repo already has local metadata: %s"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid ""
+"To use awsbucket, awssecretkey and awsaccesskeyid must also be set in config."
+"py!"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "UCM is set but it looks like checkupdates hasn't been run yet"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "URL shorteners should not be used"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "URL {url} in Description: {error}"
+msgstr ""
+
+#: ../fdroid
+msgid "Unknown exception found!"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "Unknown file '{filename}' in build '{versionName}'"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "Unknown version of aapt, might cause problems: "
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Unlinkified link - use [http://foo.bar Link title] or [http://foo.bar]"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Unnecessary leading space"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Unnecessary trailing space"
+msgstr ""
+
+#: ../fdroidserver/rewritemeta.py
+#, python-brace-format
+msgid "Unsupported metadata format, use: --to [{supported}]"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Unused extlib at %s"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+#, python-format
+msgid "Unused file at %s"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Update Check Name is set to the known app id - it can be removed"
+msgstr ""
+
+#: ../fdroid
+msgid "Update repo information for new packages"
+msgstr "새 패키지를 위한 저장소 정보를 업데이트합니다"
+
+#: ../fdroid
+msgid "Update the binary transparency log for a URL"
+msgstr ""
+
+#: ../fdroid
+msgid "Update the stats of the repo"
+msgstr ""
+
+#: ../fdroidserver/update.py ../fdroidserver/build.py
+msgid "Update the wiki"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "Usage"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "Usage: %s\n"
+msgstr ""
+
+#: ../fdroidserver/lint.py
+msgid "Use /HEAD instead of /master to point at a file in the default branch"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "Use build server"
+msgstr ""
+
+#: ../fdroidserver/update.py
+msgid "Use date from APK instead of current time for newly added APKs"
+msgstr ""
+
+msgid "Use date from apk instead of current time for newly added apks"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "Using s3cmd to sync with: {url}"
+msgstr ""
+
+#: ../fdroid
+msgid "Valid commands are:"
+msgstr "올바른 명령은:"
+
+#: ../fdroid
+msgid "Verify the integrity of downloaded packages"
+msgstr ""
+
+#: ../fdroid
+msgid "Warn about possible metadata errors"
+msgstr "가능한 메타데이터 오류에 대해 경고합니다"
+
+#: ../fdroidserver/update.py
+msgid ""
+"When configured for signed indexes, create only unsigned indexes at this "
+"stage"
+msgstr ""
+
+msgid "X.509 'Distiguished Name' used when generating keys"
+msgstr ""
+
+#: ../fdroidserver/init.py
+msgid "X.509 'Distinguished Name' used when generating keys"
+msgstr ""
+
+#: ../fdroidserver/common.py
+msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "ambiguous option: %(option)s could match %(matches)s"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "ambiguous option: %s (%s?)"
+msgstr ""
+
+msgid "app-id in the form APPID"
+msgstr ""
+
+msgid "app-id to check for updates"
+msgstr ""
+
+msgid "app-id with optional versionCode in the form APPID[:VERCODE]"
+msgstr ""
+
+msgid "app-id with optional versioncode in the form APPID[:VERCODE]"
+msgstr ""
+
+#: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
+msgid "applicationId in the form APPID"
+msgstr ""
+
+#: ../fdroidserver/checkupdates.py
+msgid "applicationId to check for updates"
+msgstr ""
+
+#: ../fdroidserver/verify.py ../fdroidserver/publish.py
+#: ../fdroidserver/dscanner.py ../fdroidserver/build.py
+#: ../fdroidserver/scanner.py ../fdroidserver/install.py
+msgid "applicationId with optional versionCode in the form APPID[:VERCODE]"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "argument \"-\" with mode %r"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "can't open '%s': %s"
+msgstr "'%s'을(를) 열 수 없습니다: %s"
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "cannot have multiple subparser arguments"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "cannot merge actions - two groups are named %r"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "command to execute, either 'init' or 'update'"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "complex"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "conflicting option string: %s"
+msgid_plural "conflicting option strings: %s"
+msgstr[0] ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "dest= is required for options like %r"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "expected %s argument"
+msgid_plural "expected %s arguments"
+msgstr[0] ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "expected at least one argument"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "expected at most one argument"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "expected one argument"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "floating-point"
+msgstr ""
+
+#: ../fdroidserver/metadata.py
+msgid "force errors to be warnings, or ignore"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "ignored explicit argument %r"
+msgstr ""
+
+#: ../fdroidserver/index.py
+msgid "index-v1 must have a signature, use `fdroid signindex` to create it!"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "integer"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "invalid %(type)s value: %(value)r"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "invalid choice: %(value)r (choose from %(choices)s)"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "invalid conflict_resolution value: %r"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid ""
+"invalid option string %(option)r: must start with a character "
+"%(prefix_chars)r"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid ""
+"local_copy_dir does not end with \"fdroid\", perhaps you meant: \"{path}\""
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "local_copy_dir must be an absolute path!"
+msgstr ""
+
+#: ../fdroidserver/server.py
+msgid "local_copy_dir must be directory, not a file!"
+msgstr ""
+
+#: ../fdroidserver/index.py
+#, python-format
+msgid "mirror '%s' does not end with 'fdroid'!"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "mutually exclusive arguments must be optional"
+msgstr ""
+
+#: ../fdroidserver/signatures.py
+msgid "no APK supplied"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "no such option: %s"
+msgstr "이러한 옵션이 없습니다: %s"
+
+#: ../fdroid
+msgid "no version info found!"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "not allowed with argument %s"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "one of the arguments %s is required"
+msgstr ""
+
+#: ../fdroidserver/index.py ../fdroidserver/common.py
+msgid "only accepts strings, lists, and tuples"
+msgstr ""
+
+#: ../fdroidserver/install.py
+#, python-format
+msgid "option %s: If you really want to install all the signed apps, use --all"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "option %s: invalid %s value: %r"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, python-format
+msgid "option %s: invalid choice: %r (choose from %s)"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option -%s not recognized"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option -%s requires argument"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option --%s must not have an argument"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option --%s not a unique prefix"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option --%s not recognized"
+msgstr ""
+
+#: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
+#, python-format
+msgid "option --%s requires argument"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "optional arguments"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "positional arguments"
+msgstr ""
+
+#: ../fdroidserver/signatures.py
+#, python-brace-format
+msgid ""
+"refuse downloading via insecure http connection (use https or specify --no-"
+"https-check): {apkfilename}"
+msgstr ""
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "s3cmd sync indexes {path} to {url} and delete"
+msgstr ""
+
+#: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+msgid "show program's version number and exit"
+msgstr "프로그램의 버전 번호를 보여주고 종료합니다"
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
+#: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
+msgid "show this help message and exit"
+msgstr "이 도움말 메시지를 보여주고 종료합니다"
+
+#: ../fdroidserver/signatures.py
+msgid "signed APK, either a file-path or HTTPS URL."
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "the following arguments are required: %s"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "unexpected option string: %s"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "unknown parser %(parser_name)r (choices: %(choices)s)"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, python-format
+msgid "unrecognized arguments: %s"
+msgstr ""
+
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "unsafe permissions on '{config_file}' (should be 0600)!"
+msgstr ""
+
+#: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+msgid "usage: "
+msgstr "사용법: "
+
+#: ../fdroid
+msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
+msgstr "사용법: fdroid [-h|--help|--version] <명령> [<인수>]"
+
+#: ../fdroidserver/server.py
+#, python-brace-format
+msgid "using Apache libcloud to sync with {url}"
+msgstr ""
+
+#: ../fdroidserver/publish.py
+#, python-brace-format
+msgid "{0} app, {1} key aliases"
+msgid_plural "{0} apps, {1} key aliases"
+msgstr[0] ""
+
+#: ../fdroidserver/lint.py
+#, python-brace-format
+msgid "{appid}: Unknown extlib {path} in build '{versionName}'"
+msgstr ""
+
+#: ../fdroidserver/build.py
+msgid "{} build failed"
+msgid_plural "{} builds failed"
+msgstr[0] ""
+
+#: ../fdroidserver/build.py
+msgid "{} build succeeded"
+msgid_plural "{} builds succeeded"
+msgstr[0] ""
index ac6b9b45380b371f6fd0fbffe7eafe6103932395..bc03424f1c1111bd6f4788ed0e17834e0a561ae1 100644 (file)
@@ -1,6 +1,5 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
@@ -8,10 +7,10 @@ msgstr ""
 "Project-Id-Version: fdroidserver 0.8-74-ga380b9f\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-10-17 14:20+0000\n"
+"PO-Revision-Date: 2017-11-27 12:40+0100\n"
 "Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
-"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/nb_NO/>\n"
+"Language-Team: Norwegian Bokmål "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/nb_NO/>\n"
 "Language: nb_NO\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -62,7 +61,7 @@ msgstr[1] ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: feil: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
@@ -71,12 +70,12 @@ msgstr "%d problemer funnet"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [valg]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r kan ikke kalles"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -109,9 +108,8 @@ msgid "'required' is an invalid argument for positionals"
 msgstr ""
 
 #: ../fdroidserver/common.py
-#, fuzzy
 msgid "'sdk_path' not set in 'config.py'!"
-msgstr "'keypass' ble ikke funnet i config.py!"
+msgstr "'sdk_path' ble ikke funnet i config.py!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -149,8 +147,9 @@ msgid "...checkupdate failed for {appid} : {error}"
 msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
+#, fuzzy
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() udefinert"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
@@ -936,7 +935,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Valg"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -1300,8 +1299,9 @@ msgid "Unexpected text on same line as {field} in {linedesc}"
 msgstr ""
 
 #: ../fdroid
+#, fuzzy
 msgid "Unknown exception found!"
-msgstr ""
+msgstr "Ukjent unntak møtt!"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
 #: ../fdroidserver/lint.py
@@ -1404,12 +1404,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Bruk"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Bruk: %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1693,14 +1693,14 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "Kommandoen \"%s\" gjenkjennes ikke.\n"
+msgstr "Kommandoen \"-%s\" gjenkjennes ikke"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "valg -%s krever et argument"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
@@ -1713,9 +1713,9 @@ msgid "option --%s not a unique prefix"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "Kommandoen \"%s\" gjenkjennes ikke.\n"
+msgstr "Kommandoen \"--%s\" gjenkjennes ikke"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
@@ -1724,7 +1724,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "valgfrie argumenter"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1756,12 +1756,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "vis programmets versjonsnummer og avslutt"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "vis denne hjelpemeldingen og avslutt"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1799,11 +1799,11 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "bruk: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
-msgstr ""
+msgstr "bruk: fdroid [-h|--help|--version] <kommando> [<argumenter>]"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
index 9d1af44bfaaf9d6c14561f076dbef384ffb2f4b9..62fa04fd7fafbbc78f1db33f5b5244f5636c8fb0 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-09-02 13:48+0000\n"
-"Last-Translator: Edgar Moraes Diniz <edgar.diniz@posteo.net>\n"
-"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/f-"
-"droid/fdroidserver/pt_BR/>\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:41+0100\n"
+"Last-Translator: Guilherme Peev dos Santos <guilherme.peev@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/pt_BR/>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -35,7 +34,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "\"%s/\" has no matching metadata file!"
-msgstr ""
+msgstr "\"%s/\" não tem arquivo de metadados correspondente!"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -56,37 +55,37 @@ msgstr ""
 #, python-format
 msgid "%(option)s option requires %(number)d argument"
 msgid_plural "%(option)s option requires %(number)d arguments"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "opção %(option)s necessita %(number)d argumento"
+msgstr[1] "opção %(option)s necessita %(number)d argumentos"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: erro: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "%d problemas encontrados"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [opções]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r não é chamável"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "%s is not an accepted build field"
-msgstr ""
+msgstr "%s não é um campo criado aceito"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "%s option does not take a value"
-msgstr ""
+msgstr "opção %s não leva um valor"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
@@ -94,19 +93,19 @@ msgstr ""
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' não encontrada em config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' não encontrada em config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' não encontrada em config.py!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
-msgstr ""
+msgstr "'required' é um argumento inválido para posicionadores"
 
 #: ../fdroidserver/common.py
 msgid "'sdk_path' not set in 'config.py'!"
@@ -149,7 +148,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__ligação__() não definida"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
@@ -944,7 +943,7 @@ msgstr "Processar apenas aplicativos com atualizações automáticas"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Opções"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -1433,12 +1432,12 @@ msgstr "Atualizar a wiki"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Uso"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Uso: %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1514,12 +1513,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "opção ambígua: %(option)s poderia corresponder %(matches)s"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "opção ambígua: %s (%s?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
 #, fuzzy
@@ -1552,7 +1551,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "não dá pra abrir '%s': %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1699,7 +1698,7 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "não tem tal opção: %s"
 
 #: ../fdroid
 #, fuzzy
@@ -1743,17 +1742,17 @@ msgstr "Comando '%s' não é reconhecido\n"
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "Opção -%s necessita argumento"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "opção --%s não pode ter argumento"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s not a unique prefix"
-msgstr ""
+msgstr "opção --%s não é prefixo único"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, fuzzy, python-format
@@ -1763,11 +1762,11 @@ msgstr "Comando '%s' não é reconhecido\n"
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "opção --%s necessita argumento"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "argumentos opcionais"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1776,7 +1775,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "argumentos posicionais"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1799,12 +1798,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "mostrar versão do programa e sair"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "mostrar esta mensagem de ajuda e sair"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1818,12 +1817,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "os seguintes argumentos são necessários: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unexpected option string: %s"
-msgstr ""
+msgstr "opção de cadeia de texto inesperada: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1833,16 +1832,16 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unrecognized arguments: %s"
-msgstr ""
+msgstr "argumentos não reconhecidos: %s"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "unsafe permissions on '{config_file}' (should be 0600)!"
-msgstr ""
+msgstr "permissões inseguras em '{config_file}' (deveria ser 0600)!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "uso: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index f63e9cf4de84785c8f8af5456eec913a6bebe439..17131bc587659bb012d5e5dfdc2cbb17708c5b55 100644 (file)
@@ -3,12 +3,13 @@
 # This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
+#, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"PO-Revision-Date: 2017-11-27 12:41+0100\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: pt_PT\n"
index e641bd42466df184fe30633233513915734a0d20..55c8ed59b83da6857543085ec2cc02161c35ce47 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-06-23 14:47+0000\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:41+0100\n"
 "Last-Translator: monolifed <monolifed@gmail.com>\n"
-"Language-Team: Turkish <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/tr/>\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 2.15-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -62,7 +61,7 @@ msgstr[1] ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: hata: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
@@ -71,46 +70,46 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [options]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r çağrılabilir değil"
 
 #: ../fdroidserver/lint.py
-#, python-format
+#, fuzzy, python-format
 msgid "%s is not an accepted build field"
-msgstr ""
+msgstr "%s kabul edilen bir inşa alanı değil"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "%s option does not take a value"
-msgstr ""
+msgstr "%s seçeneği bir değer almaz"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
-msgstr ""
+msgstr "'keypass' config.py içinde bulunamadı!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' config.py içinde bulunamadı!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' config.py içinde bulunamadı!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' config.py içinde bulunamadı!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
-msgstr ""
+msgstr "'required' positionals için geçersiz bir argüman"
 
 #: ../fdroidserver/common.py
 msgid "'sdk_path' not set in 'config.py'!"
-msgstr ""
+msgstr "'sdk_path' 'config.py' içinde ayarlı değil!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -119,11 +118,12 @@ msgstr ""
 #, python-brace-format
 msgid "'{aapt}' is too old, fdroid requires build-tools-23.0.0 or newer!"
 msgstr ""
+"'{aapt}' çok eski, fdroid build-tools-23.0.0 veya daha yenisini gerektirir!"
 
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "'{apkfilename}' is already installed on {dev}."
-msgstr ""
+msgstr "'{apkfilename}' zaten {dev} üzerinde kurulu."
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -135,7 +135,7 @@ msgstr ""
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{path}' failed to execute!"
-msgstr ""
+msgstr "'{path}' yürütülemedi!"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -145,20 +145,19 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "...checkupdate failed for {appid} : {error}"
-msgstr ""
+msgstr ".. .checkupdate {appid} için başarısız oldu: {error}"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() tanımlı değil"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
-msgstr ""
+msgstr "/issues eksik"
 
 #: ../fdroid
-#, fuzzy
 msgid "Add PGP signatures using GnuPG for packages in repo"
-msgstr "Depodaki paketler için GPG imzaları ekle"
+msgstr "Depodaki paketler için GnuPG ile PGP imzaları ekle"
 
 #: ../fdroid
 msgid "Add a new application from its source code"
@@ -195,19 +194,24 @@ msgstr ""
 msgid "Also warn about formatting issues, like rewritemeta -l"
 msgstr "Ayrıca biçimlendirme sorunları hakkında uyar, rewritemeta -l gibi"
 
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android Build Tools path '{path}' does not exist!"
+msgstr "Android Build Tools konumu '{path}' yok!"
+
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK '{path}' does not have '{dirname}' installed!"
-msgstr ""
+msgstr "Android SDK '{path}' içinde '{dirname}' kurulu değil!"
 
 #: ../fdroidserver/common.py
 msgid "Android SDK not found!"
-msgstr ""
+msgstr "Android SDK bulunamadı!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' does not exist!"
-msgstr ""
+msgstr "Android SDK konumu '{path}' yok!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -253,11 +257,11 @@ msgstr ""
 
 #: ../fdroid
 msgid "Build a package from source"
-msgstr "Kaynaktan bir paket oluştur"
+msgstr "Kaynaktan bir paket inşa et"
 
 #: ../fdroidserver/build.py
 msgid "Build all applications available"
-msgstr "Kullanılabilir tüm uygulamaları oluştur"
+msgstr "Kullanılabilir tüm uygulamaları inşa et"
 
 #: ../fdroidserver/lint.py
 msgid "Build generated by `fdroid import` - remove disable line once ready"
@@ -265,7 +269,7 @@ msgstr ""
 
 #: ../fdroidserver/build.py
 msgid "Build only the latest version of each package"
-msgstr "Her paketin sadece son sürümünü oluştur"
+msgstr "Her paketin sadece son sürümünü inşa et"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -330,14 +334,13 @@ msgstr "Tüm taramalar bitince temizle"
 
 #: ../fdroidserver/dscanner.py
 msgid "Clean before the scans start and rebuild the container"
-msgstr "Taramalar başlamadan önce temizle ve konteyneri yeniden oluştur"
+msgstr "Taramalar başlamadan önce temizle ve konteyneri yeniden inşa et"
 
 #: ../fdroidserver/dscanner.py
 msgid "Clean up all containers and then exit"
 msgstr "Bütün konteynerleri temizle ve sonra çık"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Clean update - don't uses caches, reprocess all APKs"
 msgstr "Temiz güncelleme - önbellekleri kullanmaz, tüm APKları yeniden işler"
 
@@ -392,7 +395,7 @@ msgstr "Bir anahtar deposunda, depo imzalama anahtarı yaratır"
 
 #: ../fdroidserver/update.py
 msgid "Create skeleton metadata files that are missing"
-msgstr "Eksik olan iskelet meta veri dosyalarını yarat"
+msgstr "Eksik olan iskelet üst veri dosyalarını yarat"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -431,7 +434,7 @@ msgstr ""
 
 #: ../fdroidserver/update.py
 msgid "Delete APKs and/or OBBs without metadata from the repo"
-msgstr "Depodan meta verisi olmayan APKları ve/veya OBBleri sil"
+msgstr "Depodan üst verisi olmayan APKları ve/veya OBBleri sil"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -463,7 +466,7 @@ msgstr "Android SDK konumunu sorma, sadece başarısız ol"
 
 #: ../fdroidserver/build.py
 msgid "Don't create a source tarball, useful when testing a build"
-msgstr "Bir kaynak tar dosyası yaratma, bir oluşturma sınanırken yararlıdır"
+msgstr "Bir kaynak tar dosyası yaratma, bir inşa sınanırken yararlıdır"
 
 #: ../fdroidserver/stats.py
 msgid "Don't do anything logs-related"
@@ -474,8 +477,7 @@ msgid ""
 "Don't refresh the repository, useful when testing a build with no internet "
 "connection"
 msgstr ""
-"Depoyu yenileme, bir oluşturma internet bağlantısı olmadan sınanırken "
-"yararlıdır"
+"Depoyu yenileme, bir inşa internet bağlantısı olmadan sınanırken yararlıdır"
 
 #: ../fdroidserver/server.py ../fdroidserver/nightly.py
 msgid "Don't use rsync checksums"
@@ -507,7 +509,7 @@ msgstr ""
 
 #: ../fdroid
 msgid "Dynamically scan APKs post build"
-msgstr "Oluşturma sonrası APKları dinamik olarak tara"
+msgstr "İnşa sonrası APKları dinamik olarak tara"
 
 #: ../fdroidserver/nightly.py
 msgid "ERROR: unsupported CI type, patches welcome!"
@@ -549,9 +551,8 @@ msgid "Failed resizing {path}: {error}"
 msgstr ""
 
 #: ../fdroidserver/publish.py
-#, fuzzy
 msgid "Failed to align application"
-msgstr "Kullanılabilir tüm uygulamaları oluştur"
+msgstr "Uygulama hizalama başarısız oldu"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -602,8 +603,8 @@ msgid ""
 "Force build of disabled apps, and carries on regardless of scan problems. "
 "Only allowed in test mode."
 msgstr ""
-"Devre dışı uygulamaların oluşturulmasını zorunlu kıl, ve tarama problemi "
-"olsa bile devam et. Sadece sınama kipinde izin verilir."
+"Devre dışı uygulamaların inşasını zorunlu kıl, ve tarama problemi olsa bile "
+"devam et. Sadece sınama kipinde izin verilir."
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -704,7 +705,7 @@ msgstr "Kullanılabilir tüm imzalı uygulamaları kur"
 
 #: ../fdroid
 msgid "Install built packages on devices"
-msgstr "Oluşturulan paketleri aygıtlara kur"
+msgstr "İnşa edilen paketleri aygıtlara kur"
 
 #: ../fdroidserver/install.py
 #, python-format
@@ -791,9 +792,8 @@ msgid ""
 msgstr ""
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "Keystore for signing key:\t"
-msgstr "Depo imzalama anahtarı için anahtar deposunun konumu"
+msgstr "İmzalama için anahtar deposu:\t"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
@@ -808,7 +808,7 @@ msgstr "Yeniden biçimlendirilecek olan dosyaları listele"
 
 #: ../fdroidserver/build.py
 msgid "Make the build stop on exceptions"
-msgstr "Özel durumlarda oluşturmayı durdur"
+msgstr "Özel durumlarda inşayı durdur"
 
 #: ../fdroidserver/index.py
 msgid "Malformed repository mirrors."
@@ -943,7 +943,7 @@ msgstr "Yalnızca kendiliğinden güncellemesi olan uygulamaları işle"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Seçenekler"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -963,7 +963,6 @@ msgid "Password required with username"
 msgstr ""
 
 #: ../fdroidserver/import.py
-#, fuzzy
 msgid "Path to main Android project subdirectory, if not in root."
 msgstr "Kökte değilse, ana Android proje alt dizininin konumu."
 
@@ -983,7 +982,6 @@ msgid "Path to the keystore for the repo signing key"
 msgstr "Depo imzalama anahtarı için anahtar deposunun konumu"
 
 #: ../fdroidserver/dscanner.py
-#, fuzzy
 msgid "Prepare Drozer to run a scan"
 msgstr "Drozer'i bir tarama çalıştırmak için hazırla"
 
@@ -1040,9 +1038,9 @@ msgid "Push the log to this git remote repository"
 msgstr "Günlüğü bu git uzak deposuna it"
 
 #: ../fdroidserver/server.py
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Pushing binary transparency log to {url}"
-msgstr "Bir URL için çalıştırılabilir şeffaflık günlüğünü güncelle"
+msgstr "İkili şeffaflık günlüğü {url} konumuna gönderiliyor"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -1055,7 +1053,7 @@ msgstr "Hızlıca yeni bir depo başlat"
 
 #: ../fdroid
 msgid "Read all the metadata files and exit"
-msgstr "Tüm meta veri dosyalarını oku ve çık"
+msgstr "Tüm üst veri dosyalarını oku ve çık"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -1077,13 +1075,12 @@ msgid "Reading {apkfilename} from cache"
 msgstr ""
 
 #: ../fdroidserver/stats.py
-#, fuzzy
 msgid ""
 "Recalculate aggregate stats - use when changes have been made that would "
 "invalidate old cached data."
 msgstr ""
 "Toplam istatistikleri yeniden hesapla - eski önbelleklenen veriyi geçersiz "
-"kılacak değişiklikler yapıldığında kullanın "
+"kılacak değişiklikler yapıldığında kullan."
 
 #: ../fdroidserver/common.py
 msgid "Removing specified files"
@@ -1095,15 +1092,14 @@ msgstr "paket.ad_123.apk ile eşleşmeyen tüm APK dosyalarını yeniden adland
 
 #: ../fdroidserver/update.py
 msgid "Report on build data status"
-msgstr "Oluşturma veri durumu hakkında bildir"
+msgstr "İnşa veri durumunu bildir"
 
 #: ../fdroidserver/build.py
 msgid ""
 "Reset and create a brand new build server, even if the existing one appears "
 "to be ok."
 msgstr ""
-"Sıfırla ve yeni bir oluşturma sunucusu yarat, var olan iyi görünüyor olsa "
-"bile."
+"Sıfırla ve yeni bir inşa sunucusu yarat, var olan iyi görünüyor olsa bile."
 
 #: ../fdroidserver/update.py
 msgid "Resize all the icons exceeding the max pixel size and exit"
@@ -1115,7 +1111,7 @@ msgstr "Çıkışı uyarılara ve hatalara kısıtla"
 
 #: ../fdroid
 msgid "Rewrite all the metadata files"
-msgstr "Tüm meta veri dosyalarını yeniden yaz"
+msgstr "Tüm üst veri dosyalarını yeniden yaz"
 
 #: ../fdroidserver/rewritemeta.py
 msgid "Rewrite to a specific format: "
@@ -1132,9 +1128,8 @@ msgid "Rewriting '{appid}' to '{path}'"
 msgstr ""
 
 #: ../fdroidserver/lint.py
-#, fuzzy
 msgid "Run rewritemeta to fix formatting"
-msgstr "Belirli bir biçimde yeniden yaz: "
+msgstr "Biçimlemeyi düzeltmek için rewritemeta çalıştır"
 
 #: ../fdroidserver/server.py
 msgid "Running first pass with MD5 checking disabled"
@@ -1159,7 +1154,6 @@ msgid "Set up an app build for a nightly build repo"
 msgstr ""
 
 #: ../fdroidserver/build.py
-#, fuzzy
 msgid "Setup an emulator, install the APK on it and perform a Drozer scan"
 msgstr "Bir emülatör kur, APKyı ona kur ve bir Drozer taraması yap"
 
@@ -1213,9 +1207,8 @@ msgid "Specify an identity file to provide to SSH for rsyncing"
 msgstr "Rsync için SSH'a sağlanacak bir kimlik dosyası belirtin"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Specify editor to use in interactive mode. Default "
-msgstr "Etkileşimli kipte kullanılacak editörü belirtin. Öntanımlı %s"
+msgstr "Etkileşimli kipte kullanılacak editörü belirtin. Öntanımlı "
 
 #, c-format
 msgid "Specify editor to use in interactive mode. Default %s"
@@ -1228,7 +1221,7 @@ msgstr "Etkileşimli kipte kullanılacak editörü belirtin. Öntanımlı %s"
 
 #: ../fdroidserver/build.py
 msgid "Specify that we're running on the build server"
-msgstr "Oluşturma sunucusunda çalıştığımızı belirtin"
+msgstr "İnşa sunucusunda çalıştığımızı belirtin"
 
 #: ../fdroidserver/common.py
 msgid "Spew out even more information than normal"
@@ -1249,7 +1242,7 @@ msgid ""
 "Test mode - put output in the tmp directory only, and always build, even if "
 "the output already exists."
 msgstr ""
-"Sınama kipi - çıkışı sadece tmp dizinine koy, ve her zaman oluştur, çıkış "
+"Sınama kipi - çıkışı sadece tmp dizinine koy, ve her zaman inşa et, çıkış "
 "zaten var olsa bile."
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
@@ -1263,9 +1256,8 @@ msgid "The base URL for the repo to log (default: https://f-droid.org)"
 msgstr "Günlüklenecek depo için taban URLsi (öntanımlı: https://f-droid.org)"
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "The only commands currently supported are 'init' and 'update'"
-msgstr "çalıştırılacak komut, 'init' ya da 'update'"
+msgstr "Şu anda desteklenen komutlar sadece 'init' ve 'update'"
 
 #: ../fdroidserver/index.py
 msgid "The repository's fingerprint does not match."
@@ -1426,12 +1418,12 @@ msgstr "Viki'yi güncelle"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Kullanım"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Kullanım: %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1443,12 +1435,11 @@ msgstr ""
 
 #: ../fdroidserver/build.py
 msgid "Use build server"
-msgstr "Oluşturma sunucusu kullan"
+msgstr "İnşa sunucusu kullan"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Use date from APK instead of current time for newly added APKs"
-msgstr "Yeni eklenen APKlar için o anki zaman yerine APK tarihini kullan"
+msgstr "Yeni eklenen APKlar için o anki zaman yerine APK'daki tarihi kullan"
 
 msgid "Use date from apk instead of current time for newly added apks"
 msgstr "Yeni eklenen APKlar için o anki zaman yerine APK tarihini kullan"
@@ -1468,7 +1459,7 @@ msgstr "İndirilen paketlerin bütünlüğünü doğrula"
 
 #: ../fdroid
 msgid "Warn about possible metadata errors"
-msgstr "Olası meta veri hataları hakkında uyar"
+msgstr "Olası üst veri hataları hakkında uyar"
 
 #: ../fdroidserver/update.py
 msgid ""
@@ -1482,7 +1473,6 @@ msgid "X.509 'Distiguished Name' used when generating keys"
 msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır"
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "X.509 'Distinguished Name' used when generating keys"
 msgstr "Anahtarlar üretilirken X.509 'Distinguished Name' kullanılır"
 
@@ -1503,30 +1493,27 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "belirsiz şeçenek: %(option)s ile %(matches)s eşleşebilir"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "belirsiz şeçenek: %s (%s?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
-#, fuzzy
 msgid "applicationId in the form APPID"
-msgstr "APPID biçiminde app-id"
+msgstr "APPID biçiminde applicationId"
 
 #: ../fdroidserver/checkupdates.py
-#, fuzzy
 msgid "applicationId to check for updates"
-msgstr "Güncellemeleri denetlemek için app-id"
+msgstr "Güncellemeleri denetlemek için applicationId"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/verify.py ../fdroidserver/publish.py
 #: ../fdroidserver/dscanner.py ../fdroidserver/build.py
 #: ../fdroidserver/scanner.py ../fdroidserver/install.py
-#, fuzzy
 msgid "applicationId with optional versionCode in the form APPID[:VERCODE]"
-msgstr "APPID[:VERCODE] biçiminde app-id, isteğe bağlı versionCode ile"
+msgstr "APPID[:VERCODE] biçiminde applicationId, isteğe bağlı versionCode ile"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1540,7 +1527,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "'%s' açılamıyor: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1687,12 +1674,11 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "böyle bir şeçenek yok: %s"
 
 #: ../fdroid
-#, fuzzy
 msgid "no version info found!"
-msgstr "Bilinmeyen özel durum bulundu!"
+msgstr "Sürüm bilgisi bulunamadı!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1724,38 +1710,38 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "Komut '%s' tanınmıyor.\n"
+msgstr "seçenek -%s tanınmıyor"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "şeçenek -%s argüman gerektirir"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "--%s seçeneğinin argümanı olmamalı"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s not a unique prefix"
-msgstr ""
+msgstr "--%s seçeneği tekil ön ek değil"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "Komut '%s' tanınmıyor.\n"
+msgstr "seçenek --%s tanınmıyor"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "--%s seçeneği argüman gerektirir"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "isteğe bağlı argümanlar"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1764,7 +1750,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "konumsal argümanlar"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1787,12 +1773,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "programın sürüm numarasını göster ve çık"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "bu yardım yazısını göster ve çık"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1806,12 +1792,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "şu argümanlar gerekli: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unexpected option string: %s"
-msgstr ""
+msgstr "beklenmeyen seçenek satırı: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1821,7 +1807,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unrecognized arguments: %s"
-msgstr ""
+msgstr "tanınmayan argümanlar: %s"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
@@ -1830,7 +1816,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "kullanım: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index 76edd6af9b51d4e6f1d967f0dbbf10b8f778c318..7d8ac8968fbac54d66a6834e4c83fdeb9f720857 100644 (file)
@@ -1,24 +1,23 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-10-01 11:53+0000\n"
+"PO-Revision-Date: 2017-11-27 12:41+0100\n"
 "Last-Translator: Володимир Бриняк <bardvv@gmail.com>\n"
-"Language-Team: Ukrainian <https://hosted.weblate.org/projects/f-droid/"
-"fdroidserver/uk/>\n"
+"Language-Team: Ukrainian "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/uk/>\n"
 "Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
-"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
+"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 2.17\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -36,7 +35,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "\"%s/\" has no matching metadata file!"
-msgstr ""
+msgstr "\"%s/\" не має відповідного файлу метаданих!"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -57,62 +56,63 @@ msgstr ""
 #, python-format
 msgid "%(option)s option requires %(number)d argument"
 msgid_plural "%(option)s option requires %(number)d arguments"
-msgstr[0] ""
-msgstr[1] ""
-msgstr[2] ""
+msgstr[0] "%(option)s параметр вимагає %(number)d аргумент"
+msgstr[1] "%(option)s параметр вимагає %(number)d аргументи"
+msgstr[2] "%(option)s параметр вимагає %(number)d аргументів"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s: помилка: %(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "%d знайдено проблем"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
+#, fuzzy
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [options]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
-#, python-format
+#, fuzzy, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r не можна викликати"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "%s is not an accepted build field"
-msgstr ""
+msgstr "%s не є прийнятним полем для створення"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "%s option does not take a value"
-msgstr ""
+msgstr "%s параметр не приймає значення"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keypass' not found in config.py!"
-msgstr ""
+msgstr "'keypass' не знайдено в config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystore' not found in config.py!"
-msgstr ""
+msgstr "'keystore' не знайдено в config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'keystorepass' not found in config.py!"
-msgstr ""
+msgstr "'keystorepass' не знайдено в config.py!"
 
 #: ../fdroidserver/index.py ../fdroidserver/common.py
 msgid "'repo_keyalias' not found in config.py!"
-msgstr ""
+msgstr "'repo_keyalias' не знайдено в config.py!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "'required' is an invalid argument for positionals"
-msgstr ""
+msgstr "'required' недійсний аргумент для позицій"
 
 #: ../fdroidserver/common.py
 msgid "'sdk_path' not set in 'config.py'!"
-msgstr ""
+msgstr "'sdk_path' не встановлено в 'config.py'!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -121,23 +121,27 @@ msgstr ""
 #, python-brace-format
 msgid "'{aapt}' is too old, fdroid requires build-tools-23.0.0 or newer!"
 msgstr ""
+"'{aapt}' занадто старий, fdroid вимагає інструментів-створення 23.0.0 або "
+"новіший!"
 
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "'{apkfilename}' is already installed on {dev}."
-msgstr ""
+msgstr "'{apkfilename}' вже встановлено на {dev}."
 
 #: ../fdroidserver/common.py
-#, python-brace-format
+#, fuzzy, python-brace-format
 msgid ""
 "'{field}' will be in random order! Use () or [] brackets if order is "
 "important!"
 msgstr ""
+"'{field}' буде в довільному порядку! Використовуйте () або [] дужки у разі "
+"важливості аргумента!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "'{path}' failed to execute!"
-msgstr ""
+msgstr "'{path}' не вдалося виконати!"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -147,15 +151,15 @@ msgstr ""
 #: ../fdroidserver/checkupdates.py
 #, python-brace-format
 msgid "...checkupdate failed for {appid} : {error}"
-msgstr ""
+msgstr "... checkupdate не вдалося для {appid} : {error}"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() не визначено"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
-msgstr ""
+msgstr "/issues відсутній"
 
 #: ../fdroid
 #, fuzzy
@@ -195,24 +199,29 @@ msgstr "Дозволяє вказати іншу версію (або git гіл
 msgid "Also warn about formatting issues, like rewritemeta -l"
 msgstr "Також попередити про проблеми форматування, наприклад rewritemeta -l"
 
+#: ../fdroidserver/common.py
+#, python-brace-format
+msgid "Android Build Tools path '{path}' does not exist!"
+msgstr "Шлях '{path}' до інструментів створення Android не існує!"
+
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK '{path}' does not have '{dirname}' installed!"
-msgstr ""
+msgstr "Android SDK '{path}' '{dirname}' не встановлено!"
 
 #: ../fdroidserver/common.py
 msgid "Android SDK not found!"
-msgstr ""
+msgstr "Android SDK не знайдено!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' does not exist!"
-msgstr ""
+msgstr "Android SDK шлях '{path}' не існує!"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Android SDK path '{path}' is not a directory!"
-msgstr ""
+msgstr "Android SDK шлях '{path}' це не каталог!"
 
 #. Translators: "build-tools" is the file name of a package from
 #. Google, it is part of the Android SDK. So it probably shouldn't be
@@ -229,11 +238,11 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "App is in '{repo}' but has a link to {url}"
-msgstr ""
+msgstr "Застосунок '{repo}' але має посилання на {url}"
 
 #: ../fdroidserver/lint.py
 msgid "Appending .git is not necessary"
-msgstr ""
+msgstr "Додавання .git не потрібно"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -307,12 +316,12 @@ msgstr ""
 
 #: ../fdroidserver/lint.py
 msgid "Categories are not set"
-msgstr ""
+msgstr "Категорії не встановлено"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Category '%s' is not valid"
-msgstr ""
+msgstr "Категорія '%s' неприпустима"
 
 #: ../fdroid
 msgid "Check for updates to applications"
@@ -358,7 +367,7 @@ msgstr "Прийняти зміни"
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "Could not find '{command}' on your system"
-msgstr ""
+msgstr "Не вдалося знайти '{command}' у вашій системі"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -372,16 +381,16 @@ msgstr ""
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version code"
-msgstr ""
+msgstr "Не вдається знайти останню версію коду"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vname
 #: ../fdroidserver/import.py
 msgid "Couldn't find latest version name"
-msgstr ""
+msgstr "Не вдається знайти найновішу назву версії"
 
 #: ../fdroidserver/import.py
 msgid "Couldn't find package ID"
-msgstr ""
+msgstr "Не вдається знайти ідентифікатор пакета"
 
 #: ../fdroidserver/update.py
 msgid "Cowardily refusing to overwrite existing signing key setup!"
@@ -398,33 +407,33 @@ msgstr "Створення скелетів файлів метаданих, я
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Created new container \"{name}\""
-msgstr ""
+msgstr "Створено новий контейнер \"{name}\""
 
 #: ../fdroidserver/publish.py
 msgid "Creating log directory"
-msgstr ""
+msgstr "Створення каталогу журналу"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Creating new S3 bucket: {url}"
-msgstr ""
+msgstr "Створення нового блоку S3: {url}"
 
 #: ../fdroidserver/publish.py
 msgid "Creating output directory"
-msgstr ""
+msgstr "Створення вихідного каталогу"
 
 #: ../fdroidserver/index.py
 msgid "Creating signed index with this key (SHA256):"
-msgstr ""
+msgstr "Створення підписаного індексу за допомогою цієї клавіші (SHA256):"
 
 #: ../fdroidserver/import.py ../fdroidserver/verify.py
 #: ../fdroidserver/publish.py
 msgid "Creating temporary directory"
-msgstr ""
+msgstr "Створення тимчасового каталогу"
 
 #: ../fdroidserver/index.py
 msgid "Creating unsigned index in preparation for signing"
-msgstr ""
+msgstr "Створення непідписаного індексу під час підготовки до підписання"
 
 #: ../fdroidserver/nightly.py
 msgid "DEBUG_KEYSTORE is not set or the value is incomplete"
@@ -442,21 +451,22 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Description '%s' is just the app's summary"
-msgstr ""
+msgstr "Опис '%s' є лише резюме застосунку"
 
 #: ../fdroidserver/lint.py
 msgid "Description has a duplicate line"
-msgstr ""
+msgstr "Опис містить дублікат рядка"
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Description has a list (%s) but it isn't bulleted (*) nor numbered (#)"
 msgstr ""
+"Опис містить список (%s) але не маркірований (*) і не пронумерований (#)"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Description of length {length} is over the {limit} char limit"
-msgstr ""
+msgstr "Довжина опису {length} перевищує ліміт {limit}"
 
 #: ../fdroidserver/init.py
 msgid "Do not prompt for Android SDK path, just fail"
@@ -489,11 +499,12 @@ msgstr "Журналів завантаження у нас немає"
 #: ../fdroidserver/common.py
 msgid "Downloading the repository already failed once, not trying again."
 msgstr ""
+"Завантаження репозиторія вже не відбулося один раз, не намагайтеся знову."
 
 #: ../fdroidserver/verify.py
 #, python-brace-format
 msgid "Downloading {url} failed. {error}"
-msgstr ""
+msgstr "Завантаження {url} не вдалося. {error}"
 
 #: ../fdroidserver/metadata.py
 #, python-brace-format
@@ -504,7 +515,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-brace-format
 msgid "Duplicate link in '{field}': {url}"
-msgstr ""
+msgstr "Дублікат посилання в '{field}': {url}"
 
 #: ../fdroid
 msgid "Dynamically scan APKs post build"
@@ -525,19 +536,21 @@ msgid ""
 "Enter the path to the Android SDK (%s) here:\n"
 "> "
 msgstr ""
+"Введіть шлях до Android SDK (%s) тут:\n"
+"> "
 
 #: ../fdroidserver/import.py
 msgid "Error while getting repo address"
-msgstr ""
+msgstr "Помилка при отриманні адреси репозиторія"
 
 #: ../fdroid
 msgid "Extract signatures from APKs"
-msgstr ""
+msgstr "Екстракт підписів з APK"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
 msgid "Failed fetching signatures for '{apkfilename}': {error}"
-msgstr ""
+msgstr "Не вдалося завантажити підписи для '{apkfilename}': {error}"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -557,11 +570,11 @@ msgstr "Створіть всі доступні застосунки"
 #: ../fdroidserver/server.py
 #, python-brace-format
 msgid "Failed to create S3 bucket: {url}"
-msgstr ""
+msgstr "Не вдалося створити сигмент S3: {url}"
 
 #: ../fdroidserver/common.py
 msgid "Failed to get APK manifest information"
-msgstr ""
+msgstr "Не вдалося отримати інформацію про APK"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -576,27 +589,28 @@ msgstr ""
 #: ../fdroidserver/install.py
 #, python-brace-format
 msgid "Failed to install '{apkfilename}' on {dev}: {error}"
-msgstr ""
+msgstr "Не вдалося встановити '{apkfilename}' в {dev}: {error}"
 
 #: ../fdroidserver/publish.py
 msgid "Failed to sign application"
-msgstr ""
+msgstr "Не вдалося підписати застосунок"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
 msgid "Fetched signatures for '{apkfilename}' -> '{sigdir}'"
-msgstr ""
+msgstr "Отримані підписи для '{apkfilename}'  -> '{sigdir}'"
 
 #: ../fdroidserver/verify.py ../fdroidserver/stats.py ../fdroidserver/update.py
 #: ../fdroidserver/rewritemeta.py ../fdroidserver/build.py
 #: ../fdroidserver/checkupdates.py ../fdroidserver/scanner.py
 #: ../fdroidserver/install.py
 msgid "Finished"
-msgstr ""
+msgstr "Готово"
 
 #: ../fdroidserver/lint.py
+#, fuzzy
 msgid "Flattr donation methods belong in the FlattrID flag"
-msgstr ""
+msgstr "Методи донорства Flattr належать до прапора FlattrID"
 
 #: ../fdroidserver/build.py
 msgid ""
@@ -613,12 +627,12 @@ msgstr ""
 
 #: ../fdroidserver/common.py
 msgid "Found invalid appids in arguments"
-msgstr ""
+msgstr "Знайдено недійсні прикладні програми в аргументах"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/common.py
 msgid "Found invalid versionCodes for some apps"
-msgstr ""
+msgstr "Знайдено недійсні версії коду для деяких застосунків"
 
 #: ../fdroidserver/metadata.py
 #, fuzzy, python-brace-format
@@ -627,7 +641,7 @@ msgstr "Створення скелетів файлів метаданих, я
 
 #: ../fdroidserver/index.py
 msgid "Found multiple signing certificates for repository."
-msgstr ""
+msgstr "Знайдено кілька сертифікатів підписування для репозиторію."
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -636,12 +650,12 @@ msgstr ""
 
 #: ../fdroidserver/index.py
 msgid "Found no signing certificates for repository."
-msgstr ""
+msgstr "Не знайдено сертифікатів підписування для репозиторію."
 
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "Found non-file at %s"
-msgstr ""
+msgstr "Знайдено не файл у %s"
 
 #: ../fdroidserver/update.py
 #, fuzzy, python-brace-format
@@ -651,31 +665,33 @@ msgstr "Створення скелетів файлів метаданих, я
 #: ../fdroidserver/common.py
 #, python-format
 msgid "Git checkout of '%s' failed"
-msgstr ""
+msgstr "Помилка перевірки Git '%s'"
 
 #: ../fdroidserver/common.py
 msgid "Git clean failed"
-msgstr ""
+msgstr "Очистити Git невдалося"
 
 #: ../fdroidserver/common.py
 msgid "Git fetch failed"
-msgstr ""
+msgstr "Git вибірка не вдалася"
 
 #: ../fdroidserver/common.py
 msgid "Git remote set-head failed"
-msgstr ""
+msgstr "Не вдалося встановити пульт дистанційного керування Git"
 
 #: ../fdroidserver/common.py
 msgid "Git reset failed"
-msgstr ""
+msgstr "Скидання Git не вдалося"
 
 #: ../fdroidserver/common.py
+#, fuzzy
 msgid "Git submodule sync failed"
-msgstr ""
+msgstr "Не вдалося синхронізувати підмодуль Git"
 
 #: ../fdroidserver/common.py
+#, fuzzy
 msgid "Git submodule update failed"
-msgstr ""
+msgstr "Не вдалося оновити підмодуль Git"
 
 #: ../fdroidserver/index.py
 msgid "Ignoring package without metadata: "
@@ -944,7 +960,7 @@ msgstr "Обробляти застосунки лише за допомогою
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "Параметри"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -1438,12 +1454,12 @@ msgstr "Оновити вікі"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "Використання"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "Використання: %s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1517,12 +1533,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "неоднозначний параметр: %(option)s може відповідати %(matches)s"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "неоднозначний параметр: %s (%s?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
 #, fuzzy
@@ -1554,7 +1570,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "не може відкрити '%s': %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1703,7 +1719,7 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "такого параметру немає: %s"
 
 #: ../fdroid
 #, fuzzy
@@ -1740,38 +1756,38 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "Ð\9aоманда '%s' Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ð½Ð°.\n"
+msgstr "паÑ\80амеÑ\82Ñ\80  -%s Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ð½Ð¾"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "параметр -%s потрібен аргумент"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "параметр --%s не має аргументу"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s not a unique prefix"
-msgstr ""
+msgstr "параметр --%s не унікальний префікс"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "Ð\9aоманда '%s' Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ð½Ð°.\n"
+msgstr "паÑ\80амеÑ\82Ñ\80 --%s Ð½Ðµ Ð²Ð¸Ð·Ð½Ð°Ð½Ð¾"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "параметр --%s потрібен аргумент"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "необов'язкові аргументи"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1780,7 +1796,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "позиційні аргументи"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1803,12 +1819,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "показати номер версії програми та вийти"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "показати довідку та вийти"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1822,12 +1838,12 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "такі аргументи зобов'язані: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unexpected option string: %s"
-msgstr ""
+msgstr "неочікуваний рядок параметрів: %s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1837,16 +1853,16 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "unrecognized arguments: %s"
-msgstr ""
+msgstr "нерозпізнані аргументи: %s"
 
 #: ../fdroidserver/common.py
 #, python-brace-format
 msgid "unsafe permissions on '{config_file}' (should be 0600)!"
-msgstr ""
+msgstr "небезпечні дозволи на '{config_file}' (should be 0600)!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "використання: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index 5feb8888b70914ff657783de1129e1ce1f808f25..09be1238d3934484304ba4b366e1e8ba81a541c3 100644 (file)
@@ -5,7 +5,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
 "POT-Creation-Date: 2017-11-22 23:24+0100\n"
 "PO-Revision-Date: 2017-07-24 02:40+0000\n"
index 167a303afc7d6e3ef7ba04d2ab8258d75b5c76a4..ee3d2e9b14d3be4fc902295e786c7825fb3e6be2 100644 (file)
@@ -1,23 +1,22 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# Copyright (C) YEAR Free Software Foundation, Inc.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: fdroidserver 0.9\n"
 "Report-Msgid-Bugs-To: https://gitlab.com/fdroid/fdroidserver/issues\n"
-"POT-Creation-Date: 2017-11-22 23:24+0100\n"
-"PO-Revision-Date: 2017-08-31 02:59+0000\n"
+"POT-Creation-Date: 2017-10-17 17:48+0200\n"
+"PO-Revision-Date: 2017-11-27 12:41+0100\n"
 "Last-Translator: ezjerry liao <ezjerry@gmail.com>\n"
-"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/f-"
-"droid/fdroidserver/zh_Hant/>\n"
+"Language-Team: Chinese (Traditional) "
+"<https://hosted.weblate.org/projects/f-droid/fdroidserver/zh_Hant/>\n"
 "Language: zh_Hant\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Weblate 2.17-dev\n"
+"X-Generator: Weblate 2.18-dev\n"
 
 #: ../fdroidserver/nightly.py
 msgid ""
@@ -35,7 +34,7 @@ msgstr ""
 #: ../fdroidserver/lint.py
 #, python-format
 msgid "\"%s/\" has no matching metadata file!"
-msgstr ""
+msgstr "\"%s 1/\" 沒有符合的中介資料檔案!"
 
 #: ../fdroidserver/update.py
 #, python-brace-format
@@ -56,26 +55,26 @@ msgstr ""
 #, python-format
 msgid "%(option)s option requires %(number)d argument"
 msgid_plural "%(option)s option requires %(number)d arguments"
-msgstr[0] ""
+msgstr[0] "%(option)s 的選項需要 %(number)d 參數"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%(prog)s: error: %(message)s\n"
-msgstr ""
+msgstr "%(prog)s:錯誤:%(message)s\n"
 
 #: ../fdroidserver/scanner.py
 #, python-format
 msgid "%d problems found"
-msgstr ""
+msgstr "發現 %d 個問題"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "%prog [options]"
-msgstr ""
+msgstr "%prog [選項]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "%r is not callable"
-msgstr ""
+msgstr "%r 不可呼叫"
 
 #: ../fdroidserver/lint.py
 #, python-format
@@ -148,16 +147,15 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid ".__call__() not defined"
-msgstr ""
+msgstr ".__call__() 未定義"
 
 #: ../fdroidserver/lint.py
 msgid "/issues is missing"
 msgstr ""
 
 #: ../fdroid
-#, fuzzy
 msgid "Add PGP signatures using GnuPG for packages in repo"
-msgstr "在軟體倉庫中加入套件包的 gpg 簽署"
+msgstr "在軟體倉庫中加入使用 GnuPG 套件包的 gpg 簽署"
 
 #: ../fdroid
 msgid "Add a new application from its source code"
@@ -333,9 +331,8 @@ msgid "Clean up all containers and then exit"
 msgstr "清除所有容器,然後退出"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Clean update - don't uses caches, reprocess all APKs"
-msgstr "清除更新 - 不使用快取,重新處理全部的 apk"
+msgstr "清除更新 - 不使用快取,重新處理全部的 APK"
 
 #: ../fdroidserver/import.py
 msgid "Comma separated list of categories."
@@ -543,9 +540,8 @@ msgid "Failed resizing {path}: {error}"
 msgstr ""
 
 #: ../fdroidserver/publish.py
-#, fuzzy
 msgid "Failed to align application"
-msgstr "æ§\8b建æ\89\80æ\9c\89å\8f¯ç\94¨ç\9a\84æ\87\89ç\94¨ç¨\8bå¼\8f"
+msgstr "æ ¡æ­£æ\87\89ç\94¨ç¨\8bå¼\8f失æ\95\97"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -783,9 +779,8 @@ msgid ""
 msgstr ""
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "Keystore for signing key:\t"
-msgstr "給軟體倉庫簽署金鑰的金鑰庫路徑"
+msgstr "金鑰庫的簽署金鑰:\t"
 
 #: ../fdroidserver/lint.py
 #, python-brace-format
@@ -935,7 +930,7 @@ msgstr "只處理具有自動更新的應用程式"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Options"
-msgstr ""
+msgstr "選項"
 
 #: ../fdroidserver/import.py
 msgid "Overall license of the project."
@@ -955,7 +950,6 @@ msgid "Password required with username"
 msgstr ""
 
 #: ../fdroidserver/import.py
-#, fuzzy
 msgid "Path to main Android project subdirectory, if not in root."
 msgstr "如果不在根目錄下,路徑為 android 主要專案的子目錄。"
 
@@ -975,7 +969,6 @@ msgid "Path to the keystore for the repo signing key"
 msgstr "給軟體倉庫簽署金鑰的金鑰庫路徑"
 
 #: ../fdroidserver/dscanner.py
-#, fuzzy
 msgid "Prepare Drozer to run a scan"
 msgstr "準備 drozer 以執行掃描"
 
@@ -1032,9 +1025,9 @@ msgid "Push the log to this git remote repository"
 msgstr "將日誌推送到 git 遠端軟體倉庫"
 
 #: ../fdroidserver/server.py
-#, fuzzy, python-brace-format
+#, python-brace-format
 msgid "Pushing binary transparency log to {url}"
-msgstr "為網址更新二進制的透明日誌"
+msgstr "推二進制的透明日誌到{url}"
 
 #: ../fdroidserver/server.py
 #, python-brace-format
@@ -1069,11 +1062,10 @@ msgid "Reading {apkfilename} from cache"
 msgstr ""
 
 #: ../fdroidserver/stats.py
-#, fuzzy
 msgid ""
 "Recalculate aggregate stats - use when changes have been made that would "
 "invalidate old cached data."
-msgstr "重新計算集合統計 - 更改時使用 "
+msgstr "重新計算集合統計 - 使用時進行更改,這會使得舊的快取資料無效。"
 
 #: ../fdroidserver/common.py
 msgid "Removing specified files"
@@ -1120,9 +1112,8 @@ msgid "Rewriting '{appid}' to '{path}'"
 msgstr ""
 
 #: ../fdroidserver/lint.py
-#, fuzzy
 msgid "Run rewritemeta to fix formatting"
-msgstr "重寫為特定的格式: "
+msgstr "執行 rewritemeta 到固定格式"
 
 #: ../fdroidserver/server.py
 msgid "Running first pass with MD5 checking disabled"
@@ -1146,9 +1137,8 @@ msgid "Set up an app build for a nightly build repo"
 msgstr ""
 
 #: ../fdroidserver/build.py
-#, fuzzy
 msgid "Setup an emulator, install the APK on it and perform a Drozer scan"
-msgstr "設置一個模擬器,在其上安裝 apk 並執行 drozer 掃描"
+msgstr "設置一個模擬器,在其上安裝 APK 並執行 drozer 掃描"
 
 msgid "Setup an emulator, install the apk on it and perform a drozer scan"
 msgstr "設置一個模擬器,在其上安裝 apk 並執行 drozer 掃描"
@@ -1199,9 +1189,8 @@ msgid "Specify an identity file to provide to SSH for rsyncing"
 msgstr "指定一個身份檔案以提供給 SSH 進行 rsync"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Specify editor to use in interactive mode. Default "
-msgstr "æ\8c\87å®\9a編輯å\99¨å\9c¨äº\92å\8b\95模å¼\8f使ç\94¨ã\80\82é \90設 %s"
+msgstr "æ\8c\87å®\9a編輯å\99¨å\9c¨äº¤äº\92模å¼\8f使ç\94¨ã\80\82é \90設 "
 
 #, c-format
 msgid "Specify editor to use in interactive mode. Default %s"
@@ -1247,9 +1236,8 @@ msgid "The base URL for the repo to log (default: https://f-droid.org)"
 msgstr "軟體倉庫日誌的總部網址(預設:https://f-droid.org)"
 
 #: ../fdroidserver/server.py
-#, fuzzy
 msgid "The only commands currently supported are 'init' and 'update'"
-msgstr "命令執行,'init' 或 'update' 中的任何一個"
+msgstr "目前支援的命令僅 'init' 或 'update'"
 
 #: ../fdroidserver/index.py
 msgid "The repository's fingerprint does not match."
@@ -1410,12 +1398,12 @@ msgstr "更新維基百科"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "Usage"
-msgstr ""
+msgstr "使用"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "Usage: %s\n"
-msgstr ""
+msgstr "使用:%s\n"
 
 #: ../fdroidserver/lint.py
 msgid "Use /HEAD instead of /master to point at a file in the default branch"
@@ -1430,9 +1418,8 @@ msgid "Use build server"
 msgstr "使用構建伺服器"
 
 #: ../fdroidserver/update.py
-#, fuzzy
 msgid "Use date from APK instead of current time for newly added APKs"
-msgstr "新增的 apk 使用日期,來自 apk 而不是目前時間"
+msgstr "使用來自 APK 的日期,而不是新增之 APK 目前的時間"
 
 msgid "Use date from apk instead of current time for newly added apks"
 msgstr "新增的 apk 使用日期,來自 apk 而不是目前時間"
@@ -1464,9 +1451,8 @@ msgid "X.509 'Distiguished Name' used when generating keys"
 msgstr "產生金鑰時使用 X.509 '專有名稱'"
 
 #: ../fdroidserver/init.py
-#, fuzzy
 msgid "X.509 'Distinguished Name' used when generating keys"
-msgstr "產生金鑰時使用 X.509 '專有名稱'"
+msgstr "產生金鑰時使用 X.509 '專有名稱'"
 
 #: ../fdroidserver/common.py
 msgid "You can use ANDROID_HOME to set the path to your SDK, i.e.:"
@@ -1485,30 +1471,27 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "ambiguous option: %(option)s could match %(matches)s"
-msgstr ""
+msgstr "模糊選項:%(option)s 可以相配 %(matches)s"
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "ambiguous option: %s (%s?)"
-msgstr ""
+msgstr "不明確的選項:%s (%s?)"
 
 #: ../fdroidserver/lint.py ../fdroidserver/rewritemeta.py
-#, fuzzy
 msgid "applicationId in the form APPID"
-msgstr "app-id,格式為 APPID"
+msgstr "applicationId 格式為 APPID"
 
 #: ../fdroidserver/checkupdates.py
-#, fuzzy
 msgid "applicationId to check for updates"
-msgstr "以 app-id 檢查更新"
+msgstr "以 applicationId 檢查更新"
 
 #. Translators: https://developer.android.com/guide/topics/manifest/manifest-element.html#vcode
 #: ../fdroidserver/verify.py ../fdroidserver/publish.py
 #: ../fdroidserver/dscanner.py ../fdroidserver/build.py
 #: ../fdroidserver/scanner.py ../fdroidserver/install.py
-#, fuzzy
 msgid "applicationId with optional versionCode in the form APPID[:VERCODE]"
-msgstr "app-id 具有任選的 versionCode 在此格式為 APPID [:VERCODE]"
+msgstr "applicationId 具有任選的 versionCode 在此格式為 APPID [:VERCODE]"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1522,7 +1505,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "can't open '%s': %s"
-msgstr ""
+msgstr "無法打開 '%s':%s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "cannot have multiple subparser arguments"
@@ -1667,12 +1650,11 @@ msgstr ""
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 #, python-format
 msgid "no such option: %s"
-msgstr ""
+msgstr "沒這樣的選項:%s"
 
 #: ../fdroid
-#, fuzzy
 msgid "no version info found!"
-msgstr "發現未知的異常!"
+msgstr "未發現版本資訊!"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1704,38 +1686,38 @@ msgid "option %s: invalid choice: %r (choose from %s)"
 msgstr ""
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option -%s not recognized"
-msgstr "不能承認命令「%s」。\n"
+msgstr "不能識別選項 -%s"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option -%s requires argument"
-msgstr ""
+msgstr "選項 -%s 需要參數"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s must not have an argument"
-msgstr ""
+msgstr "選項 --%s 不能有參數"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s not a unique prefix"
-msgstr ""
+msgstr "選項 --%s 不是單獨的字首"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
-#, fuzzy, python-format
+#, python-format
 msgid "option --%s not recognized"
-msgstr "不能承認命令「%s」。\n"
+msgstr "不能識別選項 --%s"
 
 #: /usr/lib/python3.5/getopt.py /usr/lib/python3.6/getopt.py
 #, python-format
 msgid "option --%s requires argument"
-msgstr ""
+msgstr "選項 --%s 需要參數"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "optional arguments"
-msgstr ""
+msgstr "可選參數"
 
 #: ../fdroidserver/nightly.py
 #, python-brace-format
@@ -1744,7 +1726,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 msgid "positional arguments"
-msgstr ""
+msgstr "位置參數"
 
 #: ../fdroidserver/signatures.py
 #, python-brace-format
@@ -1767,12 +1749,12 @@ msgstr ""
 
 #: /usr/lib/python3.5/optparse.py /usr/lib/python3.6/optparse.py
 msgid "show program's version number and exit"
-msgstr ""
+msgstr "顯示程式的版本號碼並離開"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.5/optparse.py
 #: /usr/lib/python3.6/argparse.py /usr/lib/python3.6/optparse.py
 msgid "show this help message and exit"
-msgstr ""
+msgstr "顯示此幫助訊息並離開"
 
 #: ../fdroidserver/signatures.py
 msgid "signed APK, either a file-path or HTTPS URL."
@@ -1786,7 +1768,7 @@ msgstr ""
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
 msgid "the following arguments are required: %s"
-msgstr ""
+msgstr "需要下列參數:%s"
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py
 #, python-format
@@ -1810,7 +1792,7 @@ msgstr ""
 
 #: /usr/lib/python3.5/argparse.py /usr/lib/python3.6/argparse.py ../fdroid
 msgid "usage: "
-msgstr ""
+msgstr "使用: "
 
 #: ../fdroid
 msgid "usage: fdroid [-h|--help|--version] <command> [<args>]"
index ac0383deb2b6c295899dbb14521d8bd9ae0359fa..7ce2e62d1a4842a29fb3c2dae642a111e20de92d 100755 (executable)
@@ -352,6 +352,8 @@ cachefiles = [
      '0ecc2017802924cf81fffc0f51d342e3e69de6343da892ac9fa1cd79bc106024'),
     ('https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip',
      'f01788946733bf6294a36727b99366a18369904eb068a599dde8cca2c1d2ba3c'),
+    ('https://dl.google.com/android/repository/android-ndk-r16-linux-x86_64.zip',
+     'a8550b81771c67cc6ab7b479a6918d29aa78de3482901762b4f9e0132cd9672e'),
     ('https://download.qt.io/official_releases/qt/5.7/5.7.0/qt-opensource-linux-x64-android-5.7.0.run',
      'f7e55b7970e59bdaabb88cb7afc12e9061e933992bda2f076f52600358644586'),
 ]
index afaf13e21977e6e378afd59ed27c76c2c2c3df4d..76777df3d13a39b3de9b9605460de2f000a81df4 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,8 @@
 
+# uploading here requires Python 3.5.3+ or setuptools 27+,
+# use instead: twine upload dist/fdroidserver*.tar.gz*
 [aliases]
-release = register compile_catalog sdist upload --sign
+release = versioncheck register compile_catalog sdist upload --sign
 
 # All this below is for Babel config.  Ideally we would only use
 # Babel, but it is still missing some key features that gettext gives
index 03638db02a7c11d878eda6f72355ca95b8646e03..a382b254d86de5cea3b906b6df1e7545c479a662 100755 (executable)
--- a/setup.py
+++ b/setup.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python3
 
+from setuptools import Command
 from setuptools import setup
 import os
 import re
@@ -7,6 +8,26 @@ import shutil
 import sys
 
 
+class VersionCheckCommand(Command):
+    """Make sure git tag and version match before uploading"""
+    user_options = []
+
+    def initialize_options(self):
+        """Abstract method that is required to be overwritten"""
+
+    def finalize_options(self):
+        """Abstract method that is required to be overwritten"""
+
+    def run(self):
+        version = self.distribution.get_version()
+        version_git = subprocess.check_output(['git', 'describe', '--tags', '--always']).rstrip().decode('utf-8')
+        if version != version_git:
+            print('ERROR: Release version mismatch! setup.py (%s) does not match git (%s)'
+                  % (version, version_git))
+            sys.exit(1)
+        print('Upload using: twine upload dist/fdroidserver*.tar.gz*')
+
+
 def get_data_files():
     # workaround issue on OSX or --user installs, where sys.prefix is not an installable location
     if os.access(sys.prefix, os.W_OK | os.X_OK):
@@ -45,7 +66,7 @@ else:
     readme = ''
 
 setup(name='fdroidserver',
-      version='0.8',
+      version='0.9.1',
       description='F-Droid Server Tools',
       long_description=readme,
       author='The F-Droid Project',
@@ -56,6 +77,7 @@ setup(name='fdroidserver',
       scripts=['fdroid', 'fd-commit', 'makebuildserver'],
       data_files=get_data_files(),
       python_requires='>=3.4',
+      cmdclass={'versioncheck': VersionCheckCommand},
       install_requires=[
           'clint',
           'GitPython',
@@ -67,6 +89,7 @@ setup(name='fdroidserver',
           'pyasn1-modules',
           'python-vagrant',
           'PyYAML',
+          'qrcode',
           'ruamel.yaml >= 0.13',
           'requests >= 2.5.2, != 2.11.0, != 2.12.2, != 2.18.0',
           'docker-py >= 1.9, < 2.0',
index b595f3fab7dc32588fd5924aa730d90a9addf68c..c9ffe97c5bcc067e5176d3a094a281510c4786a9 100755 (executable)
@@ -3,6 +3,7 @@
 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
 
 import inspect
+import logging
 import optparse
 import os
 import re
@@ -46,22 +47,27 @@ class BuildTest(unittest.TestCase):
                 self.assertTrue(os.path.exists(path))
                 self.assertTrue(os.path.isfile(path))
 
+    def setUp(self):
+        logging.basicConfig(level=logging.DEBUG)
+        self.basedir = os.path.join(localmodule, 'tests')
+        self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
+        if not os.path.exists(self.tmpdir):
+            os.makedirs(self.tmpdir)
+        os.chdir(self.basedir)
+
     def test_force_gradle_build_tools(self):
-        testsbase = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
-        if not os.path.exists(testsbase):
-            os.makedirs(testsbase)
-        testsdir = tempfile.mkdtemp(prefix='test_adapt_gradle', dir=testsbase)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         shutil.copytree(os.path.join(os.path.dirname(__file__), 'source-files'),
-                        os.path.join(testsdir, 'source-files'))
+                        os.path.join(testdir, 'source-files'))
         teststring = 'FAKE_VERSION_FOR_TESTING'
-        fdroidserver.build.force_gradle_build_tools(testsdir, teststring)
+        fdroidserver.build.force_gradle_build_tools(testdir, teststring)
         pattern = re.compile(bytes("buildToolsVersion[\s=]+'%s'\s+" % teststring, 'utf8'))
         for p in ('source-files/fdroid/fdroidclient/build.gradle',
                   'source-files/Zillode/syncthing-silk/build.gradle',
                   'source-files/open-keychain/open-keychain/build.gradle',
                   'source-files/osmandapp/osmand/build.gradle',
                   'source-files/open-keychain/open-keychain/OpenKeychain/build.gradle'):
-            with open(os.path.join(testsdir, p), 'rb') as f:
+            with open(os.path.join(testdir, p), 'rb') as f:
                 filedata = f.read()
             self.assertIsNotNone(pattern.search(filedata))
 
index a5d52f75eccf6a77b4387b0cfa4796b92030bdf3..dfb4380a23e9317d0e8ff4fff9dbc9741c7300f1 100755 (executable)
@@ -96,8 +96,8 @@ class CommonTest(unittest.TestCase):
                 print('no build-tools found: ' + build_tools)
 
     def test_find_java_root_path(self):
-        tmptestsdir = tempfile.mkdtemp(prefix='test_find_java_root_path', dir=self.tmpdir)
-        os.chdir(tmptestsdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
+        os.chdir(testdir)
 
         all_pathlists = [
             ([  # Debian
@@ -170,11 +170,11 @@ class CommonTest(unittest.TestCase):
         testint = 99999999
         teststr = 'FAKE_STR_FOR_TESTING'
 
-        tmptestsdir = tempfile.mkdtemp(prefix='test_prepare_sources', dir=self.tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         shutil.copytree(os.path.join(self.basedir, 'source-files'),
-                        os.path.join(tmptestsdir, 'source-files'))
+                        os.path.join(testdir, 'source-files'))
 
-        testdir = os.path.join(tmptestsdir, 'source-files', 'fdroid', 'fdroidclient')
+        fdroidclient_testdir = os.path.join(testdir, 'source-files', 'fdroid', 'fdroidclient')
 
         config = dict()
         config['sdk_path'] = os.getenv('ANDROID_HOME')
@@ -201,13 +201,14 @@ class CommonTest(unittest.TestCase):
             def getsrclib(self):
                 return None
 
-        fdroidserver.common.prepare_source(FakeVcs(), app, build, testdir, testdir, testdir)
+        fdroidserver.common.prepare_source(FakeVcs(), app, build,
+                                           fdroidclient_testdir, fdroidclient_testdir, fdroidclient_testdir)
 
-        with open(os.path.join(testdir, 'build.gradle'), 'r') as f:
+        with open(os.path.join(fdroidclient_testdir, 'build.gradle'), 'r') as f:
             filedata = f.read()
         self.assertIsNotNone(re.search("\s+compileSdkVersion %s\s+" % testint, filedata))
 
-        with open(os.path.join(testdir, 'AndroidManifest.xml')) as f:
+        with open(os.path.join(fdroidclient_testdir, 'AndroidManifest.xml')) as f:
             filedata = f.read()
         self.assertIsNone(re.search('android:debuggable', filedata))
         self.assertIsNotNone(re.search('android:versionName="%s"' % build.versionName, filedata))
@@ -215,7 +216,7 @@ class CommonTest(unittest.TestCase):
 
     def test_prepare_sources_refresh(self):
         packageName = 'org.fdroid.ci.test.app'
-        testdir = tempfile.mkdtemp(prefix='test_prepare_sources_refresh', dir=self.tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         print('testdir', testdir)
         os.chdir(testdir)
         os.mkdir('build')
@@ -262,7 +263,7 @@ class CommonTest(unittest.TestCase):
         fdroidserver.signindex.config = config
 
         sourcedir = os.path.join(self.basedir, 'signindex')
-        testsdir = tempfile.mkdtemp(prefix='test_signjar', dir=self.tmpdir)
+        testsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         for f in ('testy.jar', 'guardianproject.jar',):
             sourcefile = os.path.join(sourcedir, f)
             testfile = os.path.join(testsdir, f)
@@ -291,7 +292,7 @@ class CommonTest(unittest.TestCase):
 
         sourceapk = os.path.join(self.basedir, 'urzip.apk')
 
-        testdir = tempfile.mkdtemp(prefix='test_verify_apks', dir=self.tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         print('testdir', testdir)
 
         copyapk = os.path.join(testdir, 'urzip-copy.apk')
@@ -491,6 +492,35 @@ class CommonTest(unittest.TestCase):
         sig = fdroidserver.common.metadata_find_developer_signature('org.smssecure.smssecure')
         self.assertEqual('b30bb971af0d134866e158ec748fcd553df97c150f58b0a963190bbafbeb0868', sig)
 
+    def test_parse_androidmanifests(self):
+        source_files_dir = os.path.join(os.path.dirname(__file__), 'source-files')
+        app = fdroidserver.metadata.App()
+        app.id = 'org.fdroid.fdroid'
+        paths = [
+            os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'AndroidManifest.xml'),
+            os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'build.gradle'),
+        ]
+        for path in paths:
+            self.assertTrue(os.path.isfile(path))
+        self.assertEqual(('0.94-test', '940', 'org.fdroid.fdroid'),
+                         fdroidserver.common.parse_androidmanifests(paths, app))
+
+    def test_parse_androidmanifests_with_flavor(self):
+        source_files_dir = os.path.join(os.path.dirname(__file__), 'source-files')
+        app = fdroidserver.metadata.App()
+        build = fdroidserver.metadata.Build()
+        build.gradle = ['devVersion']
+        app.builds = [build]
+        app.id = 'org.fdroid.fdroid.dev'
+        paths = [
+            os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'AndroidManifest.xml'),
+            os.path.join(source_files_dir, 'fdroid', 'fdroidclient', 'build.gradle'),
+        ]
+        for path in paths:
+            self.assertTrue(os.path.isfile(path))
+        self.assertEqual(('0.95-dev', '949', 'org.fdroid.fdroid.dev'),
+                         fdroidserver.common.parse_androidmanifests(paths, app))
+
 
 if __name__ == "__main__":
     parser = optparse.OptionParser()
@@ -500,4 +530,4 @@ if __name__ == "__main__":
 
     newSuite = unittest.TestSuite()
     newSuite.addTest(unittest.makeSuite(CommonTest))
-    unittest.main(failfast=True)
+    unittest.main(failfast=False)
index a41028c91c81371c0c652c5803527a44fc4365de..76427c5932672be789aa6d6720dd1a30fbbed878 100755 (executable)
@@ -3,6 +3,7 @@
 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
 
 import inspect
+import logging
 import optparse
 import os
 import requests
@@ -24,8 +25,15 @@ import import_proxy
 class ImportTest(unittest.TestCase):
     '''fdroid import'''
 
+    def setUp(self):
+        logging.basicConfig(level=logging.DEBUG)
+        self.basedir = os.path.join(localmodule, 'tests')
+        self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
+        if not os.path.exists(self.tmpdir):
+            os.makedirs(self.tmpdir)
+        os.chdir(self.basedir)
+
     def test_import_gitlab(self):
-        os.chdir(os.path.dirname(__file__))
         # FDroidPopen needs some config to work
         config = dict()
         fdroidserver.common.fill_config_defaults(config)
index 4a7463fb523d37aeccd829d677f81644a7db23af..671370c3e318aeb140dd57d93a6f7c5579ad3742 100755 (executable)
@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 
 import inspect
+import logging
 import optparse
 import os
 import sys
@@ -31,30 +32,33 @@ GP_FINGERPRINT = 'B7C2EEFD8DAC7806AF67DFCD92EB18126BC08312A7F2D6F3862E46013C7A61
 class IndexTest(unittest.TestCase):
 
     def setUp(self):
+        logging.basicConfig(level=logging.DEBUG)
+        self.basedir = os.path.join(localmodule, 'tests')
+        self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
+        if not os.path.exists(self.tmpdir):
+            os.makedirs(self.tmpdir)
+        os.chdir(self.basedir)
+
         fdroidserver.common.config = None
         config = fdroidserver.common.read_config(fdroidserver.common.options)
         config['jarsigner'] = fdroidserver.common.find_sdk_tools_cmd('jarsigner')
         fdroidserver.common.config = config
         fdroidserver.signindex.config = config
 
-    @staticmethod
-    def test_verify_jar_signature_succeeds():
-        basedir = os.path.dirname(__file__)
-        source_dir = os.path.join(basedir, 'signindex')
+    def test_verify_jar_signature_succeeds(self):
+        source_dir = os.path.join(self.basedir, 'signindex')
         for f in ('testy.jar', 'guardianproject.jar'):
             testfile = os.path.join(source_dir, f)
             fdroidserver.common.verify_jar_signature(testfile)
 
     def test_verify_jar_signature_fails(self):
-        basedir = os.path.dirname(__file__)
-        source_dir = os.path.join(basedir, 'signindex')
+        source_dir = os.path.join(self.basedir, 'signindex')
         testfile = os.path.join(source_dir, 'unsigned.jar')
         with self.assertRaises(fdroidserver.index.VerificationException):
             fdroidserver.common.verify_jar_signature(testfile)
 
     def test_get_public_key_from_jar_succeeds(self):
-        basedir = os.path.dirname(__file__)
-        source_dir = os.path.join(basedir, 'signindex')
+        source_dir = os.path.join(self.basedir, 'signindex')
         for f in ('testy.jar', 'guardianproject.jar'):
             testfile = os.path.join(source_dir, f)
             jar = zipfile.ZipFile(testfile)
@@ -68,8 +72,7 @@ class IndexTest(unittest.TestCase):
                 self.assertTrue(fingerprint == GP_FINGERPRINT)
 
     def test_get_public_key_from_jar_fails(self):
-        basedir = os.path.dirname(__file__)
-        source_dir = os.path.join(basedir, 'signindex')
+        source_dir = os.path.join(self.basedir, 'signindex')
         testfile = os.path.join(source_dir, 'unsigned.jar')
         jar = zipfile.ZipFile(testfile)
         with self.assertRaises(fdroidserver.index.VerificationException):
@@ -226,9 +229,6 @@ class IndexTest(unittest.TestCase):
 
 
 if __name__ == "__main__":
-    if os.path.basename(os.getcwd()) != 'tests' and os.path.isdir('tests'):
-        os.chdir('tests')
-
     parser = optparse.OptionParser()
     parser.add_option("-v", "--verbose", action="store_true", default=False,
                       help="Spew out even more information than normal")
index f2a411c5f61917c1016a2b6cb5833f98c7a142aa..433c07875d8f39755f6af072bc7c113d3b2455e6 100755 (executable)
@@ -32,8 +32,7 @@ class LintTest(unittest.TestCase):
         self.assertTrue(fdroidserver.lint.check_for_unsupported_metadata_files())
 
         tmpdir = os.path.join(localmodule, '.testfiles')
-        tmptestsdir = tempfile.mkdtemp(prefix='test_check_for_unsupported_metadata_files-',
-                                       dir=tmpdir)
+        tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=tmpdir)
         self.assertFalse(fdroidserver.lint.check_for_unsupported_metadata_files(tmptestsdir + '/'))
         shutil.copytree(os.path.join(localmodule, 'tests', 'metadata'),
                         os.path.join(tmptestsdir, 'metadata'),
index 306f1c46949ba855eeda81daf1a0856f0a119979..247f6a89facf8d946776ffc5520ba1459bd35cd6 100755 (executable)
@@ -2,9 +2,13 @@
 
 # http://www.drdobbs.com/testing/unit-testing-with-python/240165163
 
+import glob
 import inspect
+import logging
 import optparse
 import os
+import random
+import shutil
 import sys
 import unittest
 import yaml
@@ -23,15 +27,20 @@ import fdroidserver.metadata
 class MetadataTest(unittest.TestCase):
     '''fdroidserver/metadata.py'''
 
+    def setUp(self):
+        logging.basicConfig(level=logging.DEBUG)
+        self.basedir = os.path.join(localmodule, 'tests')
+        self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
+        if not os.path.exists(self.tmpdir):
+            os.makedirs(self.tmpdir)
+        os.chdir(self.basedir)
+
     def test_read_metadata(self):
 
         def _build_yaml_representer(dumper, data):
             '''Creates a YAML representation of a Build instance'''
             return dumper.represent_dict(data)
 
-        testsdir = os.path.dirname(__file__)
-        os.chdir(testsdir)
-
         self.maxDiff = None
 
         # these need to be set to prevent code running on None, only
@@ -58,12 +67,7 @@ class MetadataTest(unittest.TestCase):
             #     yaml.dump(frommeta, f, default_flow_style=False)
 
     def test_rewrite_yaml_fakeotaupdate(self):
-
-        # setup/reset test dir if necessary and setup params
-        tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
-        if not os.path.exists(tmpdir):
-            os.makedirs(tmpdir)
-        testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
 
         # rewrite metadata
@@ -79,12 +83,7 @@ class MetadataTest(unittest.TestCase):
                 self.assertEqual(result.read(), orig.read())
 
     def test_rewrite_yaml_fdroidclient(self):
-
-        # setup/reset test dir if necessary and setup params
-        tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
-        if not os.path.exists(tmpdir):
-            os.makedirs(tmpdir)
-        testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
 
         # rewrite metadata
@@ -100,12 +99,7 @@ class MetadataTest(unittest.TestCase):
                 self.assertEqual(result.read(), orig.read())
 
     def test_rewrite_yaml_special_build_params(self):
-
-        # setup/reset test dir if necessary and setup params
-        tmpdir = os.path.join(os.path.dirname(__file__), '..', '.testfiles')
-        if not os.path.exists(tmpdir):
-            os.makedirs(tmpdir)
-        testdir = tempfile.mkdtemp(prefix='test_rewrite_metadata_', dir=tmpdir)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
         fdroidserver.common.config = {'accepted_formats': ['txt', 'yml']}
 
         # rewrite metadata
@@ -120,6 +114,31 @@ class MetadataTest(unittest.TestCase):
                 self.maxDiff = None
                 self.assertEqual(result.read(), orig.read())
 
+    def test_read_metadata_sort_by_time(self):
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
+        metadatadir = os.path.join(testdir, 'metadata')
+        os.makedirs(metadatadir)
+        fdroidserver.common.config = {'accepted_formats': ['txt']}
+
+        randomlist = []
+        randomapps = glob.glob(os.path.join(self.basedir, 'metadata', '*.txt'))
+        random.shuffle(randomapps)
+        i = 1
+        for f in randomapps:
+            shutil.copy(f, metadatadir)
+            new = os.path.join(metadatadir, os.path.basename(f))
+            stat = os.stat(new)
+            os.utime(new, (stat.st_ctime, stat.st_mtime + i))
+            # prepend new item so newest is always first
+            randomlist = [os.path.basename(f)[:-4]] + randomlist
+            i += 1
+        os.chdir(testdir)
+        allapps = fdroidserver.metadata.read_metadata(xref=True, sort_by_time=True)
+        allappids = []
+        for appid, app in allapps.items():
+            allappids.append(appid)
+        self.assertEqual(randomlist, allappids)
+
 
 if __name__ == "__main__":
     parser = optparse.OptionParser()
index 8e165608682141205ad79a25d8c3b1bd0e2b00d9..e296a48a038749d1f1b282319e0f56f256facc63 100755 (executable)
@@ -11,6 +11,7 @@
 #
 
 import inspect
+import logging
 import optparse
 import os
 import sys
@@ -32,6 +33,14 @@ from fdroidserver.exception import FDroidException
 class PublishTest(unittest.TestCase):
     '''fdroidserver/publish.py'''
 
+    def setUp(self):
+        logging.basicConfig(level=logging.DEBUG)
+        self.basedir = os.path.join(localmodule, 'tests')
+        self.tmpdir = os.path.abspath(os.path.join(self.basedir, '..', '.testfiles'))
+        if not os.path.exists(self.tmpdir):
+            os.makedirs(self.tmpdir)
+        os.chdir(self.basedir)
+
     def test_key_alias(self):
         publish.config = {}
         self.assertEqual('a163ec9b', publish.key_alias('com.example.app'))
@@ -77,39 +86,35 @@ class PublishTest(unittest.TestCase):
                   'com.example.anotherapp',
                   'org.org.org']
 
-        with tempfile.TemporaryDirectory() as tmpdir:
-            orig_cwd = os.getcwd()
-            try:
-                os.chdir(tmpdir)
-                with open('config.py', 'w') as f:
-                    pass
-
-                publish.store_stats_fdroid_signing_key_fingerprints(appids, indent=2)
-
-                self.maxDiff = None
-                expected = {
-                    "com.example.anotherapp": {
-                        "signer": "fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3"
-                    },
-                    "com.example.app": {
-                        "signer": "d34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4"
-                    },
-                    "org.org.org": {
-                        "signer": "277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82"
-                    },
-                    "org.test.testy": {
-                        "signer": "6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c"
-                    }
-                }
-                self.assertEqual(expected, common.load_stats_fdroid_signing_key_fingerprints())
-
-                with open('config.py', 'r') as f:
-                    self.assertEqual(textwrap.dedent('''\
-
-                        repo_key_sha256 = "c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41"
-                        '''), f.read())
-            finally:
-                os.chdir(orig_cwd)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
+        os.chdir(testdir)
+        with open('config.py', 'w') as f:
+            pass
+
+        publish.store_stats_fdroid_signing_key_fingerprints(appids, indent=2)
+
+        self.maxDiff = None
+        expected = {
+            "com.example.anotherapp": {
+                "signer": "fa3f6a017541ee7fe797be084b1bcfbf92418a7589ef1f7fdeb46741b6d2e9c3"
+            },
+            "com.example.app": {
+                "signer": "d34f678afbaa8f2fa6cc0edd6f0c2d1d2e2e9eb08bea521b24c740806016bff4"
+            },
+            "org.org.org": {
+                "signer": "277655a6235bc6b0ef2d824396c51ba947f5ebc738c293d887e7083ff338af82"
+            },
+            "org.test.testy": {
+                "signer": "6ae5355157a47ddcc3834a71f57f6fb5a8c2621c8e0dc739e9ddf59f865e497c"
+            }
+        }
+        self.assertEqual(expected, common.load_stats_fdroid_signing_key_fingerprints())
+
+        with open('config.py', 'r') as f:
+            self.assertEqual(textwrap.dedent('''\
+
+                repo_key_sha256 = "c58460800c7b250a619c30c13b07b7359a43e5af71a4352d86c58ae18c9f6d41"
+                '''), f.read())
 
     def test_store_and_load_fdroid_signing_key_fingerprints_with_missmatch(self):
         common.config = {}
@@ -122,21 +127,14 @@ class PublishTest(unittest.TestCase):
         publish.config['repo_keyalias'] = 'repokey'
         publish.config['repo_key_sha256'] = 'bad bad bad bad bad bad bad bad bad bad bad bad'
 
-        with tempfile.TemporaryDirectory() as tmpdir:
-            orig_cwd = os.getcwd()
-            try:
-                os.chdir(tmpdir)
-                publish.store_stats_fdroid_signing_key_fingerprints({}, indent=2)
-                with self.assertRaises(FDroidException):
-                    common.load_stats_fdroid_signing_key_fingerprints()
-            finally:
-                os.chdir(orig_cwd)
+        testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir)
+        os.chdir(testdir)
+        publish.store_stats_fdroid_signing_key_fingerprints({}, indent=2)
+        with self.assertRaises(FDroidException):
+            common.load_stats_fdroid_signing_key_fingerprints()
 
 
 if __name__ == "__main__":
-    if os.path.basename(os.getcwd()) != 'tests' and os.path.isdir('tests'):
-        os.chdir('tests')
-
     parser = optparse.OptionParser()
     parser.add_option("-v", "--verbose", action="store_true", default=False,
                       help="Spew out even more information than normal")
index 3c56b870bad1ce624c2ee5d65426fb92a780d6b0..17cfff832258661a48a8df5509268796866ad353 100644 (file)
     "info.guardianproject.urzip": [
       {
         "added": 1466640000000,
-        "apkName": "urzip-Rakhmaninov; \u0420\u0430\u0445\u043c\u0430\u0301\u043d\u0438\u043d\u043e\u0432, IPA: [r\u0250x\u02c8man\u02b2\u026an\u0259f] \u0633\u064a\u0631\u062c\u064a_\u0631\u062e\u0645\u0627\u0646\u064a\u0646\u0648\u0641 \u8c22\u5c14\u76d6\u00b7\u74e6\u897f\u91cc\u8036\u7ef4\u5947\u00b7\u62c9\u8d6b\u739b.apk\u5c3c\u8bfa\u592b .apk",
+        "apkName": "urzip-; \u0420\u0430\u0445\u043c\u0430\u0301\u043d\u0438\u043d\u043e\u0432, [r\u0250x\u02c8man\u02b2\u026an\u0259f] \u0633\u064a\u0631\u062c\u064a_\u0631\u062e\u0645\u0627\u0646\u064a\u0646\u0648\u0641 \u8c22\u5c14\u76d6\u00b7.apk",
         "hash": "15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789",
         "hashType": "sha256",
         "minSdkVersion": "4",
index c6ce688fd4e14861b447c5d63161aa3a4e3c5df3..1c696042c4fb29e970b52dce5d4f3738619cbe6b 100644 (file)
                <package>
                        <version>0.1</version>
                        <versioncode>100</versioncode>
-                       <apkname>urzip-Rakhmaninov; Рахма́нинов, IPA: [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·瓦西里耶维奇·拉赫玛.apk尼诺夫 .apk</apkname>
+                       <apkname>urzip-; Рахма́нинов, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·.apk</apkname>
                        <hash type="sha256">15c0ec72c74a3791f42cdb43c57df0fb11a4dbb656851bbb8cf05b26a8372789</hash>
                        <size>11471</size>
                        <sdkver>4</sdkver>
index 1d994dc8556b25422499b25084da9816161220c7..c81ff357828b84f7c5547baa45dfdbcd60fb912b 100644 (file)
@@ -128,6 +128,21 @@ task binaryDeps(type: Copy, dependsOn: ':F-Droid:prepareReleaseDependencies') {
 android {
     compileSdkVersion 21
     buildToolsVersion '22.0.1'
+    
+    defaultConfig {
+    
+        flavorDimensions "default"
+                
+        productFlavors {
+            devVersion {
+                applicationId "org.fdroid.fdroid.dev"
+                dimension "default"
+                versionCode 949
+                versionName "0.95-dev"
+            }
+        }
+    
+    }
 
     sourceSets {
         main {
index e3e4a41876a0b1289f43eacb8b53d526e531e18d..fbab3620e8d26d07ee937af2279d732824a7e469 100644 (file)
@@ -9,4 +9,4 @@ obb.main.twoversions_1101615.apk obb.main.twoversions 2016-01-01
 obb.main.twoversions_1101617.apk obb.main.twoversions 2016-06-20
 obb.mainpatch.current_1619.apk obb.mainpatch.current 2016-04-23
 obb.mainpatch.current_1619_another-release-key.apk obb.mainpatch.current 2017-06-01
-urzip-Rakhmaninov; Рахма́нинов, IPA: [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·瓦西里耶维奇·拉赫玛.apk尼诺夫 .apk info.guardianproject.urzip 2016-06-23
+urzip-; Рахма́нинов, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·.apk info.guardianproject.urzip 2016-06-23
index 8a88fc4e936a9742769e231963a8f3301a446422..966e00e9d8b92c4411dad8e7925ba8479bc35a83 100755 (executable)
@@ -87,7 +87,7 @@ class UpdateTest(unittest.TestCase):
         tmpdir = os.path.join(localmodule, '.testfiles')
         if not os.path.exists(tmpdir):
             os.makedirs(tmpdir)
-        tmptestsdir = tempfile.mkdtemp(prefix='test_insert_triple_t_metadata-', dir=tmpdir)
+        tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=tmpdir)
         packageDir = os.path.join(tmptestsdir, 'build', packageName)
         shutil.copytree(importer, packageDir)
 
@@ -374,7 +374,7 @@ class UpdateTest(unittest.TestCase):
         tmpdir = os.path.join(localmodule, '.testfiles')
         if not os.path.exists(tmpdir):
             os.makedirs(tmpdir)
-        tmptestsdir = tempfile.mkdtemp(prefix='test_process_apk_signed_by_disabled_algorithms-',
+        tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
                                        dir=tmpdir)
         print('tmptestsdir', tmptestsdir)
         os.chdir(tmptestsdir)
@@ -504,7 +504,7 @@ class UpdateTest(unittest.TestCase):
         tmpdir = os.path.join(localmodule, '.testfiles')
         if not os.path.exists(tmpdir):
             os.makedirs(tmpdir)
-        tmptestsdir = tempfile.mkdtemp(prefix='test_create_metadata_from_template-',
+        tmptestsdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name,
                                        dir=tmpdir)
         print('tmptestsdir', tmptestsdir)
         os.chdir(tmptestsdir)