use constant for default locale

This commit is contained in:
Hans-Christoph Steiner 2023-04-21 11:06:42 +02:00
parent d5a1439457
commit c2bc52dd85
3 changed files with 21 additions and 18 deletions

View file

@ -77,6 +77,9 @@ from . import apksigcopier, common
# The path to this fdroidserver distribution # The path to this fdroidserver distribution
FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..')) FDROID_PATH = os.path.realpath(os.path.join(os.path.dirname(__file__), '..'))
# There needs to be a default, and this is the most common for software.
DEFAULT_LOCALE = 'en-US'
# this is the build-tools version, aapt has a separate version that # this is the build-tools version, aapt has a separate version that
# has to be manually set in test_aapt_version() # has to be manually set in test_aapt_version()
MINIMUM_AAPT_BUILD_TOOLS_VERSION = '26.0.0' MINIMUM_AAPT_BUILD_TOOLS_VERSION = '26.0.0'
@ -507,7 +510,7 @@ def load_localized_config(name, repodir):
for f in Path().glob("config/**/{name}.yml".format(name=name)): for f in Path().glob("config/**/{name}.yml".format(name=name)):
locale = f.parts[1] locale = f.parts[1]
if len(f.parts) == 2: if len(f.parts) == 2:
locale = "en-US" locale = DEFAULT_LOCALE
with open(f, encoding="utf-8") as fp: with open(f, encoding="utf-8") as fp:
elem = yaml.safe_load(fp) elem = yaml.safe_load(fp)
for afname, field_dict in elem.items(): for afname, field_dict in elem.items():
@ -3912,7 +3915,7 @@ def get_app_display_name(app):
if app.get('Name'): if app.get('Name'):
return app['Name'] return app['Name']
if app.get('localized'): if app.get('localized'):
localized = app['localized'].get('en-US') localized = app['localized'].get(DEFAULT_LOCALE)
if not localized: if not localized:
for v in app['localized'].values(): for v in app['localized'].values():
localized = v localized = v

View file

@ -42,7 +42,7 @@ from . import common
from . import metadata from . import metadata
from . import net from . import net
from . import signindex from . import signindex
from fdroidserver.common import FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints from fdroidserver.common import DEFAULT_LOCALE, FDroidPopen, FDroidPopenBytes, load_stats_fdroid_signing_key_fingerprints
from fdroidserver.exception import FDroidException, VerificationException from fdroidserver.exception import FDroidException, VerificationException
@ -518,14 +518,14 @@ def package_metadata(app, repodir):
): ):
element_new = element[:1].lower() + element[1:] element_new = element[:1].lower() + element[1:]
if element in app and app[element]: if element in app and app[element]:
meta[element_new] = {"en-US": convert_datetime(app[element])} meta[element_new] = {DEFAULT_LOCALE: convert_datetime(app[element])}
elif "localized" in app: elif "localized" in app:
localized = {k: v[element_new] for k, v in app["localized"].items() if element_new in v} localized = {k: v[element_new] for k, v in app["localized"].items() if element_new in v}
if localized: if localized:
meta[element_new] = localized meta[element_new] = localized
if "name" not in meta and app["AutoName"]: if "name" not in meta and app["AutoName"]:
meta["name"] = {"en-US": app["AutoName"]} meta["name"] = {DEFAULT_LOCALE: app["AutoName"]}
# fdroidserver/metadata.py App default # fdroidserver/metadata.py App default
if meta["license"] == "Unknown": if meta["license"] == "Unknown":
@ -536,9 +536,8 @@ def package_metadata(app, repodir):
# TODO handle different resolutions # TODO handle different resolutions
if app.get("icon"): if app.get("icon"):
meta["icon"] = { icon_path = os.path.join(repodir, "icons", app["icon"])
"en-US": common.file_entry(os.path.join(repodir, "icons", app["icon"])) meta["icon"] = {DEFAULT_LOCALE: common.file_entry(icon_path)}
}
if "iconv2" in app: if "iconv2" in app:
meta["icon"] = app["iconv2"] meta["icon"] = app["iconv2"]
@ -654,10 +653,10 @@ def convert_version(version, app, repodir):
def v2_repo(repodict, repodir, archive): def v2_repo(repodict, repodir, archive):
repo = {} repo = {}
repo["name"] = {"en-US": repodict["name"]} repo["name"] = {DEFAULT_LOCALE: repodict["name"]}
repo["description"] = {"en-US": repodict["description"]} repo["description"] = {DEFAULT_LOCALE: repodict["description"]}
repo["icon"] = { repo["icon"] = {
"en-US": common.file_entry("{}/icons/{}".format(repodir, repodict["icon"])) DEFAULT_LOCALE: common.file_entry("%s/icons/%s" % (repodir, repodict["icon"]))
} }
config = common.load_localized_config("config", repodir) config = common.load_localized_config("config", repodir)
@ -1022,7 +1021,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
lkey = key[:1].lower() + key[1:] lkey = key[:1].lower() + key[1:]
localized = app.get('localized') localized = app.get('localized')
if not value and localized: if not value and localized:
for lang in ['en-US'] + [x for x in localized.keys()]: for lang in [DEFAULT_LOCALE] + [x for x in localized.keys()]:
if not lang.startswith('en'): if not lang.startswith('en'):
continue continue
if lang in localized: if lang in localized:
@ -1266,7 +1265,7 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing
namefield = common.config['current_version_name_source'] namefield = common.config['current_version_name_source']
name = app.get(namefield) name = app.get(namefield)
if not name and namefield == 'Name': if not name and namefield == 'Name':
name = app.get('localized', {}).get('en-US', {}).get('name') name = app.get('localized', {}).get(DEFAULT_LOCALE, {}).get('name')
if not name: if not name:
name = app.id name = app.id
sanitized_name = re.sub(b'''[ '"&%?+=/]''', b'', str(name).encode('utf-8')) sanitized_name = re.sub(b'''[ '"&%?+=/]''', b'', str(name).encode('utf-8'))

View file

@ -51,6 +51,7 @@ from . import _
from . import common from . import common
from . import index from . import index
from . import metadata from . import metadata
from .common import DEFAULT_LOCALE
from .exception import BuildException, FDroidException, VerificationException from .exception import BuildException, FDroidException, VerificationException
from PIL import Image, PngImagePlugin from PIL import Image, PngImagePlugin
@ -2034,7 +2035,7 @@ def insert_missing_app_names_from_apks(apps, apks):
The name from the APK is set as the default name for the app if The name from the APK is set as the default name for the app if
there is no other default set, e.g. app['Name'] or there is no other default set, e.g. app['Name'] or
app['localized']['en-US']['name']. The en-US locale is defined in app['localized'][DEFAULT_LOCALE]['name']. The default is defined in
the F-Droid ecosystem as the locale of last resort, as in the one the F-Droid ecosystem as the locale of last resort, as in the one
that should always be present. en-US is used since it is the that should always be present. en-US is used since it is the
locale of the source strings. locale of the source strings.
@ -2050,7 +2051,7 @@ def insert_missing_app_names_from_apks(apps, apks):
for appid, app in apps.items(): for appid, app in apps.items():
if app.get('Name') is not None: if app.get('Name') is not None:
continue continue
if app.get('localized', {}).get('en-US', {}).get('name') is not None: if app.get('localized', {}).get(DEFAULT_LOCALE, {}).get('name') is not None:
continue continue
bestver = UNSET_VERSION_CODE bestver = UNSET_VERSION_CODE
@ -2063,9 +2064,9 @@ def insert_missing_app_names_from_apks(apps, apks):
if bestver != UNSET_VERSION_CODE: if bestver != UNSET_VERSION_CODE:
if 'localized' not in app: if 'localized' not in app:
app['localized'] = {} app['localized'] = {}
if 'en-US' not in app['localized']: if DEFAULT_LOCALE not in app['localized']:
app['localized']['en-US'] = {} app['localized'][DEFAULT_LOCALE] = {}
app['localized']['en-US']['name'] = bestapk.get('name') app['localized'][DEFAULT_LOCALE]['name'] = bestapk.get('name')
def get_apps_with_packages(apps, apks): def get_apps_with_packages(apps, apks):