mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-24 15:09:29 +02:00
Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
dfac3af3f5 | ||
|
5eceaeecde | ||
|
62c23004f7 | ||
|
cd153e7d11 | ||
|
3b494511d7 | ||
|
6c806a44d4 | ||
|
c5bac43bfd | ||
|
1636281d6d | ||
|
0f4feb2da6 | ||
|
c32f34c116 | ||
|
d391c5cfc2 | ||
|
bb45a157b3 | ||
|
c90a571f89 | ||
|
1278407c90 | ||
|
dff1b4cf39 | ||
|
105e70a814 | ||
|
2938cea419 | ||
|
9b6b7780d8 | ||
|
f53a4f3827 | ||
|
9b0d672553 | ||
|
9d14145ac2 | ||
|
9948797b25 | ||
|
a80d9e3623 | ||
|
37ecb057f9 | ||
|
06cbe74c6c | ||
|
f5769b85fe | ||
|
875868af47 | ||
|
24ea15d600 | ||
|
87cdc3dcef | ||
|
c2f976d7f4 | ||
|
ebc46bfd3f | ||
|
e674f7e89d | ||
|
86d29b163c | ||
|
a849919799 | ||
|
d8c805a6b3 | ||
|
8acbd3ef78 | ||
|
b81088d767 |
2
.flutter
2
.flutter
Submodule .flutter updated: a14f74ff3a...761747bfc5
375
assets/translations/da.json
Normal file
375
assets/translations/da.json
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
{
|
||||||
|
"invalidURLForSource": "Ikke et gyldigt {} App-URL",
|
||||||
|
"noReleaseFound": "Kunne ikke finde en passende udgivelse",
|
||||||
|
"noVersionFound": "Kunne ikke afgøre udgivelsesversion",
|
||||||
|
"urlMatchesNoSource": "URL'en matcher ikke en kendt kilde",
|
||||||
|
"cantInstallOlderVersion": "Kan ikke installere en ældre version af en app",
|
||||||
|
"appIdMismatch": "Hentet pakke-ID matcher ikke eksisterende app-ID",
|
||||||
|
"functionNotImplemented": "Denne klasse har ikke implementeret denne funktion",
|
||||||
|
"placeholder": "Pladsholder",
|
||||||
|
"someErrors": "Nogle fejl opstod",
|
||||||
|
"unexpectedError": "Uventet fejl",
|
||||||
|
"ok": "Okay",
|
||||||
|
"and": "og",
|
||||||
|
"githubPATLabel": "GitHub Personlig Adgangstoken (øger hastighedsgrænse)",
|
||||||
|
"includePrereleases": "Inkluder forudgivelser",
|
||||||
|
"fallbackToOlderReleases": "Fallback til ældre udgivelser",
|
||||||
|
"filterReleaseTitlesByRegEx": "Filtrer udgivelsestitler efter regulært udtryk",
|
||||||
|
"invalidRegEx": "Ugyldigt regulært udtryk",
|
||||||
|
"noDescription": "Ingen beskrivelse",
|
||||||
|
"cancel": "Annuller",
|
||||||
|
"continue": "Fortsæt",
|
||||||
|
"requiredInBrackets": "(Påkrævet)",
|
||||||
|
"dropdownNoOptsError": "FEJL: RULLEMENU SKAL HAVE MINDST ÉT TILVALG",
|
||||||
|
"colour": "Farve",
|
||||||
|
"standard": "Standard",
|
||||||
|
"custom": "Brugerdefineret",
|
||||||
|
"useMaterialYou": "Brug Material You",
|
||||||
|
"githubStarredRepos": "Stjernemarkeret GitHub-repos",
|
||||||
|
"uname": "Brugernavn",
|
||||||
|
"wrongArgNum": "Forkert antal argumenter angivet",
|
||||||
|
"xIsTrackOnly": "{} kan kun følges",
|
||||||
|
"source": "Kilde",
|
||||||
|
"app": "App",
|
||||||
|
"appsFromSourceAreTrackOnly": "Apps fra denne kilde er 'Følg Kun'.",
|
||||||
|
"youPickedTrackOnly": "Du har valgt 'Følg Kun'-indstillingen.",
|
||||||
|
"trackOnlyAppDescription": "Appen tjekkes for opdateringer, men Obtainium kan ikke hente eller installere den.",
|
||||||
|
"cancelled": "Annulleret",
|
||||||
|
"appAlreadyAdded": "Appen er allerede tilføjet",
|
||||||
|
"alreadyUpToDateQuestion": "Appen er allerede opdateret?",
|
||||||
|
"addApp": "Tilføj app",
|
||||||
|
"appSourceURL": "URL til app-kilde",
|
||||||
|
"error": "Fejl",
|
||||||
|
"add": "Tilføj",
|
||||||
|
"searchSomeSourcesLabel": "Søg (kun visse kilder)",
|
||||||
|
"search": "Søg",
|
||||||
|
"additionalOptsFor": "Yderligere indstillinger for {}",
|
||||||
|
"supportedSources": "Understøttede kilder",
|
||||||
|
"trackOnlyInBrackets": "(Følg Kun)",
|
||||||
|
"searchableInBrackets": "(Kan Søges)",
|
||||||
|
"appsString": "Apps",
|
||||||
|
"noApps": "Ingen apps",
|
||||||
|
"noAppsForFilter": "Ingen apps til filter",
|
||||||
|
"byX": "Af {}",
|
||||||
|
"percentProgress": "Fremskridt: {}%",
|
||||||
|
"pleaseWait": "Vent venligst",
|
||||||
|
"updateAvailable": "Opdatering tilgængelig",
|
||||||
|
"notInstalled": "Ikke installeret",
|
||||||
|
"pseudoVersion": "pseudo-version",
|
||||||
|
"selectAll": "Vælg alle",
|
||||||
|
"deselectX": "Fravælg {}",
|
||||||
|
"xWillBeRemovedButRemainInstalled": "{} fjernes fra Obtainium, men forbliver installeret på enheden.",
|
||||||
|
"removeSelectedAppsQuestion": "Fjern valgte apps?",
|
||||||
|
"removeSelectedApps": "Fjern valgte apps",
|
||||||
|
"updateX": "Opdater {}",
|
||||||
|
"installX": "Installer {}",
|
||||||
|
"markXTrackOnlyAsUpdated": "Markér {}\n(Følg Kun)\nsom opdateret",
|
||||||
|
"changeX": "Skift {}",
|
||||||
|
"installUpdateApps": "Installer/Opdater apps",
|
||||||
|
"installUpdateSelectedApps": "Installer/Opdater valgte apps",
|
||||||
|
"markXSelectedAppsAsUpdated": "Markér {} valgte apps som opdateret?",
|
||||||
|
"no": "Nej",
|
||||||
|
"yes": "Ja",
|
||||||
|
"markSelectedAppsUpdated": "Markér valgte apps som opdateret",
|
||||||
|
"pinToTop": "Fastgør til toppen",
|
||||||
|
"unpinFromTop": "Frigør fra toppen",
|
||||||
|
"resetInstallStatusForSelectedAppsQuestion": "Nulstil installationsstatus for valgte apps?",
|
||||||
|
"installStatusOfXWillBeResetExplanation": "Installationsstatus for alle valgte apps nulstilles.\n\nDette kan hjælpe, når den app-version, der vises i Obtainium, er forkert grundet mislykkede opdateringer eller andre problemer.",
|
||||||
|
"customLinkMessage": "Disse links virker på enheder med Obtainium installeret",
|
||||||
|
"shareAppConfigLinks": "Del app-konfiguration som HTML-link",
|
||||||
|
"shareSelectedAppURLs": "Del valgte app-URL'er",
|
||||||
|
"resetInstallStatus": "Nulstil installationsstatus",
|
||||||
|
"more": "Mere",
|
||||||
|
"removeOutdatedFilter": "Fjern forældet app-filter",
|
||||||
|
"showOutdatedOnly": "Vis kun forældet apps",
|
||||||
|
"filter": "Filtrer",
|
||||||
|
"filterApps": "Filtrer Apps",
|
||||||
|
"appName": "Appnavn",
|
||||||
|
"author": "Udvikler",
|
||||||
|
"upToDateApps": "Opdaterede apps",
|
||||||
|
"nonInstalledApps": "Ikke-installerede apps",
|
||||||
|
"importExport": "Import/Eksport",
|
||||||
|
"settings": "Indstillinger",
|
||||||
|
"exportedTo": "Eksportér til {}",
|
||||||
|
"obtainiumExport": "Obtainium-eksport",
|
||||||
|
"invalidInput": "Ugyldigt input",
|
||||||
|
"importedX": "Importerede {}",
|
||||||
|
"obtainiumImport": "Obtainium-import",
|
||||||
|
"importFromURLList": "Importér fra URL-liste",
|
||||||
|
"searchQuery": "Søgning",
|
||||||
|
"appURLList": "Liste over app-URL'er",
|
||||||
|
"line": "Linje",
|
||||||
|
"searchX": "Søg {}",
|
||||||
|
"noResults": "Ingen resultater fundet",
|
||||||
|
"importX": "Importér {}",
|
||||||
|
"importedAppsIdDisclaimer": "Importerede apps vises muligvis forkert som \"Ikke installeret\".\nFor at løse dette, geninstaller dem via Obtainium.\nDette bør ikke påvirke app-data.\n\nPåvirker kun URL- og tredjepartsimportmetoder.",
|
||||||
|
"importErrors": "Importfejl",
|
||||||
|
"importedXOfYApps": "{} af {} app importeret.",
|
||||||
|
"followingURLsHadErrors": "Følgende URL'er havde fejl:",
|
||||||
|
"selectURL": "Vælg URL",
|
||||||
|
"selectURLs": "Vælg URL'er",
|
||||||
|
"pick": "Vælg",
|
||||||
|
"theme": "Tema",
|
||||||
|
"dark": "Mørk",
|
||||||
|
"light": "Lys",
|
||||||
|
"followSystem": "Følg system",
|
||||||
|
"followSystemThemeExplanation": "Det er kun muligt at følge systemtemaet ved brug af tredjepartsapplikationer",
|
||||||
|
"useBlackTheme": "Brug rent sort, mørkt tema",
|
||||||
|
"appSortBy": "Sortér apps efter:",
|
||||||
|
"authorName": "Udvikler/Navn",
|
||||||
|
"nameAuthor": "Navn/Udvikler",
|
||||||
|
"asAdded": "Som tilføjet",
|
||||||
|
"appSortOrder": "Sorteringsrækkefølge for apps",
|
||||||
|
"ascending": "Stigende",
|
||||||
|
"descending": "Faldende",
|
||||||
|
"bgUpdateCheckInterval": "Kontrolinterval for baggrundsopdatering",
|
||||||
|
"neverManualOnly": "Aldrig - Kun manuelt",
|
||||||
|
"appearance": "Udseende",
|
||||||
|
"showWebInAppView": "Vis kildewebsiden i appvisning",
|
||||||
|
"pinUpdates": "Fastgør opdateringer til toppen af appvisning",
|
||||||
|
"updates": "Opdateringer",
|
||||||
|
"sourceSpecific": "Kildespecifik",
|
||||||
|
"appSource": "App-kilde",
|
||||||
|
"noLogs": "Ingen logs",
|
||||||
|
"appLogs": "App-logs",
|
||||||
|
"close": "Luk",
|
||||||
|
"share": "Del",
|
||||||
|
"appNotFound": "App ikke fundet",
|
||||||
|
"obtainiumExportHyphenatedLowercase": "obtainium-eksport",
|
||||||
|
"pickAnAPK": "Vælg en APK",
|
||||||
|
"appHasMoreThanOnePackage": "{} har mere end én pakke:",
|
||||||
|
"deviceSupportsXArch": "Din enhed understøtter {} CPU-arkitekturen.",
|
||||||
|
"deviceSupportsFollowingArchs": "Din enhed understøtter følgende CPU-arkitekturer:",
|
||||||
|
"warning": "Advarsel",
|
||||||
|
"sourceIsXButPackageFromYPrompt": "App-kilden er '{}', men udgivelsespakken kommer fra '{}'. Fortsæt?",
|
||||||
|
"updatesAvailable": "Opdateringer tilgængelige",
|
||||||
|
"updatesAvailableNotifDescription": "Underretter brugeren om, at opdateringer er tilgængelige for en eller flere apps, der spores af Obtainium",
|
||||||
|
"noNewUpdates": "Ingen nye opdateringer.",
|
||||||
|
"xHasAnUpdate": "{} har en opdatering.",
|
||||||
|
"appsUpdated": "Apps opdateret",
|
||||||
|
"appsNotUpdated": "Kunne ikke opdatere applikationerne",
|
||||||
|
"appsUpdatedNotifDescription": "Underretter brugeren om, at opdateringer til en eller flere apps blev udført i baggrunden",
|
||||||
|
"xWasUpdatedToY": "{} blev opdateret til {}.",
|
||||||
|
"xWasNotUpdatedToY": "Kunne ikke opdatere {} til {}.",
|
||||||
|
"errorCheckingUpdates": "Fejl ved tjek for opdateringer",
|
||||||
|
"errorCheckingUpdatesNotifDescription": "En meddelelse, der vises, når opdateringstjek i baggrunden mislykkes",
|
||||||
|
"appsRemoved": "Apps fjernet",
|
||||||
|
"appsRemovedNotifDescription": "Underretter brugeren om, at en eller flere apps blev fjernet grundet fejl under indlæsning af dem",
|
||||||
|
"xWasRemovedDueToErrorY": "{} blev fjernet grundet denne fejl: {}",
|
||||||
|
"completeAppInstallation": "Færdiggør app-installation",
|
||||||
|
"obtainiumMustBeOpenToInstallApps": "Obtainium skal være åben for at installere apps",
|
||||||
|
"completeAppInstallationNotifDescription": "Beder brugeren om at vende tilbage til Obtainium for at afslutte installationen af en app",
|
||||||
|
"checkingForUpdates": "Tjekker for opdateringer",
|
||||||
|
"checkingForUpdatesNotifDescription": "Kortvarig meddelelse, der vises ved tjek for opdateringer",
|
||||||
|
"pleaseAllowInstallPerm": "Tillad venligst Obtainium at installere apps",
|
||||||
|
"trackOnly": "Følg Kun",
|
||||||
|
"errorWithHttpStatusCode": "Fejl {}",
|
||||||
|
"versionCorrectionDisabled": "Versionskorrigering deaktiveret (plugin ser ikke ud til at virke)",
|
||||||
|
"unknown": "Ukendt",
|
||||||
|
"none": "Ingen",
|
||||||
|
"never": "Aldrig",
|
||||||
|
"latestVersionX": "Seneste: {}",
|
||||||
|
"installedVersionX": "Installeret: {}",
|
||||||
|
"lastUpdateCheckX": "Sidste opdateringstjek: {}",
|
||||||
|
"remove": "Fjern",
|
||||||
|
"yesMarkUpdated": "Ja, markér som opdateret",
|
||||||
|
"fdroid": "F-Droid Officiel",
|
||||||
|
"appIdOrName": "App-ID eller navn",
|
||||||
|
"appId": "App-ID",
|
||||||
|
"appWithIdOrNameNotFound": "Ingen app med det ID eller navn blev fundet",
|
||||||
|
"reposHaveMultipleApps": "Repos kan indeholde flere apps",
|
||||||
|
"fdroidThirdPartyRepo": "F-Droid Tredjeparts-repo",
|
||||||
|
"steamMobile": "Steam Mobil",
|
||||||
|
"steamChat": "Steam Chat",
|
||||||
|
"install": "Installer",
|
||||||
|
"markInstalled": "Markér som installeret",
|
||||||
|
"update": "Opdater",
|
||||||
|
"markUpdated": "Markér som opdateret",
|
||||||
|
"additionalOptions": "Yderligere indstillinger",
|
||||||
|
"disableVersionDetection": "Deaktivér versionsregistrering",
|
||||||
|
"noVersionDetectionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt.",
|
||||||
|
"downloadingX": "Henter {}",
|
||||||
|
"downloadX": "Hent {}",
|
||||||
|
"downloadedX": "Hentede {}",
|
||||||
|
"releaseAsset": "Udgivelsesressource",
|
||||||
|
"downloadNotifDescription": "Underretter brugeren om fremskridt i hentning af en app",
|
||||||
|
"noAPKFound": "Ingen APK fundet",
|
||||||
|
"noVersionDetection": "Ingen versionsregistrering",
|
||||||
|
"categorize": "Kategoriser",
|
||||||
|
"categories": "Kategorier",
|
||||||
|
"category": "Kategori",
|
||||||
|
"noCategory": "Ingen kategori",
|
||||||
|
"noCategories": "Ingen kategorier",
|
||||||
|
"deleteCategoriesQuestion": "Slet kategorier?",
|
||||||
|
"categoryDeleteWarning": "Alle apps i slettede kategorier indstilles til ukategoriseret.",
|
||||||
|
"addCategory": "Tilføj kategori",
|
||||||
|
"label": "Etiket",
|
||||||
|
"language": "Sprog",
|
||||||
|
"copiedToClipboard": "Kopieret til udklipsholder",
|
||||||
|
"storagePermissionDenied": "Lagringstilladelse nægtet",
|
||||||
|
"selectedCategorizeWarning": "Dette erstatter alle eksisterende kategoriindstillinger for de valgte apps.",
|
||||||
|
"filterAPKsByRegEx": "Filtrer APK'er efter regulært udtryk",
|
||||||
|
"removeFromObtainium": "Fjern fra Obtainium",
|
||||||
|
"uninstallFromDevice": "Afinstaller fra enhed",
|
||||||
|
"onlyWorksWithNonVersionDetectApps": "Virker kun for apps med versionsregistrering deaktiveret.",
|
||||||
|
"releaseDateAsVersion": "Brug udgivelsesdato som versionsstreng",
|
||||||
|
"releaseDateAsVersionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt, men hvor en udgivelsesdato er tilgængelig.",
|
||||||
|
"changes": "Ændringer",
|
||||||
|
"releaseDate": "Udgivelsesdato",
|
||||||
|
"importFromURLsInFile": "Importér fra URL'er i fil (som OPML)",
|
||||||
|
"versionDetectionExplanation": "Afstem versionsstreng med versionen registreret fra OS",
|
||||||
|
"versionDetection": "Versionsregistrering",
|
||||||
|
"standardVersionDetection": "Standard versionsregistrering",
|
||||||
|
"groupByCategory": "Gruppér efter kategori",
|
||||||
|
"autoApkFilterByArch": "Forsøg at filtrere APK'er efter CPU-arkitektur, hvis muligt",
|
||||||
|
"overrideSource": "Tilsidesæt kilde",
|
||||||
|
"dontShowAgain": "Vis ikke denne igen",
|
||||||
|
"dontShowTrackOnlyWarnings": "Vis ikke 'Følg Kun'-advarsler",
|
||||||
|
"dontShowAPKOriginWarnings": "Vis ikke advarsler om APK-oprindelse",
|
||||||
|
"moveNonInstalledAppsToBottom": "Flyt ikke-installerede apps til bunden af appvisning",
|
||||||
|
"gitlabPATLabel": "GitLab Personlig Adgangstoken",
|
||||||
|
"about": "Om",
|
||||||
|
"requiresCredentialsInSettings": "{} kræver yderligere legitimation (i Indstillinger)",
|
||||||
|
"checkOnStart": "Tjek for opdateringer ved opstart",
|
||||||
|
"tryInferAppIdFromCode": "Forsøg at udlede app-ID fra kildekode",
|
||||||
|
"removeOnExternalUninstall": "Fjern automatisk eksternt afinstallerede apps",
|
||||||
|
"pickHighestVersionCode": "Auto-vælg højeste versionKode af APK",
|
||||||
|
"checkUpdateOnDetailPage": "Tjek for opdateringer ved åbning af appens detaljeside",
|
||||||
|
"disablePageTransitions": "Deaktivér sideovergangsanimationer",
|
||||||
|
"reversePageTransitions": "Omvendte sideovergangsanimationer",
|
||||||
|
"minStarCount": "Minimum antal stjerner",
|
||||||
|
"addInfoBelow": "Tilføj denne info nedenfor.",
|
||||||
|
"addInfoInSettings": "Tilføj denne info i indstillingerne.",
|
||||||
|
"githubSourceNote": "GitHubs hastighedsbegrænsning kan undgås med en API-nøgle.",
|
||||||
|
"sortByLastLinkSegment": "Sortér kun efter det sidste segment af linket",
|
||||||
|
"filterReleaseNotesByRegEx": "Filtrer udgivelsesnoter efter regulært udtryk",
|
||||||
|
"customLinkFilterRegex": "Brugerdefineret APK-linkfilter efter regulært udtryk (standard '.apk$')",
|
||||||
|
"appsPossiblyUpdated": "App-opdateringer forsøgt",
|
||||||
|
"appsPossiblyUpdatedNotifDescription": "Underretter brugeren om, at opdateringer til en eller flere apps potentielt blev udført i baggrunden",
|
||||||
|
"xWasPossiblyUpdatedToY": "{} er muligvis blevet opdateret til {}.",
|
||||||
|
"enableBackgroundUpdates": "Aktivér baggrundsopdateringer",
|
||||||
|
"backgroundUpdateReqsExplanation": "Baggrundsopdateringer er muligvis ikke mulige for alle apps.",
|
||||||
|
"backgroundUpdateLimitsExplanation": "Om en baggrundsinstallation er vellykket, kan kun afgøres, når Obtainium åbnes.",
|
||||||
|
"verifyLatestTag": "Verificer 'seneste'-tagget",
|
||||||
|
"intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge",
|
||||||
|
"filterByLinkText": "Filtrer links efter linktekst",
|
||||||
|
"intermediateLinkNotFound": "Mellemliggende link ikke fundet",
|
||||||
|
"intermediateLink": "Mellemliggende link",
|
||||||
|
"exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)",
|
||||||
|
"bgUpdatesOnWiFiOnly": "Deaktivér baggrundsopdateringer, når du ikke er på WiFi",
|
||||||
|
"autoSelectHighestVersionCode": "Auto-vælg højeste versionKode af APK",
|
||||||
|
"versionExtractionRegEx": "RegEx for versionsstrengsudtrækning",
|
||||||
|
"matchGroupToUse": "Match gruppe til brug til RegEx for versionsstrengsudtrækning",
|
||||||
|
"highlightTouchTargets": "Fremhæv mindre åbenlyse berøringsmål",
|
||||||
|
"pickExportDir": "Vælg eksportmappe",
|
||||||
|
"autoExportOnChanges": "Auto-eksport ved ændringer",
|
||||||
|
"includeSettings": "Inkluder indstillinger",
|
||||||
|
"filterVersionsByRegEx": "Filtrer versioner efter regulært udtryk",
|
||||||
|
"trySelectingSuggestedVersionCode": "Forsøg at vælge den foreslåede versionKode af APK",
|
||||||
|
"dontSortReleasesList": "Behold udgivelsesordre fra API",
|
||||||
|
"reverseSort": "Omvendt sortering",
|
||||||
|
"takeFirstLink": "Tag første link",
|
||||||
|
"skipSort": "Spring sortering over",
|
||||||
|
"debugMenu": "Fejlfindingsmenu",
|
||||||
|
"bgTaskStarted": "Baggrundsopgave startet - tjek logfiler.",
|
||||||
|
"runBgCheckNow": "Kør baggrundsopdateringstjek nu",
|
||||||
|
"versionExtractWholePage": "Anvend RegEx for versionsstrengsudtrækning for hele siden",
|
||||||
|
"installing": "Installerer",
|
||||||
|
"skipUpdateNotifications": "Spring opdateringsmeddelelser over",
|
||||||
|
"updatesAvailableNotifChannel": "Opdateringer tilgængelige",
|
||||||
|
"appsUpdatedNotifChannel": "Apps opdateret",
|
||||||
|
"appsPossiblyUpdatedNotifChannel": "App-opdateringer forsøgt",
|
||||||
|
"errorCheckingUpdatesNotifChannel": "Fejl ved opdateringstjek",
|
||||||
|
"appsRemovedNotifChannel": "Apps fjernet",
|
||||||
|
"downloadingXNotifChannel": "Henter {}",
|
||||||
|
"completeAppInstallationNotifChannel": "Færdiggør app-installation",
|
||||||
|
"checkingForUpdatesNotifChannel": "Tjekker for opdateringer",
|
||||||
|
"onlyCheckInstalledOrTrackOnlyApps": "Tjek kun installeret og 'Følg Kun'-apps for opdateringer",
|
||||||
|
"supportFixedAPKURL": "Understøt fikserede APK-URL'er",
|
||||||
|
"selectX": "Vælg {}",
|
||||||
|
"parallelDownloads": "Tillad samtidige overførsler",
|
||||||
|
"useShizuku": "Brug Shizuku eller Sui til at installere",
|
||||||
|
"shizukuBinderNotFound": "Shizuku-tjeneste kører ikke",
|
||||||
|
"shizukuOld": "Forældet Shizuku-version (<11). Opdater den",
|
||||||
|
"shizukuOldAndroidWithADB": "Shizuku kører på Android <8.1 med ADB. Opdater Android eller brug Sui i stedet",
|
||||||
|
"shizukuPretendToBeGooglePlay": "Indstil Google Play som installationskilde (hvis Shizuku bruges)",
|
||||||
|
"useSystemFont": "Brug systemskrifttype",
|
||||||
|
"useVersionCodeAsOSVersion": "Brug app versionKode som OS-registreret version",
|
||||||
|
"requestHeader": "Anmod overskrift",
|
||||||
|
"useLatestAssetDateAsReleaseDate": "Brug seneste ressourceupload som udgivelsesdato",
|
||||||
|
"defaultPseudoVersioningMethod": "Standard pseudo-versioneringsmetode",
|
||||||
|
"partialAPKHash": "Delvis APK-hash",
|
||||||
|
"APKLinkHash": "Hash for APK-link",
|
||||||
|
"directAPKLink": "Direkte APK-link",
|
||||||
|
"pseudoVersionInUse": "En pseudo-version er i brug",
|
||||||
|
"installed": "Installeret",
|
||||||
|
"latest": "Seneste",
|
||||||
|
"invertRegEx": "Inverter regulært udtryk",
|
||||||
|
"note": "Note",
|
||||||
|
"selfHostedNote": "Rullemenuen \"{}\" kan bruges til at nå selvhostede/brugerdefinerede instanser af enhver kilde.",
|
||||||
|
"badDownload": "APK'en kunne ikke analyseres (inkompatibel eller delvis hentning)",
|
||||||
|
"beforeNewInstallsShareToAppVerifier": "Del nye apps med AppVerifier (hvis tilgængelig)",
|
||||||
|
"appVerifierInstructionToast": "Del til AppVerifier, og vend tilbage hertil, når du er klar.",
|
||||||
|
"wiki": "Hjælp/Wiki",
|
||||||
|
"crowdsourcedConfigsLabel": "Crowdsourcede app-konfigurationer (brug på egen risiko)",
|
||||||
|
"removeAppQuestion": {
|
||||||
|
"one": "Fjern app?",
|
||||||
|
"other": "Fjern apps?"
|
||||||
|
},
|
||||||
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
"one": "For mange anmodninger (begrænset hastighed). Prøv igen om {} minut",
|
||||||
|
"other": "For mange anmodninger (begrænset hastighed). Prøv igen om {} minutter"
|
||||||
|
},
|
||||||
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
|
"one": "Baggrundsopdateringstjek stødte på en {}. Planlægger et nyt tjek om {} minut",
|
||||||
|
"other": "Baggrundsopdateringstjek stødte på en {}. Planlægger et nyt tjek om {} minutter"
|
||||||
|
},
|
||||||
|
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
||||||
|
"one": "Baggrundsopdateringstjek fandt {} opdatering. Underretter brugeren, hvis nødvendigt",
|
||||||
|
"other": "Baggrundsopdateringstjek fandt {} opdateringer. Underretter brugeren, hvis nødvendigt"
|
||||||
|
},
|
||||||
|
"apps": {
|
||||||
|
"one": "{} App",
|
||||||
|
"other": "{} Apps"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"one": "{} URL",
|
||||||
|
"other": "{} URL'er"
|
||||||
|
},
|
||||||
|
"minute": {
|
||||||
|
"one": "{} Minut",
|
||||||
|
"other": "{} Minutter"
|
||||||
|
},
|
||||||
|
"hour": {
|
||||||
|
"one": "{} Time",
|
||||||
|
"other": "{} Timer"
|
||||||
|
},
|
||||||
|
"day": {
|
||||||
|
"one": "{} Dag",
|
||||||
|
"other": "{} Dage"
|
||||||
|
},
|
||||||
|
"clearedNLogsBeforeXAfterY": {
|
||||||
|
"one": "Ryddet {n} log (før = {before}, efter = {after})",
|
||||||
|
"other": "Ryddet {n} logs (før = {before}, efter = {after})"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesAvailable": {
|
||||||
|
"one": "{} og 1 anden app har opdateringer.",
|
||||||
|
"other": "{} og {} andre apps har opdateringer."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesInstalled": {
|
||||||
|
"one": "{} og 1 anden app blev opdateret.",
|
||||||
|
"other": "{} og {} andre apps blev opdateret."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesFailed": {
|
||||||
|
"one": "Kunne ikke opdatere {} og 1 anden app.",
|
||||||
|
"other": "Kunne ikke opdatere {} og {} andre apps."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
|
"one": "{} og 1 anden app blev muligvis opdateret.",
|
||||||
|
"other": "{} og {} andre apps blev muligvis opdateret."
|
||||||
|
},
|
||||||
|
"apk": {
|
||||||
|
"one": "{} APK",
|
||||||
|
"other": "{} APK'er"
|
||||||
|
}
|
||||||
|
}
|
@@ -21,15 +21,15 @@
|
|||||||
"continue": "Continuar",
|
"continue": "Continuar",
|
||||||
"requiredInBrackets": "(Requerido)",
|
"requiredInBrackets": "(Requerido)",
|
||||||
"dropdownNoOptsError": "ERROR: EL DESPLEGABLE DEBE TENER AL MENOS UNA OPCIÓN",
|
"dropdownNoOptsError": "ERROR: EL DESPLEGABLE DEBE TENER AL MENOS UNA OPCIÓN",
|
||||||
"colour": "Color",
|
"colour": "color",
|
||||||
"standard": "Estándar",
|
"standard": "Estándar",
|
||||||
"custom": "A medida",
|
"custom": "A medida",
|
||||||
"useMaterialYou": "Use 'Material You'",
|
"useMaterialYou": "Aplicar 'Material You'",
|
||||||
"githubStarredRepos": "Repositorios favoritos en GitHub",
|
"githubStarredRepos": "repositorios favoritos en GitHub",
|
||||||
"uname": "Nombre de usuario",
|
"uname": "Nombre de usuario",
|
||||||
"wrongArgNum": "Número de argumentos provistos inválido",
|
"wrongArgNum": "Número de argumentos provistos inválido",
|
||||||
"xIsTrackOnly": "{} es de 'sólo seguimiento'",
|
"xIsTrackOnly": "{} es de 'sólo seguimiento'",
|
||||||
"source": "Origen",
|
"source": "origen",
|
||||||
"app": "Aplicación",
|
"app": "Aplicación",
|
||||||
"appsFromSourceAreTrackOnly": "Las aplicaciones de este origen son solo para seguimiento.",
|
"appsFromSourceAreTrackOnly": "Las aplicaciones de este origen son solo para seguimiento.",
|
||||||
"youPickedTrackOnly": "Debe seleccionar la opción de 'solo para seguimiento'.",
|
"youPickedTrackOnly": "Debe seleccionar la opción de 'solo para seguimiento'.",
|
||||||
@@ -122,14 +122,14 @@
|
|||||||
"appSortOrder": "Orden de Clasificación",
|
"appSortOrder": "Orden de Clasificación",
|
||||||
"ascending": "Ascendente",
|
"ascending": "Ascendente",
|
||||||
"descending": "Descendente",
|
"descending": "Descendente",
|
||||||
"bgUpdateCheckInterval": "Comprobación actualizaciones en segundo plano",
|
"bgUpdateCheckInterval": "Comprobar actualizaciones en segundo plano",
|
||||||
"neverManualOnly": "Nunca, solo manual",
|
"neverManualOnly": "Nunca, solo manual",
|
||||||
"appearance": "Apariencia",
|
"appearance": "Apariencia",
|
||||||
"showWebInAppView": "Mostrar vista de la web de origen",
|
"showWebInAppView": "Mostrar vista de la web de origen",
|
||||||
"pinUpdates": "Anclar actualizaciones al principio",
|
"pinUpdates": "Anclar actualizaciones al principio",
|
||||||
"updates": "Actualizaciones",
|
"updates": "Actualizaciones",
|
||||||
"sourceSpecific": "Fuente específica",
|
"sourceSpecific": "Fuente específica",
|
||||||
"appSource": "Obtainium en GitHub",
|
"appSource": "Filtrar por fuente",
|
||||||
"noLogs": "Ningún registro",
|
"noLogs": "Ningún registro",
|
||||||
"appLogs": "Registros",
|
"appLogs": "Registros",
|
||||||
"close": "Cerrar",
|
"close": "Cerrar",
|
||||||
@@ -220,11 +220,11 @@
|
|||||||
"versionDetectionExplanation": "Conciliar la cadena de versión con la versión detectada desde el sistema operativo",
|
"versionDetectionExplanation": "Conciliar la cadena de versión con la versión detectada desde el sistema operativo",
|
||||||
"versionDetection": "Detección de versiones",
|
"versionDetection": "Detección de versiones",
|
||||||
"standardVersionDetection": "Por versión",
|
"standardVersionDetection": "Por versión",
|
||||||
"groupByCategory": "Agrupar por categoría",
|
"groupByCategory": "Agrupar por categorías",
|
||||||
"autoApkFilterByArch": "Filtrar APK por arquitectura del procesador (si es posible)",
|
"autoApkFilterByArch": "Filtrar APK por arquitectura del procesador (si es posible)",
|
||||||
"overrideSource": "Forzar desde la fuente",
|
"overrideSource": "Forzar desde la fuente",
|
||||||
"dontShowAgain": "No mostrar de nuevo",
|
"dontShowAgain": "No mostrar de nuevo",
|
||||||
"dontShowTrackOnlyWarnings": "No mostrar avisos sobre apps 'solo para seguimiento",
|
"dontShowTrackOnlyWarnings": "No mostrar avisos sobre apps 'solo para seguimiento'",
|
||||||
"dontShowAPKOriginWarnings": "No mostrar avisos sobre las fuentes de las APKs",
|
"dontShowAPKOriginWarnings": "No mostrar avisos sobre las fuentes de las APKs",
|
||||||
"moveNonInstalledAppsToBottom": "Mover apps no instaladas al final",
|
"moveNonInstalledAppsToBottom": "Mover apps no instaladas al final",
|
||||||
"gitlabPATLabel": "Token de acceso personal a GitLab",
|
"gitlabPATLabel": "Token de acceso personal a GitLab",
|
||||||
@@ -288,7 +288,7 @@
|
|||||||
"supportFixedAPKURL": "Soporte para URLs fijas de APK",
|
"supportFixedAPKURL": "Soporte para URLs fijas de APK",
|
||||||
"selectX": "Elija {}",
|
"selectX": "Elija {}",
|
||||||
"parallelDownloads": "Permitir descargas paralelas",
|
"parallelDownloads": "Permitir descargas paralelas",
|
||||||
"useShizuku": "Use Shizuku o Sui para instalar",
|
"useShizuku": "Usar Shizuku o Sui para instalar",
|
||||||
"shizukuBinderNotFound": "Shizuku no funciona",
|
"shizukuBinderNotFound": "Shizuku no funciona",
|
||||||
"shizukuOld": "Versión antigua de Shizuku (<11) - actualícela",
|
"shizukuOld": "Versión antigua de Shizuku (<11) - actualícela",
|
||||||
"shizukuOldAndroidWithADB": "Shizuku corriendo en Android < 8.1 con ADB - actualiza Android o usa Sui en su lugar",
|
"shizukuOldAndroidWithADB": "Shizuku corriendo en Android < 8.1 con ADB - actualiza Android o usa Sui en su lugar",
|
||||||
@@ -308,7 +308,7 @@
|
|||||||
"note": "Nota",
|
"note": "Nota",
|
||||||
"selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.",
|
"selfHostedNote": "El desplegable «{}» puede usarse para acceder a instancias autoalojadas/personalizadas de cualquier fuente.",
|
||||||
"badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)",
|
"badDownload": "No se ha podido analizar el APK (incompatible o descarga parcial)",
|
||||||
"beforeNewInstallsShareToAppVerifier": "Compartir nuevas aplicaciones con AppVerifier (si está disponible)",
|
"beforeNewInstallsShareToAppVerifier": "Compartir aplicaciones nuevas con AppVerifier (si está disponible)",
|
||||||
"appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
|
"appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
|
||||||
"wiki": "Ayuda/Wiki",
|
"wiki": "Ayuda/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
"unexpectedError": "Erreur inattendue",
|
"unexpectedError": "Erreur inattendue",
|
||||||
"ok": "D'accord",
|
"ok": "D'accord",
|
||||||
"and": "et",
|
"and": "et",
|
||||||
"githubPATLabel": "Jeton d'Accès Personnel GitHub (Augmente la limite de débit)",
|
"githubPATLabel": "Jeton d'Accès Personnel GitHub (augmente la limite de débit)",
|
||||||
"includePrereleases": "Inclure les avant-premières",
|
"includePrereleases": "Inclure les avant-premières",
|
||||||
"fallbackToOlderReleases": "Retour aux anciennes versions",
|
"fallbackToOlderReleases": "Retour aux anciennes versions",
|
||||||
"filterReleaseTitlesByRegEx": "Filtrer les titres de version par expression régulière",
|
"filterReleaseTitlesByRegEx": "Filtrer les titres de version par expression régulière",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"colour": "Couleur",
|
"colour": "Couleur",
|
||||||
"standard": "Standard",
|
"standard": "Standard",
|
||||||
"custom": "Sur mesure",
|
"custom": "Sur mesure",
|
||||||
"useMaterialYou": "Utiliser le matériel que vous",
|
"useMaterialYou": "Utiliser Material You",
|
||||||
"githubStarredRepos": "Dépôts étoilés GitHub",
|
"githubStarredRepos": "Dépôts étoilés GitHub",
|
||||||
"uname": "Nom d'utilisateur",
|
"uname": "Nom d'utilisateur",
|
||||||
"wrongArgNum": "Mauvais nombre d'arguments fournis",
|
"wrongArgNum": "Mauvais nombre d'arguments fournis",
|
||||||
@@ -46,12 +46,12 @@
|
|||||||
"additionalOptsFor": "Options supplémentaires pour {}",
|
"additionalOptsFor": "Options supplémentaires pour {}",
|
||||||
"supportedSources": "Sources prises en charge ",
|
"supportedSources": "Sources prises en charge ",
|
||||||
"trackOnlyInBrackets": "(Suivi uniquement)",
|
"trackOnlyInBrackets": "(Suivi uniquement)",
|
||||||
"searchableInBrackets": "(Intérrogeable)",
|
"searchableInBrackets": "(Interrogeable)",
|
||||||
"appsString": "Applications",
|
"appsString": "Applications",
|
||||||
"noApps": "Aucune application",
|
"noApps": "Aucune application",
|
||||||
"noAppsForFilter": "Aucune application pour le filtre",
|
"noAppsForFilter": "Aucune application pour le filtre",
|
||||||
"byX": "Par {}",
|
"byX": "Par {}",
|
||||||
"percentProgress": "Progrès: {}%",
|
"percentProgress": "Progrès : {}%",
|
||||||
"pleaseWait": "Veuillez patienter",
|
"pleaseWait": "Veuillez patienter",
|
||||||
"updateAvailable": "Mise à jour disponible",
|
"updateAvailable": "Mise à jour disponible",
|
||||||
"notInstalled": "Non installé",
|
"notInstalled": "Non installé",
|
||||||
@@ -67,18 +67,18 @@
|
|||||||
"changeX": "Changer {}",
|
"changeX": "Changer {}",
|
||||||
"installUpdateApps": "Installer/Mettre à jour les applications",
|
"installUpdateApps": "Installer/Mettre à jour les applications",
|
||||||
"installUpdateSelectedApps": "Installer/Mettre à jour les applications sélectionnées",
|
"installUpdateSelectedApps": "Installer/Mettre à jour les applications sélectionnées",
|
||||||
"markXSelectedAppsAsUpdated": "Marquer {} les applications sélectionnées comme étant à jour ?",
|
"markXSelectedAppsAsUpdated": "Marquer {} les applications sélectionnées comme étant à jour ?",
|
||||||
"no": "Non",
|
"no": "Non",
|
||||||
"yes": "Oui",
|
"yes": "Oui",
|
||||||
"markSelectedAppsUpdated": "Marquer les applications sélectionnées comme étant à jour",
|
"markSelectedAppsUpdated": "Marquer les applications sélectionnées comme étant à jour",
|
||||||
"pinToTop": "Épingler en haut",
|
"pinToTop": "Épingler en haut",
|
||||||
"unpinFromTop": "Désépingler du haut",
|
"unpinFromTop": "Désépingler du haut",
|
||||||
"resetInstallStatusForSelectedAppsQuestion": "Réinitialiser le statu d'installation des applications sélectionnées ?",
|
"resetInstallStatusForSelectedAppsQuestion": "Réinitialiser le statut d'installation des applications sélectionnées ?",
|
||||||
"installStatusOfXWillBeResetExplanation": "Le statu d'installation de toutes les applications sélectionnées sera réinitialisé.\n\nCela peut aider lorsque la version de l'application affichée dans Obtainium est incorrecte en raison d'échecs de mises à jour ou d'autres problèmes.",
|
"installStatusOfXWillBeResetExplanation": "Le statut d'installation de toutes les applications sélectionnées sera réinitialisé.\n\nCela peut aider lorsque la version de l'application affichée dans Obtainium est incorrecte en raison d'échecs de mises à jour ou d'autres problèmes.",
|
||||||
"customLinkMessage": "Ces liens fonctionnent sur les appareils sur lesquels Obtainium est installé",
|
"customLinkMessage": "Ces liens fonctionnent sur les appareils sur lesquels Obtainium est installé",
|
||||||
"shareAppConfigLinks": "Partager la configuration de l'application sous forme de lien HTML",
|
"shareAppConfigLinks": "Partager la configuration de l'application sous forme de lien HTML",
|
||||||
"shareSelectedAppURLs": "Partager les URL d'application sélectionnées",
|
"shareSelectedAppURLs": "Partager les URL d'applications sélectionnées",
|
||||||
"resetInstallStatus": "Réinitialiser le statu d'installation",
|
"resetInstallStatus": "Réinitialiser le statut d'installation",
|
||||||
"more": "Plus",
|
"more": "Plus",
|
||||||
"removeOutdatedFilter": "Supprimer le filtre d'application obsolète",
|
"removeOutdatedFilter": "Supprimer le filtre d'application obsolète",
|
||||||
"showOutdatedOnly": "Afficher uniquement les applications obsolètes",
|
"showOutdatedOnly": "Afficher uniquement les applications obsolètes",
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
"importFromURLList": "Importer à partir de la liste d'URL",
|
"importFromURLList": "Importer à partir de la liste d'URL",
|
||||||
"searchQuery": "Requête",
|
"searchQuery": "Requête",
|
||||||
"appURLList": "Liste d'URL d'application",
|
"appURLList": "Liste d'URL d'application",
|
||||||
"line": "Queue",
|
"line": "File d'attente",
|
||||||
"searchX": "Rechercher {}",
|
"searchX": "Rechercher {}",
|
||||||
"noResults": "Aucun résultat trouvé",
|
"noResults": "Aucun résultat trouvé",
|
||||||
"importX": "Importer {}",
|
"importX": "Importer {}",
|
||||||
@@ -107,14 +107,14 @@
|
|||||||
"importedXOfYApps": "{} sur {} applications importées.",
|
"importedXOfYApps": "{} sur {} applications importées.",
|
||||||
"followingURLsHadErrors": "Les URL suivantes comportaient des erreurs :",
|
"followingURLsHadErrors": "Les URL suivantes comportaient des erreurs :",
|
||||||
"selectURL": "Sélectionnez l'URL",
|
"selectURL": "Sélectionnez l'URL",
|
||||||
"selectURLs": "Sélectionnez les URLs",
|
"selectURLs": "Sélectionnez les URL",
|
||||||
"pick": "Prendre",
|
"pick": "Prendre",
|
||||||
"theme": "Thème",
|
"theme": "Thème",
|
||||||
"dark": "Sombre",
|
"dark": "Sombre",
|
||||||
"light": "Clair",
|
"light": "Clair",
|
||||||
"followSystem": "Suivre le système",
|
"followSystem": "Suivre le système",
|
||||||
"followSystemThemeExplanation": "Il n'est possible de suivre le thème du système qu'en utilisant des applications tierces.",
|
"followSystemThemeExplanation": "Il n'est possible de suivre le thème du système qu'en utilisant des applications tierces.",
|
||||||
"useBlackTheme": "Utilisez le thème noir pur",
|
"useBlackTheme": "Utiliser le thème noir pur",
|
||||||
"appSortBy": "Applications triées par",
|
"appSortBy": "Applications triées par",
|
||||||
"authorName": "Auteur/Nom",
|
"authorName": "Auteur/Nom",
|
||||||
"nameAuthor": "Nom/Auteur",
|
"nameAuthor": "Nom/Auteur",
|
||||||
@@ -123,10 +123,10 @@
|
|||||||
"ascending": "Ascendant",
|
"ascending": "Ascendant",
|
||||||
"descending": "Descendant",
|
"descending": "Descendant",
|
||||||
"bgUpdateCheckInterval": "Intervalle de vérification des mises à jour en arrière-plan",
|
"bgUpdateCheckInterval": "Intervalle de vérification des mises à jour en arrière-plan",
|
||||||
"neverManualOnly": "Jamais - Manuel uniquement",
|
"neverManualOnly": "Jamais — Manuel uniquement",
|
||||||
"appearance": "Apparence",
|
"appearance": "Apparence",
|
||||||
"showWebInAppView": "Afficher la page Web source dans la vue de l'application",
|
"showWebInAppView": "Afficher la page Web source dans la vue de l'application",
|
||||||
"pinUpdates": "Épingler les mises à jour dans la vue Top des applications",
|
"pinUpdates": "Épingler les mises à jour en tête de la vue Applications",
|
||||||
"updates": "Mises à jour",
|
"updates": "Mises à jour",
|
||||||
"sourceSpecific": "Spécifique à la source",
|
"sourceSpecific": "Spécifique à la source",
|
||||||
"appSource": "Source de l'application",
|
"appSource": "Source de l'application",
|
||||||
@@ -135,13 +135,13 @@
|
|||||||
"close": "Fermer",
|
"close": "Fermer",
|
||||||
"share": "Partager",
|
"share": "Partager",
|
||||||
"appNotFound": "Application introuvable",
|
"appNotFound": "Application introuvable",
|
||||||
"obtainiumExportHyphenatedLowercase": "exportation d'Obtainium",
|
"obtainiumExportHyphenatedLowercase": "Exportation-Obtainium",
|
||||||
"pickAnAPK": "Choisissez un APK",
|
"pickAnAPK": "Choisissez un APK",
|
||||||
"appHasMoreThanOnePackage": "{} a plus d'un paquet :",
|
"appHasMoreThanOnePackage": "{} a plus d'un paquet :",
|
||||||
"deviceSupportsXArch": "Votre appareil prend en charge l'architecture CPU {}.",
|
"deviceSupportsXArch": "Votre appareil prend en charge l'architecture CPU {}.",
|
||||||
"deviceSupportsFollowingArchs": "Votre appareil prend en charge les architectures CPU suivantes :",
|
"deviceSupportsFollowingArchs": "Votre appareil prend en charge les architectures CPU suivantes :",
|
||||||
"warning": "Avertissement",
|
"warning": "Avertissement",
|
||||||
"sourceIsXButPackageFromYPrompt": "La source de l'application est '{}' mais la version du paquet provient de '{}'. Continuer?",
|
"sourceIsXButPackageFromYPrompt": "La source de l'application est '{}' mais la version du paquet provient de '{}'. Continuer ?",
|
||||||
"updatesAvailable": "Mises à jour disponibles",
|
"updatesAvailable": "Mises à jour disponibles",
|
||||||
"updatesAvailableNotifDescription": "Avertit l'utilisateur que des mises à jour sont disponibles pour une ou plusieurs applications suivies par Obtainium",
|
"updatesAvailableNotifDescription": "Avertit l'utilisateur que des mises à jour sont disponibles pour une ou plusieurs applications suivies par Obtainium",
|
||||||
"noNewUpdates": "Aucune nouvelle mise à jour.",
|
"noNewUpdates": "Aucune nouvelle mise à jour.",
|
||||||
@@ -168,7 +168,7 @@
|
|||||||
"unknown": "Inconnu",
|
"unknown": "Inconnu",
|
||||||
"none": "Aucun",
|
"none": "Aucun",
|
||||||
"never": "Jamais",
|
"never": "Jamais",
|
||||||
"latestVersionX": "Dernière version: {}",
|
"latestVersionX": "Dernière version : {}",
|
||||||
"installedVersionX": "Version installée : {}",
|
"installedVersionX": "Version installée : {}",
|
||||||
"lastUpdateCheckX": "Vérification de la dernière mise à jour : {}",
|
"lastUpdateCheckX": "Vérification de la dernière mise à jour : {}",
|
||||||
"remove": "Retirer",
|
"remove": "Retirer",
|
||||||
@@ -179,15 +179,15 @@
|
|||||||
"appWithIdOrNameNotFound": "Aucune application n'a été trouvée avec cet identifiant ou ce nom",
|
"appWithIdOrNameNotFound": "Aucune application n'a été trouvée avec cet identifiant ou ce nom",
|
||||||
"reposHaveMultipleApps": "Les dépôts peuvent contenir plusieurs applications",
|
"reposHaveMultipleApps": "Les dépôts peuvent contenir plusieurs applications",
|
||||||
"fdroidThirdPartyRepo": "Dépôt tiers F-Droid",
|
"fdroidThirdPartyRepo": "Dépôt tiers F-Droid",
|
||||||
"steamMobile": "Vapeur Mobile",
|
"steamMobile": "Application mobile Steam",
|
||||||
"steamChat": "Chat sur Steam",
|
"steamChat": "Steam Chat",
|
||||||
"install": "Installer",
|
"install": "Installer",
|
||||||
"markInstalled": "Marquer installée",
|
"markInstalled": "Marquer comme installée",
|
||||||
"update": "Mettre à jour",
|
"update": "Mettre à jour",
|
||||||
"markUpdated": "Marquer à jour",
|
"markUpdated": "Marquer comme étant à jour",
|
||||||
"additionalOptions": "Options additionnelles",
|
"additionalOptions": "Options additionnelles",
|
||||||
"disableVersionDetection": "Désactiver la détection de version",
|
"disableVersionDetection": "Désactiver la détection de version",
|
||||||
"noVersionDetectionExplanation": "Cette option ne doit être utilisée que pour les applications où la détection de version ne fonctionne pas correctement.",
|
"noVersionDetectionExplanation": "Cette option être utilisée uniquement pour les applications où la détection de version ne fonctionne pas correctement.",
|
||||||
"downloadingX": "Téléchargement {}",
|
"downloadingX": "Téléchargement {}",
|
||||||
"downloadX": "Télécharger {}",
|
"downloadX": "Télécharger {}",
|
||||||
"downloadedX": "Téléchargé {}",
|
"downloadedX": "Téléchargé {}",
|
||||||
@@ -199,9 +199,9 @@
|
|||||||
"categories": "Catégories",
|
"categories": "Catégories",
|
||||||
"category": "Catégorie",
|
"category": "Catégorie",
|
||||||
"noCategory": "Aucune catégorie",
|
"noCategory": "Aucune catégorie",
|
||||||
"noCategories": "Aucune catégorie",
|
"noCategories": "Aucune catégories",
|
||||||
"deleteCategoriesQuestion": "Supprimer les catégories ?",
|
"deleteCategoriesQuestion": "Supprimer les catégories ?",
|
||||||
"categoryDeleteWarning": "Toutes les applications dans les catégories supprimées seront définies sur non catégorisées.",
|
"categoryDeleteWarning": "Toutes les applications dans les catégories supprimées ne seront plus catégorisées.",
|
||||||
"addCategory": "Ajouter une catégorie",
|
"addCategory": "Ajouter une catégorie",
|
||||||
"label": "Étiquette",
|
"label": "Étiquette",
|
||||||
"language": "Langue",
|
"language": "Langue",
|
||||||
@@ -221,18 +221,18 @@
|
|||||||
"versionDetection": "Détection des versions",
|
"versionDetection": "Détection des versions",
|
||||||
"standardVersionDetection": "Détection de version standard",
|
"standardVersionDetection": "Détection de version standard",
|
||||||
"groupByCategory": "Regrouper par catégorie",
|
"groupByCategory": "Regrouper par catégorie",
|
||||||
"autoApkFilterByArch": "Si possible, essayez de filtrer les APK par architecture CPU",
|
"autoApkFilterByArch": "Si possible, essayer de filtrer les APK par architecture CPU",
|
||||||
"overrideSource": "Remplacer la source",
|
"overrideSource": "Remplacer la source",
|
||||||
"dontShowAgain": "Ne plus montrer",
|
"dontShowAgain": "Ne plus montrer",
|
||||||
"dontShowTrackOnlyWarnings": "Ne pas afficher l'avertissement 'Track-Only'",
|
"dontShowTrackOnlyWarnings": "Ne pas afficher l'avertissement 'Suivi uniquement'",
|
||||||
"dontShowAPKOriginWarnings": "Ne pas afficher les avertissements sur l'origine de l'APK",
|
"dontShowAPKOriginWarnings": "Ne pas afficher les avertissements sur l'origine de l'APK",
|
||||||
"moveNonInstalledAppsToBottom": "Déplacer les applications non installées vers le bas de la vue Applications",
|
"moveNonInstalledAppsToBottom": "Déplacer les applications non installées vers le bas de la vue Applications",
|
||||||
"gitlabPATLabel": "Jeton d'accès personnel GitLab",
|
"gitlabPATLabel": "Jeton d'accès personnel GitLab",
|
||||||
"about": "À propos de",
|
"about": "À propos de",
|
||||||
"requiresCredentialsInSettings": "{}: Cela nécessite des identifiants supplémentaires (dans Paramètres)",
|
"requiresCredentialsInSettings": "{} : Cela nécessite des identifiants supplémentaires (dans Paramètres)",
|
||||||
"checkOnStart": "Vérifier les mises à jour au démarrage",
|
"checkOnStart": "Vérifier les mises à jour au démarrage",
|
||||||
"tryInferAppIdFromCode": "Essayez de déduire l'ID de l'application à partir du code source",
|
"tryInferAppIdFromCode": "Essayer de déduire l'ID de l'application à partir du code source",
|
||||||
"removeOnExternalUninstall": "Supprimer automatiquement les applications désinstallées en externe",
|
"removeOnExternalUninstall": "Supprimer automatiquement les applications désinstallées depuis l'extérieur",
|
||||||
"pickHighestVersionCode": "Sélectionner automatiquement le code de version de l'APK la plus élevée",
|
"pickHighestVersionCode": "Sélectionner automatiquement le code de version de l'APK la plus élevée",
|
||||||
"checkUpdateOnDetailPage": "Vérifier les mises à jour lors de l'ouverture de la page détaillée d'une application",
|
"checkUpdateOnDetailPage": "Vérifier les mises à jour lors de l'ouverture de la page détaillée d'une application",
|
||||||
"disablePageTransitions": "Désactiver les animations de transition de page",
|
"disablePageTransitions": "Désactiver les animations de transition de page",
|
||||||
@@ -246,18 +246,18 @@
|
|||||||
"customLinkFilterRegex": "Filtre du lien APK personnalisé par expression régulière (par défaut '.apk$')",
|
"customLinkFilterRegex": "Filtre du lien APK personnalisé par expression régulière (par défaut '.apk$')",
|
||||||
"appsPossiblyUpdated": "Tentative de mise à jour de l'application",
|
"appsPossiblyUpdated": "Tentative de mise à jour de l'application",
|
||||||
"appsPossiblyUpdatedNotifDescription": "Avertit l'utilisateur que des mises à jour d'une ou plusieurs applications ont été potentiellement appliquées en arrière-plan",
|
"appsPossiblyUpdatedNotifDescription": "Avertit l'utilisateur que des mises à jour d'une ou plusieurs applications ont été potentiellement appliquées en arrière-plan",
|
||||||
"xWasPossiblyUpdatedToY": "{} a peut-être été mis à jour vers {}.",
|
"xWasPossiblyUpdatedToY": "{} pourrait avoir été mis à jour vers {}.",
|
||||||
"enableBackgroundUpdates": "Activer les mises à jour en arrière-plan",
|
"enableBackgroundUpdates": "Activer les mises à jour en arrière-plan",
|
||||||
"backgroundUpdateReqsExplanation": "Les mises à jour en arrière-plan peuvent ne pas être possibles pour toutes les applications.",
|
"backgroundUpdateReqsExplanation": "Les mises à jour en arrière-plan peuvent ne pas être possibles pour toutes les applications.",
|
||||||
"backgroundUpdateLimitsExplanation": "Le succès d'une installation en arrière-plan ne peut être déterminé qu'à l'ouverture d'Obtainium.",
|
"backgroundUpdateLimitsExplanation": "Le succès d'une installation en arrière-plan ne peut être déterminé qu'à l'ouverture d'Obtainium.",
|
||||||
"verifyLatestTag": "Vérifiez la balise 'Latest'",
|
"verifyLatestTag": "Vérifier la balise 'latest'",
|
||||||
"intermediateLinkRegex": " Filtrer un lien \" intermédiaire \" à visiter ",
|
"intermediateLinkRegex": " Filtrer un lien \" intermédiaire \" à visiter ",
|
||||||
"filterByLinkText": "Filtrer les liens par le texte du lien",
|
"filterByLinkText": "Filtrer les liens par le texte du lien",
|
||||||
"intermediateLinkNotFound": "Lien intermédiaire introuvable",
|
"intermediateLinkNotFound": "Lien intermédiaire introuvable",
|
||||||
"intermediateLink": "Lien intermédiaire",
|
"intermediateLink": "Lien intermédiaire",
|
||||||
"exemptFromBackgroundUpdates": "Exempté des mises à jour en arrière-plan (si activé)",
|
"exemptFromBackgroundUpdates": "Exempté des mises à jour en arrière-plan (si activé)",
|
||||||
"bgUpdatesOnWiFiOnly": "Désactiver les mises à jour en arrière-plan lorsque vous n'êtes pas connecté au WiFi",
|
"bgUpdatesOnWiFiOnly": "Désactiver les mises à jour en arrière-plan lorsque vous n'êtes pas connecté au WiFi",
|
||||||
"autoSelectHighestVersionCode": "Sélection automatique du code de version de l'APK la plus élevée",
|
"autoSelectHighestVersionCode": "Sélection automatique du code de version le plus élevé de l'APK",
|
||||||
"versionExtractionRegEx": "Expression régulière d'extraction de version",
|
"versionExtractionRegEx": "Expression régulière d'extraction de version",
|
||||||
"matchGroupToUse": "Groupe de correspondance pour l'expression régulière d'extraction de version",
|
"matchGroupToUse": "Groupe de correspondance pour l'expression régulière d'extraction de version",
|
||||||
"highlightTouchTargets": "Mettre en évidence les cibles tactiles moins évidentes",
|
"highlightTouchTargets": "Mettre en évidence les cibles tactiles moins évidentes",
|
||||||
@@ -265,13 +265,13 @@
|
|||||||
"autoExportOnChanges": "Exporter automatiquement après modification",
|
"autoExportOnChanges": "Exporter automatiquement après modification",
|
||||||
"includeSettings": "Inclure les paramètres",
|
"includeSettings": "Inclure les paramètres",
|
||||||
"filterVersionsByRegEx": "Filtrer les versions par expression régulière",
|
"filterVersionsByRegEx": "Filtrer les versions par expression régulière",
|
||||||
"trySelectingSuggestedVersionCode": "Essayez de sélectionner le code de la version APK suggérée",
|
"trySelectingSuggestedVersionCode": "Essayer de sélectionner le code de la version suggérée de l'APK",
|
||||||
"dontSortReleasesList": "Conserver l'ordre des version de l'API",
|
"dontSortReleasesList": "Conserver l'ordre des versions de l'API",
|
||||||
"reverseSort": "Tri inversé",
|
"reverseSort": "Tri inversé",
|
||||||
"takeFirstLink": "Prendre le premier lien",
|
"takeFirstLink": "Prendre le premier lien",
|
||||||
"skipSort": "Sauter le tri",
|
"skipSort": "Éviter le tri",
|
||||||
"debugMenu": "Menu de débogage",
|
"debugMenu": "Menu de débogage",
|
||||||
"bgTaskStarted": "Tâche en arrière-plan démarrée - vérifier les journaux.",
|
"bgTaskStarted": "Tâche en arrière-plan démarrée — vérifier les journaux.",
|
||||||
"runBgCheckNow": "Exécuter maintenant la vérification de la mise à jour en arrière-plan",
|
"runBgCheckNow": "Exécuter maintenant la vérification de la mise à jour en arrière-plan",
|
||||||
"versionExtractWholePage": "Appliquer l'expression régulière d'extraction de version sur l'ensemble de la page",
|
"versionExtractWholePage": "Appliquer l'expression régulière d'extraction de version sur l'ensemble de la page",
|
||||||
"installing": "Installation",
|
"installing": "Installation",
|
||||||
@@ -284,14 +284,14 @@
|
|||||||
"downloadingXNotifChannel": "Téléchargement {}",
|
"downloadingXNotifChannel": "Téléchargement {}",
|
||||||
"completeAppInstallationNotifChannel": "Installation complète de l'application",
|
"completeAppInstallationNotifChannel": "Installation complète de l'application",
|
||||||
"checkingForUpdatesNotifChannel": "Vérification des mises à jour",
|
"checkingForUpdatesNotifChannel": "Vérification des mises à jour",
|
||||||
"onlyCheckInstalledOrTrackOnlyApps": "Vérifiez uniquement les mises à jour des applications installées et 'Track-Only'",
|
"onlyCheckInstalledOrTrackOnlyApps": "Vérifier uniquement les mises à jour des applications installées et 'Suivi uniquement'",
|
||||||
"supportFixedAPKURL": "Prise en charge des URL APK fixes",
|
"supportFixedAPKURL": "Prise en charge des URL APK fixes",
|
||||||
"selectX": "Sélectionner {}",
|
"selectX": "Sélectionner {}",
|
||||||
"parallelDownloads": "Autoriser les téléchargements parallèles",
|
"parallelDownloads": "Autoriser le téléchargement en parallèle",
|
||||||
"useShizuku": "Utiliser Shizuku ou Sui pour l'installation",
|
"useShizuku": "Utiliser Shizuku ou Sui pour l'installation",
|
||||||
"shizukuBinderNotFound": "Service Shizuku compatible non trouvé",
|
"shizukuBinderNotFound": "Service Shizuku compatible non trouvé",
|
||||||
"shizukuOld": "Ancienne version de Shizuku (<11) - la mettre à jour",
|
"shizukuOld": "Ancienne version de Shizuku (<11) — la mettre à jour",
|
||||||
"shizukuOldAndroidWithADB": "Shizuku fonctionne sur Android < 8.1 avec ADB - mettre à jour Android ou utiliser Sui à la place",
|
"shizukuOldAndroidWithADB": "Shizuku fonctionne sur Android < 8.1 avec ADB — mettez à jour Android ou utilisez Sui à la place",
|
||||||
"shizukuPretendToBeGooglePlay": "Définir Google Play comme source d'installation (si Shizuku est utilisé)",
|
"shizukuPretendToBeGooglePlay": "Définir Google Play comme source d'installation (si Shizuku est utilisé)",
|
||||||
"useSystemFont": "Utiliser la police du système",
|
"useSystemFont": "Utiliser la police du système",
|
||||||
"useVersionCodeAsOSVersion": "Utiliser le code de version de l'application comme version détectée par le système d'exploitation",
|
"useVersionCodeAsOSVersion": "Utiliser le code de version de l'application comme version détectée par le système d'exploitation",
|
||||||
@@ -311,22 +311,22 @@
|
|||||||
"beforeNewInstallsShareToAppVerifier": "Partager les nouvelles applications avec AppVerifier (si disponible)",
|
"beforeNewInstallsShareToAppVerifier": "Partager les nouvelles applications avec AppVerifier (si disponible)",
|
||||||
"appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque vous êtes prêt.",
|
"appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque vous êtes prêt.",
|
||||||
"wiki": "Aide/Wiki",
|
"wiki": "Aide/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Configurations d'applications par la foule (utilisation à vos risques et périls)",
|
"crowdsourcedConfigsLabel": "Configurations d'applications participative (utilisation à vos risques et périls)",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
},
|
},
|
||||||
"tooManyRequestsTryAgainInMinutes": {
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
"one": "Trop de demandes (taux limité) - réessayez dans {} minute",
|
"one": "Trop de demandes (taux limité) — réessayez dans {} minute",
|
||||||
"other": "Trop de demandes (taux limité) - réessayez dans {} minutes"
|
"other": "Trop de demandes (taux limité) — réessayez dans {} minutes"
|
||||||
},
|
},
|
||||||
"bgUpdateGotErrorRetryInMinutes": {
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
"one": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minute",
|
"one": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minute",
|
||||||
"other": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minute"
|
"other": "La vérification de la mise à jour en arrière-plan a rencontré un {}, une nouvelle tentative de vérification sera planifié dans {} minutes"
|
||||||
},
|
},
|
||||||
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
||||||
"one": "La vérification des mises à jour en arrière-plan a trouvée {} mise à jour - l'utilisateur sera notifié si nécessaire",
|
"one": "La vérification des mises à jour en arrière-plan a trouvée {} mise à jour — l'utilisateur sera notifié si nécessaire",
|
||||||
"other": "La vérification des mises à jour en arrière-plan a trouvé {} mises à jour - l'utilisateur sera notifié si nécessaire"
|
"other": "La vérification des mises à jour en arrière-plan a trouvée {} mises à jour — l'utilisateur sera notifié si nécessaire"
|
||||||
},
|
},
|
||||||
"apps": {
|
"apps": {
|
||||||
"one": "{} Application",
|
"one": "{} Application",
|
||||||
@@ -365,8 +365,8 @@
|
|||||||
"other": "Échec de la mise à jour de {} et {} autres applications."
|
"other": "Échec de la mise à jour de {} et {} autres applications."
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesPossiblyInstalled": {
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
"une": "{} et 1 application supplémentaire ont peut-être été mises à jour.",
|
"une": "{} et 1 application supplémentaire pourraient avoir été mises à jour.",
|
||||||
"other": "{} et {} autres applications peuvent avoir été mises à jour."
|
"other": "{} et {} autres applications pourraient avoir été mises à jour."
|
||||||
},
|
},
|
||||||
"apk": {
|
"apk": {
|
||||||
"one": "{} APK",
|
"one": "{} APK",
|
||||||
|
375
assets/translations/zh-TW.json
Normal file
375
assets/translations/zh-TW.json
Normal file
@@ -0,0 +1,375 @@
|
|||||||
|
{
|
||||||
|
"invalidURLForSource": "不是有效的 {} 應用程式 URL",
|
||||||
|
"noReleaseFound": "找不到合適的版本",
|
||||||
|
"noVersionFound": "無法確定版本",
|
||||||
|
"urlMatchesNoSource": "URL 不符合已知來源",
|
||||||
|
"cantInstallOlderVersion": "無法安裝舊版本的應用程式",
|
||||||
|
"appIdMismatch": "下載的套件 ID 與現有的應用程式 ID 不匹配",
|
||||||
|
"functionNotImplemented": "此類別尚未實作此功能",
|
||||||
|
"placeholder": "佔位",
|
||||||
|
"someErrors": "發生了一些錯誤",
|
||||||
|
"unexpectedError": "意外錯誤",
|
||||||
|
"ok": "確定",
|
||||||
|
"and": "和",
|
||||||
|
"githubPATLabel": "GitHub 個人存取權杖(增加速率限制)",
|
||||||
|
"includePrereleases": "包含預發佈版本",
|
||||||
|
"fallbackToOlderReleases": "回退到舊版本",
|
||||||
|
"filterReleaseTitlesByRegEx": "用正則表達式過濾版本標題",
|
||||||
|
"invalidRegEx": "無效的正則表達式",
|
||||||
|
"noDescription": "無描述",
|
||||||
|
"cancel": "取消",
|
||||||
|
"continue": "繼續",
|
||||||
|
"requiredInBrackets": "(必填)",
|
||||||
|
"dropdownNoOptsError": "錯誤:下拉選單必須至少有一個選項",
|
||||||
|
"colour": "顏色",
|
||||||
|
"standard": "標準",
|
||||||
|
"custom": "自訂",
|
||||||
|
"useMaterialYou": "使用 Material You",
|
||||||
|
"githubStarredRepos": "GitHub Starred Repos",
|
||||||
|
"uname": "使用者名稱",
|
||||||
|
"wrongArgNum": "提供的參數數量錯誤",
|
||||||
|
"xIsTrackOnly": "{} 是僅追蹤",
|
||||||
|
"source": "來源",
|
||||||
|
"app": "應用程式",
|
||||||
|
"appsFromSourceAreTrackOnly": "來自此來源的應用程式是「僅追蹤」。",
|
||||||
|
"youPickedTrackOnly": "您已選擇「僅追蹤」選項。",
|
||||||
|
"trackOnlyAppDescription": "該應用程式將被追蹤更新,但 Obtainium 將無法下載或安裝它。",
|
||||||
|
"cancelled": "已取消",
|
||||||
|
"appAlreadyAdded": "應用程式已添加",
|
||||||
|
"alreadyUpToDateQuestion": "應用程式已經是最新的?",
|
||||||
|
"addApp": "添加應用程式",
|
||||||
|
"appSourceURL": "應用程式來源 URL",
|
||||||
|
"error": "錯誤",
|
||||||
|
"add": "添加",
|
||||||
|
"searchSomeSourcesLabel": "搜尋(僅限部分來源)",
|
||||||
|
"search": "搜尋",
|
||||||
|
"additionalOptsFor": "{} 的其他選項",
|
||||||
|
"supportedSources": "支持的來源",
|
||||||
|
"trackOnlyInBrackets": "(僅追蹤)",
|
||||||
|
"searchableInBrackets": "(可搜尋)",
|
||||||
|
"appsString": "應用程式",
|
||||||
|
"noApps": "無應用程式",
|
||||||
|
"noAppsForFilter": "無符合過濾條件的應用程式",
|
||||||
|
"byX": "由 {}",
|
||||||
|
"percentProgress": "進度:{}%",
|
||||||
|
"pleaseWait": "請稍候",
|
||||||
|
"updateAvailable": "有可用的更新",
|
||||||
|
"notInstalled": "未安裝",
|
||||||
|
"pseudoVersion": "偽版本",
|
||||||
|
"selectAll": "全選",
|
||||||
|
"deselectX": "取消選取 {}",
|
||||||
|
"xWillBeRemovedButRemainInstalled": "{} 將從 Obtainium 中移除,但仍然安裝在設備上。",
|
||||||
|
"removeSelectedAppsQuestion": "移除選取的應用程式?",
|
||||||
|
"removeSelectedApps": "移除選取的應用程式",
|
||||||
|
"updateX": "更新 {}",
|
||||||
|
"installX": "安裝 {}",
|
||||||
|
"markXTrackOnlyAsUpdated": "標記 {}\n(僅追蹤)\n為已更新",
|
||||||
|
"changeX": "更改 {}",
|
||||||
|
"installUpdateApps": "安裝/更新應用程式",
|
||||||
|
"installUpdateSelectedApps": "安裝/更新選取的應用程式",
|
||||||
|
"markXSelectedAppsAsUpdated": "標記 {} 個選取的應用程式為已更新?",
|
||||||
|
"no": "否",
|
||||||
|
"yes": "是",
|
||||||
|
"markSelectedAppsUpdated": "標記選取的應用程式為已更新",
|
||||||
|
"pinToTop": "釘選到頂部",
|
||||||
|
"unpinFromTop": "取消釘選",
|
||||||
|
"resetInstallStatusForSelectedAppsQuestion": "重設選取應用程式的安裝狀態?",
|
||||||
|
"installStatusOfXWillBeResetExplanation": "任何選取應用程式的安裝狀態將被重設。\n\n這可以在由於更新失敗或其他問題導致 Obtainium 顯示的應用程式版本不正確時有所幫助。",
|
||||||
|
"customLinkMessage": "這些連結適用於已安裝 Obtainium 的設備",
|
||||||
|
"shareAppConfigLinks": "分享應用程式配置為 HTML 連結",
|
||||||
|
"shareSelectedAppURLs": "分享選取的應用程式 URL",
|
||||||
|
"resetInstallStatus": "重設安裝狀態",
|
||||||
|
"more": "更多",
|
||||||
|
"removeOutdatedFilter": "移除過時應用程式過濾",
|
||||||
|
"showOutdatedOnly": "僅顯示過時的應用程式",
|
||||||
|
"filter": "過濾",
|
||||||
|
"filterApps": "過濾應用程式",
|
||||||
|
"appName": "應用程式名稱",
|
||||||
|
"author": "作者",
|
||||||
|
"upToDateApps": "最新的應用程式",
|
||||||
|
"nonInstalledApps": "未安裝的應用程式",
|
||||||
|
"importExport": "匯入/匯出",
|
||||||
|
"settings": "設定",
|
||||||
|
"exportedTo": "匯出到 {}",
|
||||||
|
"obtainiumExport": "Obtainium 匯出",
|
||||||
|
"invalidInput": "無效的輸入",
|
||||||
|
"importedX": "已匯入 {}",
|
||||||
|
"obtainiumImport": "Obtainium 匯入",
|
||||||
|
"importFromURLList": "從 URL 列表匯入",
|
||||||
|
"searchQuery": "搜尋查詢",
|
||||||
|
"appURLList": "應用程式 URL 清單",
|
||||||
|
"line": "行",
|
||||||
|
"searchX": "搜尋 {}",
|
||||||
|
"noResults": "未找到結果",
|
||||||
|
"importX": "匯入 {}",
|
||||||
|
"importedAppsIdDisclaimer": "匯入的應用程式可能會錯誤地顯示為「未安裝」。\n要修正此問題,請通過 Obtainium 重新安裝它們。\n這不應該影響應用程式數據。\n\n僅影響 URL 和第三方匯入方法。",
|
||||||
|
"importErrors": "匯入錯誤",
|
||||||
|
"importedXOfYApps": "已匯入 {} 個中的 {} 個應用程式。",
|
||||||
|
"followingURLsHadErrors": "以下 URL 有錯誤:",
|
||||||
|
"selectURL": "選擇 URL",
|
||||||
|
"selectURLs": "選擇多個 URL",
|
||||||
|
"pick": "選取",
|
||||||
|
"theme": "主題",
|
||||||
|
"dark": "深色",
|
||||||
|
"light": "淺色",
|
||||||
|
"followSystem": "跟隨系統",
|
||||||
|
"followSystemThemeExplanation": "僅使用第三方應用程式時才可跟隨系統主題",
|
||||||
|
"useBlackTheme": "使用純黑色深色主題",
|
||||||
|
"appSortBy": "應用程式排序依據",
|
||||||
|
"authorName": "作者/名稱",
|
||||||
|
"nameAuthor": "名稱/作者",
|
||||||
|
"asAdded": "添加順序",
|
||||||
|
"appSortOrder": "應用程式排序順序",
|
||||||
|
"ascending": "升序",
|
||||||
|
"descending": "降序",
|
||||||
|
"bgUpdateCheckInterval": "背景更新檢查間隔",
|
||||||
|
"neverManualOnly": "從不 - 僅手動",
|
||||||
|
"appearance": "外觀",
|
||||||
|
"showWebInAppView": "在應用程式檢視中顯示來源網頁",
|
||||||
|
"pinUpdates": "將更新釘選至應用程式檢視的頂端",
|
||||||
|
"updates": "更新",
|
||||||
|
"sourceSpecific": "特定來源",
|
||||||
|
"appSource": "應用程式來源",
|
||||||
|
"noLogs": "無日誌",
|
||||||
|
"appLogs": "應用程式日誌",
|
||||||
|
"close": "關閉",
|
||||||
|
"share": "分享",
|
||||||
|
"appNotFound": "未找到應用程式",
|
||||||
|
"obtainiumExportHyphenatedLowercase": "obtainium-export",
|
||||||
|
"pickAnAPK": "選擇一個 APK",
|
||||||
|
"appHasMoreThanOnePackage": "{} 有多個套件:",
|
||||||
|
"deviceSupportsXArch": "您的設備支持 {} CPU 架構。",
|
||||||
|
"deviceSupportsFollowingArchs": "您的設備支持以下 CPU 架構:",
|
||||||
|
"warning": "警告",
|
||||||
|
"sourceIsXButPackageFromYPrompt": "應用程式來源是 「{}」,但發佈套件來自 「{}」。要繼續嗎?",
|
||||||
|
"updatesAvailable": "有可用的更新",
|
||||||
|
"updatesAvailableNotifDescription": "通知使用者有一個或多個由 Obtainium 追蹤的應用程式有更新",
|
||||||
|
"noNewUpdates": "沒有新更新。",
|
||||||
|
"xHasAnUpdate": "{} 有一個更新。",
|
||||||
|
"appsUpdated": "應用程式已更新",
|
||||||
|
"appsNotUpdated": "未能更新應用程式",
|
||||||
|
"appsUpdatedNotifDescription": "通知使用者一個或多個應用程式的更新已在背景中應用",
|
||||||
|
"xWasUpdatedToY": "{} 已更新到 {}。",
|
||||||
|
"xWasNotUpdatedToY": "未能將 {} 更新到 {}。",
|
||||||
|
"errorCheckingUpdates": "檢查更新時出錯",
|
||||||
|
"errorCheckingUpdatesNotifDescription": "背景檢查更新失敗時顯示的通知",
|
||||||
|
"appsRemoved": "應用程式已移除",
|
||||||
|
"appsRemovedNotifDescription": "通知使用者由於載入時出錯,一個或多個應用程式已被移除",
|
||||||
|
"xWasRemovedDueToErrorY": "{} 已因以下錯誤被移除:{}",
|
||||||
|
"completeAppInstallation": "完成應用程式安裝",
|
||||||
|
"obtainiumMustBeOpenToInstallApps": "Obtainium 必須開啟才能安裝應用程式",
|
||||||
|
"completeAppInstallationNotifDescription": "請使用者返回 Obtainium 以完成應用程式安裝",
|
||||||
|
"checkingForUpdates": "正在檢查更新",
|
||||||
|
"checkingForUpdatesNotifDescription": "檢查更新時顯示的暫時性通知",
|
||||||
|
"pleaseAllowInstallPerm": "請允許 Obtainium 安裝應用程式",
|
||||||
|
"trackOnly": "僅追蹤",
|
||||||
|
"errorWithHttpStatusCode": "錯誤 {}",
|
||||||
|
"versionCorrectionDisabled": "版本校正已禁用(外掛程式似乎無法正常工作)",
|
||||||
|
"unknown": "未知",
|
||||||
|
"none": "無",
|
||||||
|
"never": "從不",
|
||||||
|
"latestVersionX": "最新版本:{}",
|
||||||
|
"installedVersionX": "已安裝版本:{}",
|
||||||
|
"lastUpdateCheckX": "上次檢查更新時間:{}",
|
||||||
|
"remove": "移除",
|
||||||
|
"yesMarkUpdated": "是,標記為已更新",
|
||||||
|
"fdroid": "F-Droid 官方",
|
||||||
|
"appIdOrName": "應用程式 ID 或名稱",
|
||||||
|
"appId": "應用程式 ID",
|
||||||
|
"appWithIdOrNameNotFound": "找不到具有該 ID 或名稱的應用程式",
|
||||||
|
"reposHaveMultipleApps": "倉庫可能包含多個應用程式",
|
||||||
|
"fdroidThirdPartyRepo": "F-Droid 第三方倉庫",
|
||||||
|
"steamMobile": "Steam 行動版",
|
||||||
|
"steamChat": "Steam 聊天",
|
||||||
|
"install": "安裝",
|
||||||
|
"markInstalled": "標記為已安裝",
|
||||||
|
"update": "更新",
|
||||||
|
"markUpdated": "標記為已更新",
|
||||||
|
"additionalOptions": "額外選項",
|
||||||
|
"disableVersionDetection": "禁用版本檢測",
|
||||||
|
"noVersionDetectionExplanation": "此選項僅應用於版本檢測無法正確工作的應用程式。",
|
||||||
|
"downloadingX": "正在下載 {}",
|
||||||
|
"downloadX": "下載 {}",
|
||||||
|
"downloadedX": "已下載 {}",
|
||||||
|
"releaseAsset": "發佈資源",
|
||||||
|
"downloadNotifDescription": "通知使用者應用程式下載進度",
|
||||||
|
"noAPKFound": "未找到 APK",
|
||||||
|
"noVersionDetection": "無版本檢測",
|
||||||
|
"categorize": "分類",
|
||||||
|
"categories": "類別",
|
||||||
|
"category": "類別",
|
||||||
|
"noCategory": "無類別",
|
||||||
|
"noCategories": "無類別",
|
||||||
|
"deleteCategoriesQuestion": "刪除類別?",
|
||||||
|
"categoryDeleteWarning": "所有在已刪除類別中的應用程式將被設置為未分類。",
|
||||||
|
"addCategory": "新增類別",
|
||||||
|
"label": "標籤",
|
||||||
|
"language": "語言",
|
||||||
|
"copiedToClipboard": "已複製到剪貼簿",
|
||||||
|
"storagePermissionDenied": "存取權限被拒絕",
|
||||||
|
"selectedCategorizeWarning": "這將替換選取應用程式的任何現有類別設置。",
|
||||||
|
"filterAPKsByRegEx": "用正則表達式過濾 APK",
|
||||||
|
"removeFromObtainium": "從 Obtainium 移除",
|
||||||
|
"uninstallFromDevice": "從設備解除安裝",
|
||||||
|
"onlyWorksWithNonVersionDetectApps": "僅適用於禁用版本檢測的應用程式。",
|
||||||
|
"releaseDateAsVersion": "使用發佈日期作為版本字串",
|
||||||
|
"releaseDateAsVersionExplanation": "此選項僅應用於版本檢測無法正確工作但有發佈日期的應用程式。",
|
||||||
|
"changes": "變更",
|
||||||
|
"releaseDate": "發佈日期",
|
||||||
|
"importFromURLsInFile": "從文件中的 URL 匯入(如 OPML)",
|
||||||
|
"versionDetectionExplanation": "將版本字串與作業系統檢測到的版本對比",
|
||||||
|
"versionDetection": "版本檢測",
|
||||||
|
"standardVersionDetection": "標準版本檢測",
|
||||||
|
"groupByCategory": "按類別分組",
|
||||||
|
"autoApkFilterByArch": "如果可能,嘗試按 CPU 架構過濾 APK",
|
||||||
|
"overrideSource": "覆蓋來源",
|
||||||
|
"dontShowAgain": "不要再顯示",
|
||||||
|
"dontShowTrackOnlyWarnings": "不要顯示「僅追蹤」警告",
|
||||||
|
"dontShowAPKOriginWarnings": "不要顯示 APK 來源警告",
|
||||||
|
"moveNonInstalledAppsToBottom": "將未安裝的應用程式移到應用程式視圖的底部",
|
||||||
|
"gitlabPATLabel": "GitLab 個人存取權杖",
|
||||||
|
"about": "關於",
|
||||||
|
"requiresCredentialsInSettings": "{} 需要額外的憑證(在設定中)",
|
||||||
|
"checkOnStart": "啟動時檢查更新",
|
||||||
|
"tryInferAppIdFromCode": "嘗試從原始碼推斷應用程式 ID",
|
||||||
|
"removeOnExternalUninstall": "自動移除外部解除安裝的應用程式",
|
||||||
|
"pickHighestVersionCode": "自動選取最高版本號的 APK",
|
||||||
|
"checkUpdateOnDetailPage": "在打開應用程式詳細頁面時檢查更新",
|
||||||
|
"disablePageTransitions": "禁用頁面過渡動畫",
|
||||||
|
"reversePageTransitions": "反轉頁面過渡動畫",
|
||||||
|
"minStarCount": "最少星數",
|
||||||
|
"addInfoBelow": "在下方添加此資訊。",
|
||||||
|
"addInfoInSettings": "在設定中增加此資訊。",
|
||||||
|
"githubSourceNote": "使用 API 金鑰可以避免 GitHub 的速率限制。",
|
||||||
|
"sortByLastLinkSegment": "僅按連結的最後一段排序",
|
||||||
|
"filterReleaseNotesByRegEx": "用正則表達式過濾發佈說明",
|
||||||
|
"customLinkFilterRegex": "自定 APK 連結過濾正則表達式(預設為 '.apk$')",
|
||||||
|
"appsPossiblyUpdated": "嘗試更新應用程式",
|
||||||
|
"appsPossiblyUpdatedNotifDescription": "通知使用者一個或多個應用程式的更新可能已在背景中應用",
|
||||||
|
"xWasPossiblyUpdatedToY": "{} 可能已更新到 {}。",
|
||||||
|
"enableBackgroundUpdates": "啟用背景更新",
|
||||||
|
"backgroundUpdateReqsExplanation": "並非所有應用程式都能進行背景更新。",
|
||||||
|
"backgroundUpdateLimitsExplanation": "背景安裝的成功與否只能在打開 Obtainium 時確定。",
|
||||||
|
"verifyLatestTag": "驗證「最新」標籤",
|
||||||
|
"intermediateLinkRegex": "過濾要訪問的「中間」連結",
|
||||||
|
"filterByLinkText": "按連結文本過濾連結",
|
||||||
|
"intermediateLinkNotFound": "未找到中間連結",
|
||||||
|
"intermediateLink": "中間連結",
|
||||||
|
"exemptFromBackgroundUpdates": "免除背景更新(若已啟用)",
|
||||||
|
"bgUpdatesOnWiFiOnly": "禁用非 WiFi 的背景更新",
|
||||||
|
"autoSelectHighestVersionCode": "自動選擇最高 versionCode 的 APK",
|
||||||
|
"versionExtractionRegEx": "版本字串提取正則表達式",
|
||||||
|
"matchGroupToUse": "要用於版本字串提取的匹配組",
|
||||||
|
"highlightTouchTargets": "突出顯示不明顯的觸控目標",
|
||||||
|
"pickExportDir": "選擇匯出目錄",
|
||||||
|
"autoExportOnChanges": "更改時自動匯出",
|
||||||
|
"includeSettings": "包含設定",
|
||||||
|
"filterVersionsByRegEx": "用正則表達式過濾版本",
|
||||||
|
"trySelectingSuggestedVersionCode": "嘗試選擇建議的 versionCode APK",
|
||||||
|
"dontSortReleasesList": "保留 API 的發佈順序",
|
||||||
|
"reverseSort": "反向排序",
|
||||||
|
"takeFirstLink": "使用第一個連結",
|
||||||
|
"skipSort": "跳過排序",
|
||||||
|
"debugMenu": "除錯選單",
|
||||||
|
"bgTaskStarted": "背景任務已啟動 - 檢查日誌。",
|
||||||
|
"runBgCheckNow": "立即執行背景更新檢查",
|
||||||
|
"versionExtractWholePage": "將版本字串提取正則表達式應用於整個頁面",
|
||||||
|
"installing": "正在安裝",
|
||||||
|
"skipUpdateNotifications": "跳過更新通知",
|
||||||
|
"updatesAvailableNotifChannel": "有可用的更新",
|
||||||
|
"appsUpdatedNotifChannel": "應用程式已更新",
|
||||||
|
"appsPossiblyUpdatedNotifChannel": "嘗試更新應用程式",
|
||||||
|
"errorCheckingUpdatesNotifChannel": "檢查更新錯誤",
|
||||||
|
"appsRemovedNotifChannel": "應用程式已移除",
|
||||||
|
"downloadingXNotifChannel": "正在下載 {}",
|
||||||
|
"completeAppInstallationNotifChannel": "完成應用程式安裝",
|
||||||
|
"checkingForUpdatesNotifChannel": "正在檢查更新",
|
||||||
|
"onlyCheckInstalledOrTrackOnlyApps": "僅檢查已安裝和僅追蹤的應用程式更新",
|
||||||
|
"supportFixedAPKURL": "支援固定的 APK 網址",
|
||||||
|
"selectX": "選擇 {}",
|
||||||
|
"parallelDownloads": "允許平行下載",
|
||||||
|
"useShizuku": "使用 Shizuku 或 Sui 來安裝",
|
||||||
|
"shizukuBinderNotFound": "Shizuku 服務未運行",
|
||||||
|
"shizukuOld": "舊版 Shizuku (<11) - 請更新",
|
||||||
|
"shizukuOldAndroidWithADB": "Shizuku 在 Android 8.1 以下版本使用 ADB 運行 - 請更新 Android 或改用 Sui",
|
||||||
|
"shizukuPretendToBeGooglePlay": "設置 Google Play 為安裝來源(如果使用 Shizuku)",
|
||||||
|
"useSystemFont": "使用系統字體",
|
||||||
|
"useVersionCodeAsOSVersion": "使用應用程式 versionCode 作為操作系統檢測的版本",
|
||||||
|
"requestHeader": "請求標頭",
|
||||||
|
"useLatestAssetDateAsReleaseDate": "使用最新資源上傳日期作為發佈日期",
|
||||||
|
"defaultPseudoVersioningMethod": "預設偽版本管理方法",
|
||||||
|
"partialAPKHash": "部分 APK Hash",
|
||||||
|
"APKLinkHash": "APK 連結 Hash",
|
||||||
|
"directAPKLink": "直接 APK 連結",
|
||||||
|
"pseudoVersionInUse": "正在使用偽版本",
|
||||||
|
"installed": "已安裝",
|
||||||
|
"latest": "最新",
|
||||||
|
"invertRegEx": "反轉正則表達式",
|
||||||
|
"note": "備註",
|
||||||
|
"selfHostedNote": "可使用「{}」下拉選單來訪問任何來源的自託管/自定義實例。",
|
||||||
|
"badDownload": "無法解析 APK(不兼容或下載不完整)",
|
||||||
|
"beforeNewInstallsShareToAppVerifier": "將新應用程式分享到 AppVerifier(如果可用)",
|
||||||
|
"appVerifierInstructionToast": "分享至 AppVerifier,然後準備好時返回此處。",
|
||||||
|
"wiki": "幫助/維基",
|
||||||
|
"crowdsourcedConfigsLabel": "群眾外包的應用程式配置(使用風險自負)",
|
||||||
|
"removeAppQuestion": {
|
||||||
|
"one": "移除應用程式?",
|
||||||
|
"other": "移除應用程式?"
|
||||||
|
},
|
||||||
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
"one": "請求過多(速率限制)- {} 分鐘後重試",
|
||||||
|
"other": "請求過多(速率限制)- {} 分鐘後重試"
|
||||||
|
},
|
||||||
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
|
"one": "背景更新檢查遇到 {},將在 {} 分鐘後重新檢查",
|
||||||
|
"other": "背景更新檢查遇到 {},將在 {} 分鐘後重新檢查"
|
||||||
|
},
|
||||||
|
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
||||||
|
"one": "背景更新檢查發現 {} 個更新 - 如果需要將通知使用者",
|
||||||
|
"other": "背景更新檢查發現 {} 個更新 - 如果需要將通知使用者"
|
||||||
|
},
|
||||||
|
"apps": {
|
||||||
|
"one": "{} 個應用程式",
|
||||||
|
"other": "{} 個應用程式"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"one": "{} 個 URL",
|
||||||
|
"other": "{} 個 URL"
|
||||||
|
},
|
||||||
|
"minute": {
|
||||||
|
"one": "{} 分鐘",
|
||||||
|
"other": "{} 分鐘"
|
||||||
|
},
|
||||||
|
"hour": {
|
||||||
|
"one": "{} 小時",
|
||||||
|
"other": "{} 小時"
|
||||||
|
},
|
||||||
|
"day": {
|
||||||
|
"one": "{} 天",
|
||||||
|
"other": "{} 天"
|
||||||
|
},
|
||||||
|
"clearedNLogsBeforeXAfterY": {
|
||||||
|
"one": "清除 {n} 個日誌(之前 = {before},之後 = {after})",
|
||||||
|
"other": "清除 {n} 個日誌(之前 = {before},之後 = {after})"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesAvailable": {
|
||||||
|
"one": "{} 和另外 1 個應用程式有更新。",
|
||||||
|
"other": "{} 和另外 {} 個應用程式有更新。"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesInstalled": {
|
||||||
|
"one": "{} 和另外 1 個應用程式已更新。",
|
||||||
|
"other": "{} 和另外 {} 個應用程式已更新。"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesFailed": {
|
||||||
|
"one": "更新 {} 和另外 1 個應用程式失敗。",
|
||||||
|
"other": "更新 {} 和另外 {} 個應用程式失敗。"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
|
"one": "{} 和另外 1 個應用程式可能已更新。",
|
||||||
|
"other": "{} 和另外 {} 個應用程式可能已更新。"
|
||||||
|
},
|
||||||
|
"apk": {
|
||||||
|
"one": "{} 個 APK",
|
||||||
|
"other": "{} 個 APK"
|
||||||
|
}
|
||||||
|
}
|
@@ -24,6 +24,14 @@ class DirectAPKLink extends AppSource {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<Map<String, String>?> getRequestHeaders(
|
||||||
|
Map<String, dynamic> additionalSettings,
|
||||||
|
{bool forAPKDownload = false}) {
|
||||||
|
return html.getRequestHeaders(additionalSettings,
|
||||||
|
forAPKDownload: forAPKDownload);
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<APKDetails> getLatestAPKDetails(
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
String standardUrl,
|
String standardUrl,
|
||||||
|
@@ -9,7 +9,7 @@ class FDroidRepo extends AppSource {
|
|||||||
FDroidRepo() {
|
FDroidRepo() {
|
||||||
name = tr('fdroidThirdPartyRepo');
|
name = tr('fdroidThirdPartyRepo');
|
||||||
canSearch = true;
|
canSearch = true;
|
||||||
excludeFromMassSearch = true;
|
includeAdditionalOptsInMainSearch = true;
|
||||||
neverAutoSelect = true;
|
neverAutoSelect = true;
|
||||||
showReleaseDateAsVersionToggle = true;
|
showReleaseDateAsVersionToggle = true;
|
||||||
|
|
||||||
@@ -86,6 +86,27 @@ class FDroidRepo extends AppSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void runOnAddAppInputChange(String userInput) {
|
||||||
|
additionalSourceAppSpecificSettingFormItems =
|
||||||
|
additionalSourceAppSpecificSettingFormItems.map((row) {
|
||||||
|
row = row.map((item) {
|
||||||
|
if (item.key == 'appIdOrName') {
|
||||||
|
try {
|
||||||
|
var appId = Uri.parse(userInput).queryParameters['appId'];
|
||||||
|
if (appId != null && item is GeneratedFormTextField) {
|
||||||
|
item.required = false;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}).toList();
|
||||||
|
return row;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
App endOfGetAppChanges(App app) {
|
App endOfGetAppChanges(App app) {
|
||||||
var uri = Uri.parse(app.url);
|
var uri = Uri.parse(app.url);
|
||||||
@@ -142,6 +163,7 @@ class FDroidRepo extends AppSource {
|
|||||||
if (appIdOrName == null) {
|
if (appIdOrName == null) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
}
|
}
|
||||||
|
additionalSettings['appIdOrName'] = appIdOrName;
|
||||||
var res =
|
var res =
|
||||||
await sourceRequestWithURLVariants(standardUrl, additionalSettings);
|
await sourceRequestWithURLVariants(standardUrl, additionalSettings);
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
|
@@ -285,7 +285,9 @@ class GitHub extends AppSource {
|
|||||||
DateTime? getPublishDateFromRelease(dynamic rel) =>
|
DateTime? getPublishDateFromRelease(dynamic rel) =>
|
||||||
rel?['published_at'] != null
|
rel?['published_at'] != null
|
||||||
? DateTime.parse(rel['published_at'])
|
? DateTime.parse(rel['published_at'])
|
||||||
: null;
|
: rel?['commit']?['created'] != null
|
||||||
|
? DateTime.parse(rel['commit']['created'])
|
||||||
|
: null;
|
||||||
DateTime? getNewestAssetDateFromRelease(dynamic rel) {
|
DateTime? getNewestAssetDateFromRelease(dynamic rel) {
|
||||||
var t = (rel['assets'] as List<dynamic>?)
|
var t = (rel['assets'] as List<dynamic>?)
|
||||||
?.map((e) {
|
?.map((e) {
|
||||||
|
@@ -161,7 +161,8 @@ class GitLab extends AppSource {
|
|||||||
.toList();
|
.toList();
|
||||||
var apkUrlsSet = apkUrlsFromAssets.toSet();
|
var apkUrlsSet = apkUrlsFromAssets.toSet();
|
||||||
apkUrlsSet.addAll(uploadedAPKsFromDescription);
|
apkUrlsSet.addAll(uploadedAPKsFromDescription);
|
||||||
var releaseDateString = e['released_at'] ?? e['created_at'];
|
var releaseDateString =
|
||||||
|
e['released_at'] ?? e['created_at'] ?? e['commit']?['created_at'];
|
||||||
DateTime? releaseDate =
|
DateTime? releaseDate =
|
||||||
releaseDateString != null ? DateTime.parse(releaseDateString) : null;
|
releaseDateString != null ? DateTime.parse(releaseDateString) : null;
|
||||||
return APKDetails(
|
return APKDetails(
|
||||||
|
@@ -332,10 +332,13 @@ class HTML extends AppSource {
|
|||||||
additionalSettings['versionExtractWholePage'] == true
|
additionalSettings['versionExtractWholePage'] == true
|
||||||
? versionExtractionWholePageString
|
? versionExtractionWholePageString
|
||||||
: relDecoded);
|
: relDecoded);
|
||||||
version ??=
|
version ??= additionalSettings['defaultPseudoVersioningMethod'] ==
|
||||||
additionalSettings['defaultPseudoVersioningMethod'] == 'APKLinkHash'
|
'APKLinkHash'
|
||||||
? rel.hashCode.toString()
|
? rel.hashCode.toString()
|
||||||
: (await checkPartialDownloadHashDynamic(rel)).toString();
|
: (await checkPartialDownloadHashDynamic(rel,
|
||||||
|
headers: await getRequestHeaders(additionalSettings,
|
||||||
|
forAPKDownload: true)))
|
||||||
|
.toString();
|
||||||
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
||||||
AppNames(uri.host, tr('app')));
|
AppNames(uri.host, tr('app')));
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@ import 'package:easy_localization/easy_localization.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:obtainium/components/generated_form_modal.dart';
|
import 'package:obtainium/components/generated_form_modal.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
import 'package:flutter_typeahead/flutter_typeahead.dart';
|
||||||
|
|
||||||
abstract class GeneratedFormItem {
|
abstract class GeneratedFormItem {
|
||||||
late String key;
|
late String key;
|
||||||
@@ -28,6 +29,7 @@ class GeneratedFormTextField extends GeneratedFormItem {
|
|||||||
late String? hint;
|
late String? hint;
|
||||||
late bool password;
|
late bool password;
|
||||||
late TextInputType? textInputType;
|
late TextInputType? textInputType;
|
||||||
|
late List<String>? autoCompleteOptions;
|
||||||
|
|
||||||
GeneratedFormTextField(super.key,
|
GeneratedFormTextField(super.key,
|
||||||
{super.label,
|
{super.label,
|
||||||
@@ -39,7 +41,8 @@ class GeneratedFormTextField extends GeneratedFormItem {
|
|||||||
this.max = 1,
|
this.max = 1,
|
||||||
this.hint,
|
this.hint,
|
||||||
this.password = false,
|
this.password = false,
|
||||||
this.textInputType});
|
this.textInputType,
|
||||||
|
this.autoCompleteOptions});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String ensureType(val) {
|
String ensureType(val) {
|
||||||
@@ -274,38 +277,62 @@ class _GeneratedFormState extends State<GeneratedForm> {
|
|||||||
var formItem = e.value;
|
var formItem = e.value;
|
||||||
if (formItem is GeneratedFormTextField) {
|
if (formItem is GeneratedFormTextField) {
|
||||||
final formFieldKey = GlobalKey<FormFieldState>();
|
final formFieldKey = GlobalKey<FormFieldState>();
|
||||||
return TextFormField(
|
var ctrl = TextEditingController(text: values[formItem.key]);
|
||||||
keyboardType: formItem.textInputType,
|
return TypeAheadField<String>(
|
||||||
obscureText: formItem.password,
|
controller: ctrl,
|
||||||
autocorrect: !formItem.password,
|
builder: (context, controller, focusNode) {
|
||||||
enableSuggestions: !formItem.password,
|
return TextFormField(
|
||||||
key: formFieldKey,
|
controller: ctrl,
|
||||||
initialValue: values[formItem.key],
|
focusNode: focusNode,
|
||||||
autovalidateMode: AutovalidateMode.onUserInteraction,
|
keyboardType: formItem.textInputType,
|
||||||
onChanged: (value) {
|
obscureText: formItem.password,
|
||||||
|
autocorrect: !formItem.password,
|
||||||
|
enableSuggestions: !formItem.password,
|
||||||
|
key: formFieldKey,
|
||||||
|
autovalidateMode: AutovalidateMode.onUserInteraction,
|
||||||
|
onChanged: (value) {
|
||||||
|
setState(() {
|
||||||
|
values[formItem.key] = value;
|
||||||
|
someValueChanged();
|
||||||
|
});
|
||||||
|
},
|
||||||
|
decoration: InputDecoration(
|
||||||
|
helperText:
|
||||||
|
formItem.label + (formItem.required ? ' *' : ''),
|
||||||
|
hintText: formItem.hint),
|
||||||
|
minLines: formItem.max <= 1 ? null : formItem.max,
|
||||||
|
maxLines: formItem.max <= 1 ? 1 : formItem.max,
|
||||||
|
validator: (value) {
|
||||||
|
if (formItem.required &&
|
||||||
|
(value == null || value.trim().isEmpty)) {
|
||||||
|
return '${formItem.label} ${tr('requiredInBrackets')}';
|
||||||
|
}
|
||||||
|
for (var validator in formItem.additionalValidators) {
|
||||||
|
String? result = validator(value);
|
||||||
|
if (result != null) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemBuilder: (context, value) {
|
||||||
|
return ListTile(title: Text(value));
|
||||||
|
},
|
||||||
|
onSelected: (value) {
|
||||||
|
ctrl.text = value;
|
||||||
setState(() {
|
setState(() {
|
||||||
values[formItem.key] = value;
|
values[formItem.key] = value;
|
||||||
someValueChanged();
|
someValueChanged();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
decoration: InputDecoration(
|
suggestionsCallback: (search) {
|
||||||
helperText: formItem.label + (formItem.required ? ' *' : ''),
|
return formItem.autoCompleteOptions
|
||||||
hintText: formItem.hint),
|
?.where((t) => t.toLowerCase().contains(search.toLowerCase()))
|
||||||
minLines: formItem.max <= 1 ? null : formItem.max,
|
.toList();
|
||||||
maxLines: formItem.max <= 1 ? 1 : formItem.max,
|
|
||||||
validator: (value) {
|
|
||||||
if (formItem.required &&
|
|
||||||
(value == null || value.trim().isEmpty)) {
|
|
||||||
return '${formItem.label} ${tr('requiredInBrackets')}';
|
|
||||||
}
|
|
||||||
for (var validator in formItem.additionalValidators) {
|
|
||||||
String? result = validator(value);
|
|
||||||
if (result != null) {
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
},
|
||||||
|
hideOnEmpty: true,
|
||||||
);
|
);
|
||||||
} else if (formItem is GeneratedFormDropdown) {
|
} else if (formItem is GeneratedFormDropdown) {
|
||||||
if (formItem.opts!.isEmpty) {
|
if (formItem.opts!.isEmpty) {
|
||||||
|
@@ -40,6 +40,7 @@ List<MapEntry<Locale, String>> supportedLocales = const [
|
|||||||
MapEntry(Locale('vi'), 'Tiếng Việt'),
|
MapEntry(Locale('vi'), 'Tiếng Việt'),
|
||||||
MapEntry(Locale('tr'), 'Türkçe'),
|
MapEntry(Locale('tr'), 'Türkçe'),
|
||||||
MapEntry(Locale('uk'), 'Українська'),
|
MapEntry(Locale('uk'), 'Українська'),
|
||||||
|
MapEntry(Locale('da'), 'Dansk'),
|
||||||
];
|
];
|
||||||
const fallbackLocale = Locale('en');
|
const fallbackLocale = Locale('en');
|
||||||
const localeDir = 'assets/translations';
|
const localeDir = 'assets/translations';
|
||||||
@@ -212,20 +213,23 @@ class _ObtainiumState extends State<Obtainium> {
|
|||||||
// Decide on a colour/brightness scheme based on OS and user settings
|
// Decide on a colour/brightness scheme based on OS and user settings
|
||||||
ColorScheme lightColorScheme;
|
ColorScheme lightColorScheme;
|
||||||
ColorScheme darkColorScheme;
|
ColorScheme darkColorScheme;
|
||||||
if (lightDynamic != null && darkDynamic != null && settingsProvider.useMaterialYou) {
|
if (lightDynamic != null &&
|
||||||
|
darkDynamic != null &&
|
||||||
|
settingsProvider.useMaterialYou) {
|
||||||
lightColorScheme = lightDynamic.harmonized();
|
lightColorScheme = lightDynamic.harmonized();
|
||||||
darkColorScheme = darkDynamic.harmonized();
|
darkColorScheme = darkDynamic.harmonized();
|
||||||
} else {
|
} else {
|
||||||
lightColorScheme = ColorScheme.fromSeed(seedColor: settingsProvider.themeColor);
|
lightColorScheme =
|
||||||
|
ColorScheme.fromSeed(seedColor: settingsProvider.themeColor);
|
||||||
darkColorScheme = ColorScheme.fromSeed(
|
darkColorScheme = ColorScheme.fromSeed(
|
||||||
seedColor: settingsProvider.themeColor, brightness: Brightness.dark);
|
seedColor: settingsProvider.themeColor,
|
||||||
|
brightness: Brightness.dark);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set the background and surface colors to pure black in the amoled theme
|
// set the background and surface colors to pure black in the amoled theme
|
||||||
if (settingsProvider.useBlackTheme) {
|
if (settingsProvider.useBlackTheme) {
|
||||||
darkColorScheme = darkColorScheme
|
darkColorScheme =
|
||||||
.copyWith(surface: Colors.black)
|
darkColorScheme.copyWith(surface: Colors.black).harmonized();
|
||||||
.harmonized();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settingsProvider.useSystemFont) NativeFeatures.loadSystemFont();
|
if (settingsProvider.useSystemFont) NativeFeatures.loadSystemFont();
|
||||||
|
@@ -51,10 +51,13 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
changeUserInput(String input, bool valid, bool isBuilding,
|
changeUserInput(String input, bool valid, bool isBuilding,
|
||||||
{bool updateUrlInput = false}) {
|
{bool updateUrlInput = false, String? overrideSource}) {
|
||||||
userInput = input;
|
userInput = input;
|
||||||
if (!isBuilding) {
|
if (!isBuilding) {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
if (overrideSource != null) {
|
||||||
|
pickedSourceOverride = overrideSource;
|
||||||
|
}
|
||||||
if (updateUrlInput) {
|
if (updateUrlInput) {
|
||||||
urlInputKey++;
|
urlInputKey++;
|
||||||
}
|
}
|
||||||
@@ -68,6 +71,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
if (pickedSource.runtimeType != source.runtimeType ||
|
if (pickedSource.runtimeType != source.runtimeType ||
|
||||||
(prevHost != null && prevHost != source?.hosts[0])) {
|
(prevHost != null && prevHost != source?.hosts[0])) {
|
||||||
pickedSource = source;
|
pickedSource = source;
|
||||||
|
pickedSource?.runOnAddAppInputChange(userInput);
|
||||||
additionalSettings = source != null
|
additionalSettings = source != null
|
||||||
? getDefaultValuesFromFormItems(
|
? getDefaultValuesFromFormItems(
|
||||||
source.combinedAppSpecificSettingFormItems)
|
source.combinedAppSpecificSettingFormItems)
|
||||||
@@ -259,9 +263,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
searching = true;
|
searching = true;
|
||||||
});
|
});
|
||||||
var sourceStrings = <String, List<String>>{};
|
var sourceStrings = <String, List<String>>{};
|
||||||
sourceProvider.sources
|
sourceProvider.sources.where((e) => e.canSearch).forEach((s) {
|
||||||
.where((e) => e.canSearch && !e.excludeFromMassSearch)
|
|
||||||
.forEach((s) {
|
|
||||||
sourceStrings[s.name] = [s.name];
|
sourceStrings[s.name] = [s.name];
|
||||||
});
|
});
|
||||||
try {
|
try {
|
||||||
@@ -282,32 +284,78 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
settingsProvider.searchDeselected = sourceStrings.keys
|
settingsProvider.searchDeselected = sourceStrings.keys
|
||||||
.where((s) => !searchSources.contains(s))
|
.where((s) => !searchSources.contains(s))
|
||||||
.toList();
|
.toList();
|
||||||
var results = await Future.wait(sourceProvider.sources
|
List<MapEntry<String, Map<String, List<String>>>?> results =
|
||||||
.where((e) => searchSources.contains(e.name))
|
(await Future.wait(sourceProvider.sources
|
||||||
.map((e) async {
|
.where((e) => searchSources.contains(e.name))
|
||||||
|
.map((e) async {
|
||||||
try {
|
try {
|
||||||
return await e.search(searchQuery);
|
Map<String, dynamic>? querySettings = {};
|
||||||
|
if (e.includeAdditionalOptsInMainSearch) {
|
||||||
|
querySettings = await showDialog<Map<String, dynamic>?>(
|
||||||
|
context: context,
|
||||||
|
builder: (BuildContext ctx) {
|
||||||
|
return GeneratedFormModal(
|
||||||
|
title: tr('searchX', args: [e.name]),
|
||||||
|
items: [
|
||||||
|
...e.searchQuerySettingFormItems.map((e) => [e]),
|
||||||
|
[
|
||||||
|
GeneratedFormTextField('url',
|
||||||
|
label: e.hosts.isNotEmpty
|
||||||
|
? tr('overrideSource')
|
||||||
|
: plural('url', 1).substring(2),
|
||||||
|
autoCompleteOptions: [
|
||||||
|
...(e.hosts.isNotEmpty ? [e.hosts[0]] : []),
|
||||||
|
...appsProvider.apps.values
|
||||||
|
.where((a) =>
|
||||||
|
sourceProvider
|
||||||
|
.getSource(a.app.url,
|
||||||
|
overrideSource:
|
||||||
|
a.app.overrideSource)
|
||||||
|
.runtimeType ==
|
||||||
|
e.runtimeType)
|
||||||
|
.map((a) {
|
||||||
|
var uri = Uri.parse(a.app.url);
|
||||||
|
return '${uri.origin}${uri.path}';
|
||||||
|
})
|
||||||
|
],
|
||||||
|
defaultValue:
|
||||||
|
e.hosts.isNotEmpty ? e.hosts[0] : '',
|
||||||
|
required: true)
|
||||||
|
],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
});
|
||||||
|
if (querySettings == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return MapEntry(e.runtimeType.toString(),
|
||||||
|
await e.search(searchQuery, querySettings: querySettings));
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err is! CredsNeededError) {
|
if (err is! CredsNeededError) {
|
||||||
rethrow;
|
rethrow;
|
||||||
} else {
|
} else {
|
||||||
err.unexpected = true;
|
err.unexpected = true;
|
||||||
showError(err, context);
|
showError(err, context);
|
||||||
return <String, List<String>>{};
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
})))
|
||||||
|
.where((a) => a != null)
|
||||||
|
.toList();
|
||||||
|
|
||||||
// Interleave results instead of simple reduce
|
// Interleave results instead of simple reduce
|
||||||
Map<String, List<String>> res = {};
|
Map<String, MapEntry<String, List<String>>> res = {};
|
||||||
var si = 0;
|
var si = 0;
|
||||||
var done = false;
|
var done = false;
|
||||||
while (!done) {
|
while (!done) {
|
||||||
done = true;
|
done = true;
|
||||||
for (var r in results) {
|
for (var r in results) {
|
||||||
if (r.length > si) {
|
var sourceName = r!.key;
|
||||||
|
if (r.value.length > si) {
|
||||||
done = false;
|
done = false;
|
||||||
res.addEntries([r.entries.elementAt(si)]);
|
var singleRes = r.value.entries.elementAt(si);
|
||||||
|
res[singleRes.key] = MapEntry(sourceName, singleRes.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
si++;
|
si++;
|
||||||
@@ -322,13 +370,15 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext ctx) {
|
builder: (BuildContext ctx) {
|
||||||
return SelectionModal(
|
return SelectionModal(
|
||||||
entries: res,
|
entries: res.map((k, v) => MapEntry(k, v.value)),
|
||||||
selectedByDefault: false,
|
selectedByDefault: false,
|
||||||
onlyOneSelectionAllowed: true,
|
onlyOneSelectionAllowed: true,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
if (selectedUrls != null && selectedUrls.isNotEmpty) {
|
if (selectedUrls != null && selectedUrls.isNotEmpty) {
|
||||||
changeUserInput(selectedUrls[0], true, false, updateUrlInput: true);
|
var sourceName = res[selectedUrls[0]]?.key;
|
||||||
|
changeUserInput(selectedUrls[0], true, false,
|
||||||
|
updateUrlInput: true, overrideSource: sourceName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -349,7 +399,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
[
|
[
|
||||||
GeneratedFormDropdown(
|
GeneratedFormDropdown(
|
||||||
'overrideSource',
|
'overrideSource',
|
||||||
defaultValue: '',
|
defaultValue: pickedSourceOverride ?? '',
|
||||||
[
|
[
|
||||||
MapEntry('', tr('none')),
|
MapEntry('', tr('none')),
|
||||||
...sourceProvider.sources.map(
|
...sourceProvider.sources.map(
|
||||||
|
@@ -161,25 +161,46 @@ class _AppPageState extends State<AppPage> {
|
|||||||
if (app?.app.apkUrls.isNotEmpty == true ||
|
if (app?.app.apkUrls.isNotEmpty == true ||
|
||||||
app?.app.otherAssetUrls.isNotEmpty == true)
|
app?.app.otherAssetUrls.isNotEmpty == true)
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
onTap: app?.app == null || updating
|
onTap: app?.app == null || updating
|
||||||
? null
|
? null
|
||||||
: () async {
|
: () async {
|
||||||
try {
|
try {
|
||||||
await appsProvider
|
await appsProvider
|
||||||
.downloadAppAssets([app!.app.id], context);
|
.downloadAppAssets([app!.app.id], context);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showError(e, context);
|
showError(e, context);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Row(
|
||||||
tr('downloadX', args: [tr('releaseAsset').toLowerCase()]),
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
textAlign: TextAlign.center,
|
children: [
|
||||||
style: Theme.of(context).textTheme.labelSmall!.copyWith(
|
Container(
|
||||||
decoration: TextDecoration.underline,
|
decoration: BoxDecoration(
|
||||||
fontStyle: FontStyle.italic,
|
borderRadius: BorderRadius.circular(12),
|
||||||
),
|
color: settingsProvider.highlightTouchTargets
|
||||||
),
|
? (Theme.of(context).brightness ==
|
||||||
),
|
Brightness.light
|
||||||
|
? Theme.of(context).primaryColor
|
||||||
|
: Theme.of(context).primaryColorLight)
|
||||||
|
.withAlpha(20)
|
||||||
|
: null),
|
||||||
|
padding: settingsProvider.highlightTouchTargets
|
||||||
|
? const EdgeInsetsDirectional.fromSTEB(12, 6, 12, 6)
|
||||||
|
: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 6),
|
||||||
|
margin:
|
||||||
|
const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 0),
|
||||||
|
child: Text(
|
||||||
|
tr('downloadX',
|
||||||
|
args: [tr('releaseAsset').toLowerCase()]),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style:
|
||||||
|
Theme.of(context).textTheme.labelSmall!.copyWith(
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
fontStyle: FontStyle.italic,
|
||||||
|
),
|
||||||
|
))
|
||||||
|
],
|
||||||
|
)),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 48,
|
height: 48,
|
||||||
),
|
),
|
||||||
|
@@ -143,11 +143,14 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
|
final GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
|
||||||
GlobalKey<RefreshIndicatorState>();
|
GlobalKey<RefreshIndicatorState>();
|
||||||
|
|
||||||
|
late final ScrollController scrollController = ScrollController();
|
||||||
|
|
||||||
|
var sourceProvider = SourceProvider();
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var appsProvider = context.watch<AppsProvider>();
|
var appsProvider = context.watch<AppsProvider>();
|
||||||
var settingsProvider = context.watch<SettingsProvider>();
|
var settingsProvider = context.watch<SettingsProvider>();
|
||||||
var sourceProvider = SourceProvider();
|
|
||||||
var listedApps = appsProvider.getAppValues().toList();
|
var listedApps = appsProvider.getAppValues().toList();
|
||||||
|
|
||||||
refresh() {
|
refresh() {
|
||||||
@@ -463,7 +466,7 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
hasUpdate ? getUpdateButton(index) : const SizedBox.shrink(),
|
hasUpdate ? getUpdateButton(index) : const SizedBox.shrink(),
|
||||||
hasUpdate
|
hasUpdate
|
||||||
? const SizedBox(
|
? const SizedBox(
|
||||||
width: 10,
|
width: 5,
|
||||||
)
|
)
|
||||||
: const SizedBox.shrink(),
|
: const SizedBox.shrink(),
|
||||||
GestureDetector(
|
GestureDetector(
|
||||||
@@ -1098,11 +1101,17 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
body: RefreshIndicator(
|
body: RefreshIndicator(
|
||||||
key: _refreshIndicatorKey,
|
key: _refreshIndicatorKey,
|
||||||
onRefresh: refresh,
|
onRefresh: refresh,
|
||||||
child: CustomScrollView(slivers: <Widget>[
|
child: Scrollbar(
|
||||||
CustomAppBar(title: tr('appsString')),
|
interactive: true,
|
||||||
...getLoadingWidgets(),
|
controller: scrollController,
|
||||||
getDisplayedList()
|
child: CustomScrollView(
|
||||||
])),
|
physics: const AlwaysScrollableScrollPhysics(),
|
||||||
|
controller: scrollController,
|
||||||
|
slivers: <Widget>[
|
||||||
|
CustomAppBar(title: tr('appsString')),
|
||||||
|
...getLoadingWidgets(),
|
||||||
|
getDisplayedList()
|
||||||
|
]))),
|
||||||
persistentFooterButtons: appsProvider.apps.isEmpty
|
persistentFooterButtons: appsProvider.apps.isEmpty
|
||||||
? null
|
? null
|
||||||
: [
|
: [
|
||||||
|
@@ -220,7 +220,9 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
|
|||||||
if (ext.endsWith('"') || ext.endsWith("other")) {
|
if (ext.endsWith('"') || ext.endsWith("other")) {
|
||||||
ext = ext.substring(0, ext.length - 1);
|
ext = ext.substring(0, ext.length - 1);
|
||||||
}
|
}
|
||||||
if (url.toLowerCase().endsWith('.apk') && ext != 'apk') {
|
if (((Uri.tryParse(url)?.path ?? url).toLowerCase().endsWith('.apk') ||
|
||||||
|
ext == 'attachment') &&
|
||||||
|
ext != 'apk') {
|
||||||
ext = 'apk';
|
ext = 'apk';
|
||||||
}
|
}
|
||||||
fileName = fileName.split('/').last; // Ensure the fileName is a file name
|
fileName = fileName.split('/').last; // Ensure the fileName is a file name
|
||||||
@@ -717,7 +719,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<MapEntry<String, String>?> confirmAppFileUrl(
|
Future<MapEntry<String, String>?> confirmAppFileUrl(
|
||||||
App app, BuildContext? context, bool pickAnyAsset) async {
|
App app, BuildContext? context, bool pickAnyAsset,
|
||||||
|
{bool evenIfSingleChoice = false}) async {
|
||||||
var urlsToSelectFrom = app.apkUrls;
|
var urlsToSelectFrom = app.apkUrls;
|
||||||
if (pickAnyAsset) {
|
if (pickAnyAsset) {
|
||||||
urlsToSelectFrom = [...urlsToSelectFrom, ...app.otherAssetUrls];
|
urlsToSelectFrom = [...urlsToSelectFrom, ...app.otherAssetUrls];
|
||||||
@@ -728,7 +731,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
// get device supported architecture
|
// get device supported architecture
|
||||||
List<String> archs = (await DeviceInfoPlugin().androidInfo).supportedAbis;
|
List<String> archs = (await DeviceInfoPlugin().androidInfo).supportedAbis;
|
||||||
|
|
||||||
if (urlsToSelectFrom.length > 1 && context != null) {
|
if ((urlsToSelectFrom.length > 1 || evenIfSingleChoice) &&
|
||||||
|
context != null) {
|
||||||
appFileUrl = await showDialog(
|
appFileUrl = await showDialog(
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
context: context,
|
context: context,
|
||||||
@@ -973,7 +977,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
if (apps[id]!.app.apkUrls.isNotEmpty ||
|
if (apps[id]!.app.apkUrls.isNotEmpty ||
|
||||||
apps[id]!.app.otherAssetUrls.isNotEmpty) {
|
apps[id]!.app.otherAssetUrls.isNotEmpty) {
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
fileUrl = await confirmAppFileUrl(apps[id]!.app, context, true);
|
fileUrl = await confirmAppFileUrl(apps[id]!.app, context, true,
|
||||||
|
evenIfSingleChoice: true);
|
||||||
}
|
}
|
||||||
if (fileUrl != null) {
|
if (fileUrl != null) {
|
||||||
filesToDownload.add(MapEntry(fileUrl, apps[id]!.app));
|
filesToDownload.add(MapEntry(fileUrl, apps[id]!.app));
|
||||||
@@ -1650,7 +1655,9 @@ class _AppFilePickerState extends State<AppFilePicker> {
|
|||||||
? tr('selectX', args: [tr('releaseAsset').toLowerCase()])
|
? tr('selectX', args: [tr('releaseAsset').toLowerCase()])
|
||||||
: tr('pickAnAPK')),
|
: tr('pickAnAPK')),
|
||||||
content: Column(children: [
|
content: Column(children: [
|
||||||
Text(tr('appHasMoreThanOnePackage', args: [widget.app.finalName])),
|
urlsToSelectFrom.length > 1
|
||||||
|
? Text(tr('appHasMoreThanOnePackage', args: [widget.app.finalName]))
|
||||||
|
: const SizedBox.shrink(),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
...urlsToSelectFrom.map(
|
...urlsToSelectFrom.map(
|
||||||
(u) => RadioListTile<String>(
|
(u) => RadioListTile<String>(
|
||||||
|
@@ -354,7 +354,9 @@ preStandardizeUrl(String url) {
|
|||||||
url.toLowerCase().indexOf('https://') != 0) {
|
url.toLowerCase().indexOf('https://') != 0) {
|
||||||
url = 'https://$url';
|
url = 'https://$url';
|
||||||
}
|
}
|
||||||
var trailingSlash = Uri.tryParse(url)?.path.endsWith('/') ?? false;
|
var uri = Uri.tryParse(url);
|
||||||
|
var trailingSlash = (uri?.path.endsWith('/') ?? false) &&
|
||||||
|
(uri?.queryParameters.isEmpty ?? false);
|
||||||
url = url
|
url = url
|
||||||
.split('/')
|
.split('/')
|
||||||
.where((e) => e.isNotEmpty)
|
.where((e) => e.isNotEmpty)
|
||||||
@@ -463,6 +465,10 @@ abstract class AppSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void runOnAddAppInputChange(String inputUrl) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url) {
|
||||||
throw NotImplementedError();
|
throw NotImplementedError();
|
||||||
}
|
}
|
||||||
@@ -617,7 +623,7 @@ abstract class AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool canSearch = false;
|
bool canSearch = false;
|
||||||
bool excludeFromMassSearch = false;
|
bool includeAdditionalOptsInMainSearch = false;
|
||||||
List<GeneratedFormItem> searchQuerySettingFormItems = [];
|
List<GeneratedFormItem> searchQuerySettingFormItems = [];
|
||||||
Future<Map<String, List<String>>> search(String query,
|
Future<Map<String, List<String>>> search(String query,
|
||||||
{Map<String, dynamic> querySettings = const {}}) {
|
{Map<String, dynamic> querySettings = const {}}) {
|
||||||
|
188
pubspec.lock
188
pubspec.lock
@@ -47,18 +47,42 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: app_links
|
name: app_links
|
||||||
sha256: "96e677810b83707ff5e10fac11e4839daa0ea4e0123c35864c092699165eb3db"
|
sha256: a9905d6a60e814503fabc7523a9ed161b812d7ca69c99ad8ceea14279dc4f06b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.1.1"
|
version: "6.1.3"
|
||||||
|
app_links_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: app_links_linux
|
||||||
|
sha256: "567139eca3ca9fb113f2082f3aaa75a26f30f0ebdbe5fa7f09a3913c5bebd630"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
|
app_links_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: app_links_platform_interface
|
||||||
|
sha256: "58cff6f11df59b0e514dd5e4a61e988348ad5662f0e75d45d4e214ebea55c94c"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
app_links_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: app_links_web
|
||||||
|
sha256: "74586ed5f3c4786341e82a0fa43c39ec3f13108a550f74e80d8bf68aa11349d1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.3"
|
||||||
archive:
|
archive:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: archive
|
name: archive
|
||||||
sha256: "6bd38d335f0954f5fad9c79e614604fbf03a0e5b975923dd001b6ea965ef5b4b"
|
sha256: cb6a278ef2dbb298455e1a713bda08524a175630ec643a242c399c932a0a1f7d
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.6.0"
|
version: "3.6.1"
|
||||||
args:
|
args:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -79,10 +103,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: background_fetch
|
name: background_fetch
|
||||||
sha256: "2fe367c9be0e256dadb75b8b637b0b58a2a2d2317b7c8420bb1ae8b41e23fde3"
|
sha256: b5c298c911bc2ce41152668bc72eb0488f0665d75bc6d1e69e7d8367763eddcd
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.4"
|
version: "1.3.5"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -263,10 +287,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: file_picker
|
name: file_picker
|
||||||
sha256: "29c90806ac5f5fb896547720b73b17ee9aed9bba540dc5d91fe29f8c5745b10a"
|
sha256: "2ca051989f69d1b2ca012b2cf3ccf78c70d40144f0861ff2c063493f7c8c3d45"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.0.3"
|
version: "8.0.5"
|
||||||
fixnum:
|
fixnum:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -279,18 +303,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flex_color_picker
|
name: flex_color_picker
|
||||||
sha256: "31b27677d8d8400e4cff5edb3f189f606dd964d608779b6ae1b7ddad37ea48c6"
|
sha256: "809af4ec82ede3b140ed0219b97d548de99e47aa4b99b14a10f705a2dbbcba5e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.0"
|
version: "3.5.1"
|
||||||
flex_seed_scheme:
|
flex_seed_scheme:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flex_seed_scheme
|
name: flex_seed_scheme
|
||||||
sha256: fb66cdb8ca89084e79efcad2bc2d9deb144666875116f08cdd8d9f8238c8b3ab
|
sha256: "6c595e545b0678e1fe17e8eec3d1fbca7237482da194fadc20ad8607dc7a7f3d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.0"
|
version: "3.0.0"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -312,6 +336,54 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.3.0"
|
version: "0.3.0"
|
||||||
|
flutter_keyboard_visibility:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility
|
||||||
|
sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.0"
|
||||||
|
flutter_keyboard_visibility_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility_linux
|
||||||
|
sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
flutter_keyboard_visibility_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility_macos
|
||||||
|
sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
|
flutter_keyboard_visibility_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility_platform_interface
|
||||||
|
sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
flutter_keyboard_visibility_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility_web
|
||||||
|
sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.0"
|
||||||
|
flutter_keyboard_visibility_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: flutter_keyboard_visibility_windows
|
||||||
|
sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@@ -332,10 +404,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_local_notifications
|
name: flutter_local_notifications
|
||||||
sha256: "40e6fbd2da7dcc7ed78432c5cdab1559674b4af035fddbfb2f9a8f9c2112fcef"
|
sha256: ced76d337f54de33d7d9f06092137b4ac2da5079e00cee8a11a1794ffc7c61c6
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "17.1.2"
|
version: "17.2.1"
|
||||||
flutter_local_notifications_linux:
|
flutter_local_notifications_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -348,10 +420,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_local_notifications_platform_interface
|
name: flutter_local_notifications_platform_interface
|
||||||
sha256: "340abf67df238f7f0ef58f4a26d2a83e1ab74c77ab03cd2b2d5018ac64db30b7"
|
sha256: "85f8d07fe708c1bdcf45037f2c0109753b26ae077e9d9e899d55971711a4ea66"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "7.1.0"
|
version: "7.2.0"
|
||||||
flutter_localizations:
|
flutter_localizations:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -361,23 +433,31 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: "9921f9deda326f8a885e202b1e35237eadfc1345239a0f6f0f1ff287e047547f"
|
sha256: "2e8a801b1ded5ea001a4529c97b1f213dcb11c6b20668e081cafb23468593514"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.1"
|
version: "0.7.3"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
sha256: "8cf40eebf5dec866a6d1956ad7b4f7016e6c0cc69847ab946833b7d43743809f"
|
sha256: c6b0b4c05c458e1c01ad9bcc14041dd7b1f6783d487be4386f793f47a8a4d03e
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.19"
|
version: "2.0.20"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_typeahead:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_typeahead
|
||||||
|
sha256: d64712c65db240b1057559b952398ebb6e498077baeebf9b0731dade62438a6d
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.2.0"
|
||||||
flutter_web_plugins:
|
flutter_web_plugins:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -387,10 +467,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: fluttertoast
|
name: fluttertoast
|
||||||
sha256: "81b68579e23fcbcada2db3d50302813d2371664afe6165bc78148050ab94bf66"
|
sha256: "7eae679e596a44fdf761853a706f74979f8dd3cd92cf4e23cae161fda091b847"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "8.2.5"
|
version: "8.2.6"
|
||||||
fraction:
|
fraction:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -571,10 +651,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: path_provider_android
|
name: path_provider_android
|
||||||
sha256: a248d8146ee5983446bf03ed5ea8f6533129a12b11f12057ad1b4a67a2b3b41d
|
sha256: bca87b0165ffd7cdb9cad8edd22d18d2201e886d9a9f19b4fb3452ea7df3a72a
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.4"
|
version: "2.2.6"
|
||||||
path_provider_foundation:
|
path_provider_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -619,18 +699,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_android
|
name: permission_handler_android
|
||||||
sha256: "8bb852cd759488893805c3161d0b2b5db55db52f773dbb014420b304055ba2c5"
|
sha256: b29a799ca03be9f999aa6c39f7de5209482d638e6f857f6b93b0875c618b7e54
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "12.0.6"
|
version: "12.0.7"
|
||||||
permission_handler_apple:
|
permission_handler_apple:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_apple
|
name: permission_handler_apple
|
||||||
sha256: e9ad66020b89ff1b63908f247c2c6f931c6e62699b756ef8b3c4569350cd8662
|
sha256: e6f6d73b12438ef13e648c4ae56bd106ec60d17e90a59c4545db6781229082a0
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "9.4.4"
|
version: "9.4.5"
|
||||||
permission_handler_html:
|
permission_handler_html:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -667,10 +747,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: platform
|
name: platform
|
||||||
sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
|
sha256: "9b71283fc13df574056616011fb138fd3b793ea47cc509c189a6c3fa5f8a1a65"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.4"
|
version: "3.1.5"
|
||||||
plugin_platform_interface:
|
plugin_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -679,6 +759,38 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.8"
|
version: "2.1.8"
|
||||||
|
pointer_interceptor:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pointer_interceptor
|
||||||
|
sha256: d0a8e660d1204eaec5bd34b34cc92174690e076d2e4f893d9d68c486a13b07c4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.1+1"
|
||||||
|
pointer_interceptor_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pointer_interceptor_ios
|
||||||
|
sha256: a6906772b3205b42c44614fcea28f818b1e5fdad73a4ca742a7bd49818d9c917
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.1"
|
||||||
|
pointer_interceptor_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pointer_interceptor_platform_interface
|
||||||
|
sha256: "0597b0560e14354baeb23f8375cd612e8bd4841bf8306ecb71fcd0bb78552506"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.0+1"
|
||||||
|
pointer_interceptor_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pointer_interceptor_web
|
||||||
|
sha256: a6237528b46c411d8d55cdfad8fcb3269fc4cbb26060b14bff94879165887d1e
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.10.2"
|
||||||
provider:
|
provider:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -715,10 +827,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_android
|
name: shared_preferences_android
|
||||||
sha256: "1ee8bf911094a1b592de7ab29add6f826a7331fb854273d55918693d5364a1f2"
|
sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.2.2"
|
version: "2.2.3"
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -881,18 +993,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: url_launcher
|
name: url_launcher
|
||||||
sha256: "6ce1e04375be4eed30548f10a315826fd933c1e493206eab82eed01f438c8d2e"
|
sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.2.6"
|
version: "6.3.0"
|
||||||
url_launcher_android:
|
url_launcher_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: "17cd5e205ea615e2c6ea7a77323a11712dffa0720a8a90540db57a01347f9ad9"
|
sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.2"
|
version: "6.3.3"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -985,10 +1097,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: "2282ba2320af34b2bd5320156c664d73f3f022341ed78847bc87723bf88c142f"
|
sha256: f42447ca49523f11d8f70abea55ea211b3cafe172dd7a0e7ac007bb35dd356dc
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.16.2"
|
version: "3.16.4"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 1.1.10+2267
|
version: 1.1.13+2270
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.0.0 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
@@ -80,6 +80,7 @@ dependencies:
|
|||||||
ref: master
|
ref: master
|
||||||
|
|
||||||
markdown: any
|
markdown: any
|
||||||
|
flutter_typeahead: ^5.2.0
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
Reference in New Issue
Block a user