Compare commits

..

41 Commits

Author SHA1 Message Date
Imran
1e03194765 Merge pull request #1853 from ImranR98/dev
- Add Tencent App Store (#1848)
- Enable icon caching (#1837)
2024-09-27 18:05:56 -05:00
Imran Remtulla
10c558faaf Increment version 2024-09-27 19:03:17 -04:00
Imran Remtulla
dcf6957842 Remove unused code 2024-09-27 19:02:54 -04:00
Imran Remtulla
77bebc48bc Enable icon caching (#1837) 2024-09-27 19:01:57 -04:00
Imran Remtulla
cad14dd6a4 Update Flutter, upgrade packages 2024-09-27 18:34:52 -04:00
Imran Remtulla
5d72af5b20 Add Tencent App Store (#1848) 2024-09-27 18:28:37 -04:00
Imran
1fcb923469 Merge pull request #1832 from summoner001/main
Update hu.json
2024-09-27 15:17:14 -05:00
Imran
f89bc41ac1 Merge pull request #1850 from lagodimos/format-json
Format exported json
2024-09-27 15:17:01 -05:00
summoner001
70988a91fd Update hu.json
fixing translation of URL
2024-09-25 10:21:03 +02:00
Giannis Lagodimos
f3481f94dd format exported json
Make the exported applications' file more readable in case it is needed to be opened with a text editor.
2024-09-22 22:50:17 +03:00
summoner001
204eadd809 Update hu.json
Minor sentence fixes
2024-09-21 17:23:00 +02:00
summoner001
69f2ec1777 Update hu.json
Fixing the hungarian translation
2024-09-15 17:11:06 +02:00
summoner001
b98c23e369 Update hu.json
fixing a typo
2024-09-10 10:53:27 +02:00
summoner001
64779fb55a Update hu.json
fixing access token and api key translation
2024-09-10 10:51:52 +02:00
summoner001
845cf0a035 Update hu.json
Fixing sentence
2024-09-09 19:31:34 +02:00
summoner001
9dba240202 Update hu.json
Fixing sentences
2024-09-09 19:25:39 +02:00
summoner001
8aa682028f Update hu.json
Translating the "regex" word
2024-09-09 19:17:00 +02:00
summoner001
cb80b80efb Update hu.json
fixing a typo
2024-09-09 17:47:46 +02:00
summoner001
eb1d997413 Update hu.json
fixing a translation word
2024-09-09 17:46:10 +02:00
summoner001
986badc653 Update hu.json
fixing a typo
2024-09-09 17:45:04 +02:00
summoner001
2432db0b31 Update hu.json
Rewieving the hungarian translation. Fixing typos, sentences and the coherence.
2024-09-09 17:29:01 +02:00
Imran
5be2c9b51d Merge pull request #1826 from ImranR98/dev
- Improved APKPure compatibility by prioritizing APK when available (over XAPK)
- Auto-select direct APK source for URLs ending in '.apk' (#1820)
- Handle install failures more gracefully on apps page (#1782)
- Enabled ZH-TW and EO languages
- Added "allow insecure request" option (#1825)
2024-09-08 04:00:49 -04:00
Imran Remtulla
d801994fed Added "allow insecure request" option (#1825) 2024-09-08 03:58:51 -04:00
Imran Remtulla
19bb9a0331 Update packages + Flutter, increment version 2024-09-08 03:27:20 -04:00
Imran Remtulla
b8dc6f9a53 Dart fix 2024-09-08 03:25:52 -04:00
Imran Remtulla
3a7ba00486 Merge remote-tracking branch 'origin/main' into dev 2024-09-08 03:24:26 -04:00
Imran Remtulla
86416df7dd Enabled ZH-TW and EO languages 2024-09-08 03:23:29 -04:00
Imran
704f209e4d Merge pull request #1824 from DwainZwerg/patch-1
Update de.json
2024-09-08 03:14:40 -04:00
Imran Remtulla
e1bed6f0cf Handle install failures more gracefully on apps page (#1782) 2024-09-08 03:11:49 -04:00
Imran Remtulla
61c88596f0 Bugfix 2024-09-08 02:54:43 -04:00
Imran Remtulla
a07c51a04a Merge remote-tracking branch 'origin/main' into dev 2024-09-08 02:51:22 -04:00
Imran Remtulla
0e46a83843 Auto-select direct APK source for URLs ending in '.apk' (#1820) 2024-09-08 02:51:11 -04:00
DwainZwerg
1a4b9658c3 Update de.json
see https://github.com/ImranR98/Obtainium/pull/1783#issuecomment-2310350237
2024-09-08 08:48:54 +02:00
Imran
9b922abe48 Merge pull request #1815 from pgmtx/add-esperanto
Add Esperanto translation
2024-09-08 02:40:57 -04:00
Imran
6f0f883d88 Merge pull request #1807 from Kevinr99089/main
Fr: Rollback import export change
2024-09-08 02:40:48 -04:00
Imran
aafcc4d96e Merge pull request #1803 from gidano/Updated_hu
Updated hu.json
2024-09-08 02:40:39 -04:00
Imran Remtulla
e019c8027b Improved APKPure compatibility by prioritizing APK when available (over XAPK) 2024-09-05 13:10:02 -04:00
pgmtx
b6acb43055 Finished proofreading 2024-08-28 23:06:33 +02:00
pgmtx
d9f6e3328e Created eo.json file and added first translations 2024-08-27 19:43:07 +02:00
Kévin
0e50132e13 Rollback import export change
- The changes made to "Import and Export", translated as "Sauvegarder et Restaurer" have been cancelled because some of the text goes beyond the box.
- Back to "Importer et Exporter" by correcting past errors.
2024-08-22 16:26:10 +02:00
gidano
c74e8456d2 Updated hu.json 2024-08-20 08:35:30 +02:00
55 changed files with 909 additions and 342 deletions

View File

@@ -26,6 +26,7 @@ Currently supported App sources:
- [Aptoide](https://aptoide.com/)
- [Uptodown](https://uptodown.com/)
- [Huawei AppGallery](https://appgallery.huawei.com/)
- [Tencent App Store](https://sj.qq.com/)
- Jenkins Jobs
- [APKMirror](https://apkmirror.com/) (Track-Only)
- Open Source - App-Specific:

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Dijeli sa AppVerifier-om, zatim se vratite kada ste spremni.",
"wiki": "Pomoć/Wiki",
"crowdsourcedConfigsLabel": "Konfiguracije aplikacije obezbeđene pomoću velikog broja ljudi (crowdsourcing) (koristite na svoju odgovornost)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "Želite li ukloniti aplikaciju?",
"other": "Želite li ukloniti aplikacije?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Sdílejte do aplikace AppVerifier a po dokončení se sem vraťte.",
"wiki": "Nápověda/Wiki",
"crowdsourcedConfigsLabel": "Konfigurace aplikací s využitím crowdsourcingu (použití na vlastní nebezpečí)",
"allowInsecure": "Povolení nezabezpečených požadavků HTTP",
"removeAppQuestion": {
"one": "Odstranit Apku?",
"other": "Odstranit Apky?"

View File

@@ -314,6 +314,7 @@
"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)",
"allowInsecure": "Tillad usikre HTTP-anmodninger",
"removeAppQuestion": {
"one": "Fjern app?",
"other": "Fjern apps?"

View File

@@ -250,7 +250,7 @@
"enableBackgroundUpdates": "Hintergrundaktualisierungen aktivieren",
"backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
"backgroundUpdateLimitsExplanation": "Der Erfolg einer Hintergrundinstallation kann nur festgestellt werden, wenn Obtainium geöffnet wird.",
"verifyLatestTag": "Überprüfe das „latest“ Tag",
"verifyLatestTag": "„Latest“-Tag überprüfen",
"intermediateLinkRegex": "Filter für einen „Zwischen“-Link, der zuerst besucht werden soll",
"filterByLinkText": "Links durch Linktext filtern",
"intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden",
@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Geben Sie die Daten an AppVerifier weiter und kehren Sie dann hierher zurück, wenn Sie fertig sind.",
"wiki": "Hilfe/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App-Konfigurationen (Verwendung auf eigene Gefahr)",
"allowInsecure": "Unsichere HTTP-Anfragen zulassen",
"removeAppQuestion": {
"one": "App entfernen?",
"other": "Apps entfernen?"

View File

@@ -0,0 +1,378 @@
{
"invalidURLForSource": "Nevalida apo-URL {}",
"noReleaseFound": "Ne eblas trovi taŭgan eldonon",
"noVersionFound": "Ne eblas determini la eldonversion",
"urlMatchesNoSource": "La URL ne konformas al konata fonto",
"cantInstallOlderVersion": "Ne eblas instali malnovan version de la Apo",
"appIdMismatch": "La identigilo de la elŝutita pakaĵo ne konformas al la identigilo de la ekzistanta apo",
"functionNotImplemented": "Tiu klaso ne fasonadas tiun funkcion",
"placeholder": "Rezervilo",
"someErrors": "Eraroj okazis",
"unexpectedError": "Neatendita eraro",
"ok": "Okej",
"and": "kaj",
"githubPATLabel": "Github persona atingoĵetono (pliigas la kvantolimon)",
"includePrereleases": "Inkluzivi la pra-eldonojn",
"fallbackToOlderReleases": "Reveno al malnovaj versioj",
"filterReleaseTitlesByRegEx": "Filtri la eldontitoljn per regula esprimo",
"invalidRegEx": "Nevalida regula esprimo",
"noDescription": "Neniu priskribo",
"cancel": "Nuligi",
"continue": "Daŭrigi",
"requiredInBrackets": "(Neprigata)",
"dropdownNoOptsError": "ERARO: LA MALVOLVANTA LISTO DEVAS HAVI ALMENAŬ UNU OPCION",
"colour": "Koloro",
"standard": "Norma",
"custom": "Agordita",
"useMaterialYou": "Uzi Material You",
"githubStarredRepos": "Stelaj GitHub-deponejoj",
"uname": "Uzantnomo",
"wrongArgNum": "Malĝusta nombro da provizitaj argumentoj",
"xIsTrackOnly": "{} estas nur sekvitaj",
"source": "Fonto",
"app": "Apo",
"appsFromSourceAreTrackOnly": "Apoj el tiu fonto estas 'Nur sekvitaj'.",
"youPickedTrackOnly": "Vi selektis la opcion 'Nur sekvitaj'.",
"trackOnlyAppDescription": "La apo estas sekvota por ĝisdatigoj, sed Obtainium ne povos elŝuti aŭ instali ĝin.",
"cancelled": "Nuligita",
"appAlreadyAdded": "Jam aldonita apo",
"alreadyUpToDateQuestion": "Ĉu la apo estas ĝisdata?",
"addApp": "Aldoni apon",
"appSourceURL": "URL de la apofonto",
"error": "Eraro",
"add": "Aldoni",
"searchSomeSourcesLabel": "Serĉi (nur kelkaj fontoj)",
"search": "Serĉi",
"additionalOptsFor": "Kromaj opcioj por {}",
"supportedSources": "Taskiĝata fontoj",
"trackOnlyInBrackets": "(Nur sekvita)",
"searchableInBrackets": "(Serĉebla)",
"appsString": "Apoj",
"noApps": "Neniu apo",
"noAppsForFilter": "Neniu apo por filtri",
"byX": "Laŭ {}",
"percentProgress": "Progreso: {}%",
"pleaseWait": "Bonvolu atendi",
"updateAvailable": "Havebla ĝisdatigo",
"notInstalled": "Neinstalita",
"pseudoVersion": "Pseŭdoversio",
"selectAll": "Selekti ĉion",
"deselectX": "Malselekti {}",
"xWillBeRemovedButRemainInstalled": "{} estas farigota de Obtainium sed restos instalata en la disponaĵo.",
"removeSelectedAppsQuestion": "Farigi la selektitajn apojn?",
"removeSelectedApps": "Farigi la selektitajn apojn",
"updateX": "Ĝisdatigi {}",
"installX": "Instali {}",
"markXTrackOnlyAsUpdated": "Marki {}\n(Nur sekvita)\nkiel ĝisdata",
"changeX": "Ŝanĝi {}",
"installUpdateApps": "Instali/ĝisdatigi apojn",
"installUpdateSelectedApps": "Instali/ĝisdatigi la selektitajn apojn",
"markXSelectedAppsAsUpdated": "Marki la {} selektitajn apojn kiel ĝisdataj?",
"no": "Ne",
"yes": "Jes",
"markSelectedAppsUpdated": "Marki la selektitajn apojn kiel ĝisdataj",
"pinToTop": "Alpingli supre",
"unpinFromTop": "Malalpingli el supro",
"resetInstallStatusForSelectedAppsQuestion": "Rekomenci la instaladostaton de la selektitaj apoj?",
"installStatusOfXWillBeResetExplanation": "Instaladostato de ĉiuj selektitaj apoj estas rekomencota.\n\nTio povas utili kiam la versio de la montrata application en Obtainium estas malĝusta kaŭze de malsukcesaj ĝidatigoj aŭ aliaj problemoj.",
"customLinkMessage": "Tiuj ligiloj funkcias en disponaĵoj kun Obtainium instalita",
"shareAppConfigLinks": "Diskonigi la apo-agordojn kiel HTML ligilo",
"shareSelectedAppURLs": "Diskonigi la selektitajn apo-URLjn",
"resetInstallStatus": "Rekomenci la instaladostaton de la apoj",
"more": "Pli",
"removeOutdatedFilter": "Forigi la filtron de malmodernaj apoj",
"showOutdatedOnly": "Nur montri malmodernajn apojn",
"filter": "Filtro",
"filterApps": "Filtri la apojn",
"appName": "Aponomo",
"author": "Aŭtoro",
"upToDateApps": "Ĝisdataj apoj",
"nonInstalledApps": "Neinstalita apoj",
"importExport": "Importi/Eksporti",
"settings": "Agordoj",
"exportedTo": "Eksportita en {}",
"obtainiumExport": "Eksporti Obtainium-n",
"invalidInput": "Nevalida enigo",
"importedX": "Importita {}",
"obtainiumImport": "Importi Obtainium-n",
"importFromURLList": "Eksporti el URL-listo",
"searchQuery": "Informmendo de serĉo",
"appURLList": "Listo de URLj de la apo",
"line": "Horizontalo",
"searchX": "Serĉi {}",
"noResults": "Neniu rezulto",
"importX": "Importi {}",
"importedAppsIdDisclaimer": "La importitaj apoj povas montriĝi malĝuste kiel \"Neinstalitaj\".\nPor solvi tion, reinstalu ilin per Obtainium.\nTiu ne afekcios la apodatumoj.\n\nAkefcias nur la URL-ajn lak triajn importmetodojn.",
"importErrors": "Eraroj de importado",
"importedXOfYApps": "{} apoj el {} importitaj.",
"followingURLsHadErrors": "La sekvantaj URLj havis erarojn:",
"selectURL": "Selekti URLn",
"selectURLs": "Selekti URLjn",
"pick": "Elekti",
"theme": "Temo",
"dark": "Malhela",
"light": "Hela",
"followSystem": "Konformi al sistemo",
"followSystemThemeExplanation": "Konformi al sistemtemo nur eblas kun triaj aplikaĵoj.",
"useBlackTheme": "Uzi puran nigran temon",
"appSortBy": "Klasi apojn laŭ",
"authorName": "Aŭtoro/Nomo",
"nameAuthor": "Nomo/Aŭtoro",
"asAdded": "Aldondato",
"appSortOrder": "Ordo de la apoklasifiko",
"ascending": "Kreskanta",
"descending": "Malkreskanta",
"bgUpdateCheckInterval": "Serĉo-intertempo de fonaj ĝisdatigoj",
"neverManualOnly": "Neniam - Nur Malaŭtomata",
"appearance": "Aspekto",
"showWebInAppView": "Montri la fonta retpaĝo en la langeto 'Apoj'",
"pinUpdates": "Alpingli ĝisatigojn en la supro de la langeto 'Apoj'",
"updates": "Ĝisdatigoj",
"sourceSpecific": "Fontspecifa",
"appSource": "Apofonto",
"noLogs": "Neniu protokolo",
"appLogs": "Apoprotokoloj",
"close": "Fermi",
"share": "Diskonigi",
"appNotFound": "Netrovebla apo",
"obtainiumExportHyphenatedLowercase": "eksporto-obtainium",
"pickAnAPK": "Selektu APKn",
"appHasMoreThanOnePackage": "{} havas pli ol unu pakaĵon:",
"deviceSupportsXArch": "Via disponaĵo taskiĝas la CPU-arkitekturon {}.",
"deviceSupportsFollowingArchs": "Via disponaĵo taskiĝas la sekvantajn CPU-arkitekturojn:",
"warning": "Avertu",
"sourceIsXButPackageFromYPrompt": "La apofonto estas '{}' sed la pakaĵo de ĝisdatigo devenas de '{}'. Daŭrigi?",
"updatesAvailable": "Haveblaj ĝisdatigoj",
"updatesAvailableNotifDescription": "Sciigas al la uzanto, ke ĝisdatigoj haveblas por unu aŭ pluraj apoj sekvitaj fare de Obtainium.",
"noNewUpdates": "Neniu nova ĝisdatigo.",
"xHasAnUpdate": "{} havas ĝisdatigon.",
"appsUpdated": "Ĝisdataj apoj",
"appsNotUpdated": "Malsukcesis ĝisdatigi aplikaĵojn",
"appsUpdatedNotifDescription": "Sciigas al la uzanto, ke ĝisdatigoj de unu aŭ pluraj apoj estas instalitaj fone.",
"xWasUpdatedToY": "{} estas ĝidatigita en {}.",
"xWasNotUpdatedToY": "Malsukcesas ĝisdatigi de {} en {}.",
"errorCheckingUpdates": "Eraro serĉante ĝisdatigojn",
"errorCheckingUpdatesNotifDescription": "Sciigas al la uzanto, kiam la serĉo de fonaj ĝisdatigoj malsukcesas.",
"appsRemoved": "Forigitaj Apoj",
"appsRemovedNotifDescription": "Sciigas al la uzanto, ke unu aŭ pluraj apoj estas forigitaj kaŭze de eraroj dum ilia ŝarĝado.",
"xWasRemovedDueToErrorY": "{} estas forigita kaŭze de tiu eraro: {}",
"completeAppInstallation": "Kompleta instalado de la apo",
"obtainiumMustBeOpenToInstallApps": "Obtainium devas esti malfermita por instali apojn",
"completeAppInstallationNotifDescription": "Petas la uzanton reiri en Obtainium por fini la instaladon de apo",
"checkingForUpdates": "Serĉante ĝisdatigojn",
"checkingForUpdatesNotifDescription": "Dumtempa sciigo kiu aperas dum la serĉo de ĝisdatigoj",
"pleaseAllowInstallPerm": "Bonvolu permesi al Obtainium instali apojn",
"trackOnly": "Nur sekvita",
"errorWithHttpStatusCode": "Eraro {}",
"versionCorrectionDisabled": "Versiokorekto malaktivigita (ŝajnas, ke la kromaĵo ne funkcias)",
"unknown": "Nekonata",
"none": "Nenio",
"never": "Neniam",
"latestVersionX": "Lasta versio: {}",
"installedVersionX": "Instalita versio: {}",
"lastUpdateCheckX": "Lasta serĉo de ĝisdatigoj: {}",
"remove": "Forigi",
"yesMarkUpdated": "Jes, marki kiel ĝisdata",
"fdroid": "Oficiala F-Droid",
"appIdOrName": "Identigilo aŭ nomo de la apo",
"appId": "Identigilo de la apo",
"appWithIdOrNameNotFound": "Neniu apo estas trovita kun tiu identigilo aŭ nomo",
"reposHaveMultipleApps": "Deponejoj povas enhavi plurajn apojn",
"fdroidThirdPartyRepo": "Tria deponejo de F-Droid",
"steamMobile": "Telefona Steam",
"steamChat": "Steam Babilejo",
"install": "Instali",
"markInstalled": "Marki kiel instalita",
"update": "Ĝisdatigi",
"markUpdated": "Marki kiel ĝisdata",
"additionalOptions": "Kromaj opcioj",
"disableVersionDetection": "Malaktivigi la versiodetekto",
"noVersionDetectionExplanation": "Tiu opcio devas esti uzata nur por apoj, kie la versiodetekto ne funkcias ĝuste.",
"downloadingX": "Elŝutante {}",
"downloadX": "Elŝuti {}",
"downloadedX": "Elŝutita {}",
"releaseAsset": "Aktiva versio",
"downloadNotifDescription": "Sciigas al la uzanto pri la progreso de apo-elŝuton",
"noAPKFound": "Neniu trovita APK",
"noVersionDetection": "Neniu versiodetekto",
"categorize": "Kategorii",
"categories": "Kategorioj",
"category": "Kategorio",
"noCategory": "Neniu kategorio",
"noCategories": "Neniuj kategorioj",
"deleteCategoriesQuestion": "Forigi la kategoriojn?",
"categoryDeleteWarning": "Ĉiuj apoj el forigitaj kategorioj iĝos nekategoriitaj.",
"addCategory": "Aldoni kategorion",
"label": "Etikedo",
"language": "Lingvo",
"copiedToClipboard": "Kopiita en la tondujo",
"storagePermissionDenied": "Permeso de stoko malkonsentita",
"selectedCategorizeWarning": "Tio substituos ĉiujn difinitajn kategoriojn de la selektitaj apoj.",
"filterAPKsByRegEx": "Filtri APKj per regula esprimo",
"removeFromObtainium": "Forigi el Obtainium",
"uninstallFromDevice": "Malinstali el la disponaĵo",
"onlyWorksWithNonVersionDetectApps": "Funkcias nur por apoj kun malaktiva versiodetekto.",
"releaseDateAsVersion": "Uzi eldondato kiel versioĉeno",
"releaseDateAsVersionExplanation": "Tiu opcio devas esti uzata nur por apoj, por kiu la versiodetekto ne funkcias ĝuste, sed eldondato estas havebla.",
"changes": "Modifoj",
"releaseDate": "Eldondato",
"importFromURLsInFile": "Importi el URLj en dosiero (kiel OPML)",
"versionDetectionExplanation": "Akordigi la versioĉeno laŭ la versio detektita fare de la operaciumo",
"versionDetection": "Versiodetekto",
"standardVersionDetection": "Norma versiodetekto",
"groupByCategory": "Grupigi per kategorio",
"autoApkFilterByArch": "Provi filtri APKj per CPU-arkitekturo se ebla",
"overrideSource": "Substitui la fonton",
"dontShowAgain": "Ne plu montri",
"dontShowTrackOnlyWarnings": "Ne plu montri 'Nur sekvita' avertojn",
"dontShowAPKOriginWarnings": "Ne plu montri avertojn pri APK-origino",
"moveNonInstalledAppsToBottom": "Movi neinstalatajn apojn al malsupro de la langeto Apoj",
"gitlabPATLabel": "GitLab persona atingoĵetono",
"about": "Pri",
"requiresCredentialsInSettings": "{} bezonas kromajn informojn (en Agordoj)",
"checkOnStart": "Serĉi ĝisdatigojn starte",
"tryInferAppIdFromCode": "Provi dedukti la identigilon de la apo el la fontkodo",
"removeOnExternalUninstall": "Aŭtomate forigi ekstere malinstalitajn apojn",
"pickHighestVersionCode": "Aŭtomate selekti la plej ĵusan version el APK-kodo",
"checkUpdateOnDetailPage": "Serĉi ĝisdatigojn dum la malfermo de la detala apopaĝo",
"disablePageTransitions": "Malaktivigi la animaciojn de paĝotransiro",
"reversePageTransitions": "Inversigi la animaciojn de paĝotransiro",
"minStarCount": "Minimuma nombro da steloj",
"addInfoBelow": "Aldonu ĉi tiu informo ĉi-suba.",
"addInfoInSettings": "Aldonu tiu informo en la agordoj.",
"githubSourceNote": "La kvantolimo de GitHub povas esti evitata danke al API-ŝlosilo.",
"sortByLastLinkSegment": "Klasi laŭ la lasta segmento de la ligilo",
"filterReleaseNotesByRegEx": "Filtri versionotojn per regula esprimo",
"customLinkFilterRegex": "Filtro de APK-ligilo agordita per regula esprimo (defaŭlte '.apk$')",
"appsPossiblyUpdated": "Provitaj apoĝisdatigoj",
"appsPossiblyUpdatedNotifDescription": "Sciigas al la uzanto, ke ĝisdatigoj de unu aŭ pluraj apoj eble estas aplikitaj fone",
"xWasPossiblyUpdatedToY": "{} povas esti ĝisdata kiel {}.",
"enableBackgroundUpdates": "Aktivigi fonajn ĝisdatigojn",
"backgroundUpdateReqsExplanation": "Fonaj ĝisdatigoj ne eblas por ĉiuj apoj.",
"backgroundUpdateLimitsExplanation": "La sukceso de fona instalado povas esti nur determinata dum la malfermo de Obtainium.",
"verifyLatestTag": "Inspekti la etikedon 'latest'",
"intermediateLinkRegex": "Filtri por 'pera' vizitota ligilo",
"filterByLinkText": "Filtri ligilojn laŭ ligiloteksto",
"intermediateLinkNotFound": "Netrovebla pera ligilo",
"intermediateLink": "Pera ligilo",
"exemptFromBackgroundUpdates": "Escepti el la fonaj ĝisdatigoj (se aktiva)",
"bgUpdatesOnWiFiOnly": "Malaktivigi fonajn ĝisdatigojn se sen vifio",
"autoSelectHighestVersionCode": "Aŭtomate selekti la plej ĵusan version de la APK-kodo",
"versionExtractionRegEx": "Ekstrakti la versioĉenon per regula esprimo",
"trimVersionString": "Mallongigi la versioĉenon per regula esprimo",
"matchGroupToUseForX": "Konformecogrupo uzota por \"{}\"",
"matchGroupToUse": "Grupo de konformeco uzota por la eltiraĵo de la versio per regula esprimo",
"highlightTouchTargets": "Emfazi malpi evidentajn klavojn",
"pickExportDir": "Selekti la dosierujon de eksporto",
"autoExportOnChanges": "Aŭtomate eksporti dum modifoj",
"includeSettings": "Inkluzivi la agordojn",
"filterVersionsByRegEx": "Filtri versiojn per regula esprimo",
"trySelectingSuggestedVersionCode": "Provi selekti la sugestitan version fare de la APK-kodo",
"dontSortReleasesList": "Konservi la ordo de la API-versio",
"reverseSort": "Inversigi klasifikon",
"takeFirstLink": "Uzi la unuan ligilon",
"skipSort": "Salti la klasifikon",
"debugMenu": "Menu de eraroserĉado",
"bgTaskStarted": "Fona tasko startita - inspektu la protokolojn.",
"runBgCheckNow": "Ruli la serĉo de fonaj ĝisdatigoj nun",
"versionExtractWholePage": "Apliki eltiraĵon de la versioĉeno per regula esprimo al la tuta paĝo",
"installing": "Instalante",
"skipUpdateNotifications": "Salti la sciigojn de ĝisdatigo",
"updatesAvailableNotifChannel": "Haveblaj ĝisdatigoj",
"appsUpdatedNotifChannel": "Ĝisdataj aplikaĵoj",
"appsPossiblyUpdatedNotifChannel": "Provitaj apoĝisdatigoj",
"errorCheckingUpdatesNotifChannel": "Eraro serĉante ĝisdatigojn",
"appsRemovedNotifChannel": "Forigitaj aplikaĵoj",
"downloadingXNotifChannel": "Elŝutante {}",
"completeAppInstallationNotifChannel": "Kompleta apo instalado",
"checkingForUpdatesNotifChannel": "Serĉante ĝisdatigojn",
"onlyCheckInstalledOrTrackOnlyApps": "Nur serĉi la ĝisdatigojn de instalitaj kaj 'nur sekvitaj' apoj",
"supportFixedAPKURL": "Taskiĝo de la fiksaj APK URLj",
"selectX": "Selekti {}",
"parallelDownloads": "Permesi dumajn elŝutojn",
"useShizuku": "Uzi Shizuku aŭ Sui por instali",
"shizukuBinderNotFound": "La servo Shizuku estas netrovebla",
"shizukuOld": "Malnova versio de Shizuku (<11) - bonvolu ĝisdatigi ĝin",
"shizukuOldAndroidWithADB": "Shizuku funkcias en Android < 8.1 kun ADB - bonvolu ĝisdatigi Android aŭ uzu Sui anstataŭe",
"shizukuPretendToBeGooglePlay": "Determini Google Play kiel instalfonto (se Shizuku estas uzata)",
"useSystemFont": "Uzi la sistema tiparo",
"useVersionCodeAsOSVersion": "Uzi versiokodo de la apo kiel versio detektita fare de la operaciumo",
"requestHeader": "Titolo de la informmendo",
"useLatestAssetDateAsReleaseDate": "Uzi la lastan publikigitan elementon kiel eldondato",
"defaultPseudoVersioningMethod": "Defaŭlta metodo de fikcia versio",
"partialAPKHash": "Parta APKa haketo",
"APKLinkHash": "Haketo de la APKa ligilo",
"directAPKLink": "Rekta APKa ligilo",
"pseudoVersionInUse": "Pseŭdoversio estas uzata",
"installed": "Instalita",
"latest": "Lasta versio",
"invertRegEx": "Inversigi la regula esprimo",
"note": "Noto",
"selfHostedNote": "La malvolvanta listo \"{}\" povas esti uzata por aliri al memgastigataj/agordata instancoj el ajna fonto.",
"badDownload": "La APK ne povis esti analizita (neakordigebla aŭ nekompleta elŝuto)",
"beforeNewInstallsShareToAppVerifier": "Diskonigi novajn aplikaĵojn kun AppVerifier (se havebla)",
"appVerifierInstructionToast": "Diskonigu kun AppVerifier, poste revenu ĉi tie kiam preta.",
"wiki": "Helpo/Vikio",
"crowdsourcedConfigsLabel": "Komunumaj apo-agordoj (uzu kun singardo)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "Forigi la aplikaĵon?",
"other": "Forigi la aplikaĵojn?"
},
"tooManyRequestsTryAgainInMinutes": {
"one": "Tro da informmendoj (limigita kvanto) - reprovu en {} minuto",
"other": "Tro da informmendoj (limigita kvanto) - reprovu en {} minutoj"
},
"bgUpdateGotErrorRetryInMinutes": {
"one": "La serĉo de fonaj ĝisdatigoj renkontis al {}, nova programota provo en {} minuto",
"other": "La serĉo de fonaj ĝisdatigoj renkontis al {}, nova programota provo en {} minutoj"
},
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
"one": "La serĉo de fonaj ĝisdatigoj trovis {} ĝisdatigon - la uzanto estas sciigota se necesa",
"other": "La serĉo de fonaj ĝisdatigoj trovis {} ĝisdatigojn - la uzanto estas sciigota se necesa"
},
"apps": {
"one": "{} Apo",
"other": "{} Apoj"
},
"url": {
"one": "{} URL",
"other": "{} URLj"
},
"minute": {
"one": "{} Minuto",
"other": "{} Minutoj"
},
"hour": {
"one": "{} Horo",
"other": "{} Horoj"
},
"day": {
"one": "{} Tago",
"other": "{} Tagoj"
},
"clearedNLogsBeforeXAfterY": {
"one": "Purigis {n} protokolon (antaŭe = {before}, malantaŭe = {after})",
"other": "Purigis {n} protokolojn (antaŭe = {before}, malantaŭe = {after})"
},
"xAndNMoreUpdatesAvailable": {
"one": "{} kaj 1 alia apo havas ĝisdatigojn.",
"other": "{} kaj {} aliaj apoj havas ĝisdatigojn."
},
"xAndNMoreUpdatesInstalled": {
"one": "{} kaj 1 alia apo ĝisdatiĝis.",
"other": "{} kaj {} aliaj apoj ĝisdatiĝis."
},
"xAndNMoreUpdatesFailed": {
"one": "Ne eblas ĝisdatigi {} kaj 1 alian apon.",
"other": "Ne eblas ĝisdatigi {} et {} aliajn apojn."
},
"xAndNMoreUpdatesPossiblyInstalled": {
"one": "{} kaj 1 alia apo eble ĝisdatiĝis.",
"other": "{} kaj {} aliaj apoj eble ĝisdatiĝis."
},
"apk": {
"one": "{} APK",
"other": "{} APKj"
}
}

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Share to AppVerifier, then return here when ready.",
"wiki": "Help/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "Remove App?",
"other": "Remove Apps?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
"wiki": "Ayuda/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
"allowInsecure": "Permitir peticiones HTTP inseguras",
"removeAppQuestion": {
"one": "¿Eliminar aplicación?",
"other": "¿Eliminar aplicaciones?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "در AppVerifier به اشتراک بگذارید، سپس پس از آماده شدن به اینجا برگردید.",
"wiki": "راهنما/ویکی",
"crowdsourcedConfigsLabel": "تنظیمات برنامه Crowdsourced (با مسئولیت خود استفاده کنید)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "برنامه حذف شود؟",
"other": "برنامه ها حذف شوند؟"

View File

@@ -88,23 +88,23 @@
"author": "Auteur",
"upToDateApps": "Applications à jour",
"nonInstalledApps": "Applications non installées",
"importExport": "Sauvegarder/Restaurer",
"importExport": "Importer/Exporter",
"settings": "Paramètres",
"exportedTo": "Sauvegardé vers {}",
"obtainiumExport": "Sauvegarder Obtainium",
"exportedTo": "Exporté vers {}",
"obtainiumExport": "Exporter Obtainium",
"invalidInput": "Entrée invalide",
"importedX": "Restauré {}",
"obtainiumImport": "Restaurer Obtainium",
"importFromURLList": "Restaurer depuis une liste d'URL",
"importedX": "Importé {}",
"obtainiumImport": "Importer sur Obtainium",
"importFromURLList": "Importer depuis une liste d'URL",
"searchQuery": "Requête de recherche",
"appURLList": "Liste d'URL de l'application",
"line": "Ligne",
"searchX": "Rechercher {}",
"noResults": "Aucun résultat",
"importX": "Restauré {}",
"importX": "Importation de {}",
"importedAppsIdDisclaimer": "Les applications importées peuvent s'afficher de manière incorrecte comme étant \"Non installées\".\nPour résoudre ce problème, réinstallez-les via Obtainium.\nCela n'affectera pas les données des applications.\n\nN'affecte que les méthodes d'importation d'URL et par des tiers.",
"importErrors": "Erreurs lors de la restauration",
"importedXOfYApps": "{} applications sur {} ont été restaurées.",
"importErrors": "Erreurs lors de l'importation",
"importedXOfYApps": "{} applications sur {} ont été importés.",
"followingURLsHadErrors": "Les URL suivants comportent des erreurs :",
"selectURL": "Sélectionner l'URL",
"selectURLs": "Sélectionner les URL",
@@ -263,8 +263,8 @@
"matchGroupToUseForX": "Groupe de correspondance à utiliser pour \"{}\"",
"matchGroupToUse": "Groupe de correspondance à utiliser pour l'extraction de la version par Expression régulière",
"highlightTouchTargets": "Mettre en évidence les touches moins évidentes",
"pickExportDir": "Selectionner le dossier pour l'exportation",
"autoExportOnChanges": "Exportation automatique lors de modification",
"pickExportDir": "Selectionner le dossier d'exportation",
"autoExportOnChanges": "Exporter automatiquement lors de modifications",
"includeSettings": "Inclure les paramètres",
"filterVersionsByRegEx": "Filtrer les versions par expression régulière",
"trySelectingSuggestedVersionCode": "Essayer de sélectionner la version suggérée du code APK",
@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque tout est prêt.",
"wiki": "Aide/Wiki",
"crowdsourcedConfigsLabel": "Configurations d'applications par la communauté (à utiliser à vos risques et périls)",
"allowInsecure": "Autoriser les requêtes HTTP non sécurisées",
"removeAppQuestion": {
"one": "Supprimer l'application?",
"other": "Supprimer les applications?"

View File

@@ -1,198 +1,198 @@
{
"invalidURLForSource": "Érvénytelen a(z) {} app URL-je",
"invalidURLForSource": "Érvénytelen a(z) {} alkalmazás webcíme",
"noReleaseFound": "Nem található megfelelő kiadás",
"noVersionFound": "Nem sikerült meghatározni a kiadás verzióját",
"urlMatchesNoSource": "Az URL nem egyezik ismert forrással",
"cantInstallOlderVersion": "Nem telepíthető egy app régebbi verziója",
"appIdMismatch": "A letöltött csomagazonosító nem egyezik a meglévő app azonosítóval",
"functionNotImplemented": "Ez az osztály nem valósította meg ezt a függvényt",
"placeholder": "Helykitöltő",
"urlMatchesNoSource": "A webcím nem egyezik egyetlen ismert forrással sem",
"cantInstallOlderVersion": "Nem telepíthető egy alkalmazás régebbi verziója",
"appIdMismatch": "A letöltött csomagazonosító nem egyezik a meglévő alkalmazás azonosítóval",
"functionNotImplemented": "Ebben az ágban nincs implementálva ez a funkció",
"placeholder": "Helyőrző",
"someErrors": "Néhány hiba történt",
"unexpectedError": "Váratlan hiba",
"ok": "Oké",
"ok": "Rendben",
"and": "és",
"githubPATLabel": "GitHub Personal Access Token (megnöveli a díjkorlátot)",
"githubPATLabel": "GitHub személyes hozzáférési token (megnöveli a lekérdezés-korlátozást)",
"includePrereleases": "Tartalmazza az előzetes kiadásokat",
"fallbackToOlderReleases": "Visszatérés a régebbi kiadásokhoz",
"filterReleaseTitlesByRegEx": "A kiadás címeinek szűrése reguláris kifejezéssel",
"invalidRegEx": "Érvénytelen reguláris kifejezés",
"noDescription": "Nincs leírás",
"cancel": "Mégse",
"continue": "Tovább",
"requiredInBrackets": "(Kötelező)",
"dropdownNoOptsError": "HIBA: A LEDOBÁST LEGALÁBB EGY OPCIÓHOZ KELL RENDELNI",
"continue": "Folytatás",
"requiredInBrackets": "(Szükséges)",
"dropdownNoOptsError": "HIBA: A LEGÖRDÜLŐ LISTÁNAK LEGALÁBB EGY OPCIÓVAL KELL RENDELKEZNIE",
"colour": "Szín",
"standard": "Standard",
"custom": "Custom",
"useMaterialYou": "Használja az Ön által használt anyagot",
"githubStarredRepos": "GitHub Csillagos Repo-k",
"uname": "Felh.név",
"wrongArgNum": "Rossz számú argumentumot adott meg",
"standard": "Általános",
"custom": "Egyéni",
"useMaterialYou": "Material You használata",
"githubStarredRepos": "Csillagozott GitHub tárolók",
"uname": "Felhasználónév",
"wrongArgNum": "A megadott argumentumok száma nem megfelelő",
"xIsTrackOnly": "A(z) {} csak nyomonkövethető",
"source": "Forrás",
"app": "Alkalmazás",
"appsFromSourceAreTrackOnly": "Az ebből a forrásból származó alkalmazások 'Csak nyomon követhetőek'.",
"youPickedTrackOnly": "A 'Csak követés' opciót választotta.",
"appsFromSourceAreTrackOnly": "Az ebből a forrásból származó alkalmazások „csak nyomonkövethetőek.",
"youPickedTrackOnly": "Csak nyomonkövetés opciót választotta.",
"trackOnlyAppDescription": "Az alkalmazás frissítéseit nyomon követi, de az Obtainium nem tudja letölteni vagy telepíteni.",
"cancelled": "Törölve",
"appAlreadyAdded": "Az app már hozzáadva",
"alreadyUpToDateQuestion": "Az app már naprakész?",
"addApp": "App hozzáadás",
"appSourceURL": "App forrás URL",
"cancelled": "Visszavonva",
"appAlreadyAdded": "Az alkalmazás már hozzá van adva",
"alreadyUpToDateQuestion": "Az alkalmazás már naprakész?",
"addApp": "Hozzáadás",
"appSourceURL": "Alkalmazás forrásának webcíme",
"error": "Hiba",
"add": "Hozzáadás",
"searchSomeSourcesLabel": "Keresés (csak egyes források)",
"searchSomeSourcesLabel": "Keresés (csak bizonyos források)",
"search": "Keresés",
"additionalOptsFor": "További lehetőségek a következőhöz: {}",
"supportedSources": "Támogatott források",
"trackOnlyInBrackets": "(Csak nyomonkövetés)",
"searchableInBrackets": "(Kereshető)",
"appsString": "Appok",
"noApps": "Nincs App",
"noAppsForFilter": "Nincsenek appok a szűrőhöz",
"appsString": "Alkalmazások",
"noApps": "Nincsenek alkalmazások",
"noAppsForFilter": "Nincsenek alkalmazások a szűrőhöz",
"byX": "Fejlesztő: {}",
"percentProgress": "Folyamat: {}%",
"pleaseWait": "Kis türelmet",
"updateAvailable": "Frissítés érhető el",
"notInstalled": "Nem telepített",
"pseudoVersion": "ál-verzió",
"selectAll": "Mindet kiválaszt",
"deselectX": "Törölje {} kijelölését",
"pseudoVersion": "pszeudo-verzió",
"selectAll": "Összes kiválasztása",
"deselectX": "A(z) {} kiválasztásának elvetése",
"xWillBeRemovedButRemainInstalled": "A(z) {} el lesz távolítva az Obtainiumból, de továbbra is telepítve marad az eszközön.",
"removeSelectedAppsQuestion": "Eltávolítja a kiválasztott appokat?",
"removeSelectedApps": "Távolítsa el a kiválasztott appokat",
"updateX": "Frissítés: {}",
"installX": "Telepítés: {}",
"markXTrackOnlyAsUpdated": "Jelölje meg: {}\n(Csak nyomon követhető)\nmint Frissített",
"changeX": "Változás {}",
"installUpdateApps": "Appok telepítése/frissítése",
"installUpdateSelectedApps": "Telepítse/frissítse a kiválasztott appokat",
"markXSelectedAppsAsUpdated": "Megjelöl {} kiválasztott alkalmazást frissítettként?",
"removeSelectedAppsQuestion": "A kiválasztott alkalmazások eltávolítása?",
"removeSelectedApps": "A kiválasztott alkalmazások eltávolítása",
"updateX": "A(z) {} frissítése",
"installX": "A(z) {} telepítése",
"markXTrackOnlyAsUpdated": "Megjelölés: {}\n(Csak nyomon követhető)\nmint Frissített",
"changeX": "{} változtatás",
"installUpdateApps": "Alkalmazások telepítése/frissítése",
"installUpdateSelectedApps": "A kiválasztott alkalmazások telepítése/frissítése",
"markXSelectedAppsAsUpdated": "A(z) {} kiválasztott alkalmazás megjelölése frissítettként?",
"no": "Nem",
"yes": "Igen",
"markSelectedAppsUpdated": "Jelölje meg a kiválasztott appokat frissítettként",
"pinToTop": "Rögzítés felülre",
"unpinFromTop": "Eltávolít felülről",
"resetInstallStatusForSelectedAppsQuestion": "Visszaállítja a kiválasztott appok telepítési állapotát?",
"installStatusOfXWillBeResetExplanation": "A kiválasztott appok telepítési állapota visszaáll.\n\nEz akkor segíthet, ha az Obtainiumban megjelenített app verzió hibás, frissítések vagy egyéb problémák miatt.",
"markSelectedAppsUpdated": "A kiválasztott alkalmazások megjelölése frissítettként",
"pinToTop": "Kitűzés felülre",
"unpinFromTop": "Kitűzés megszüntetése",
"resetInstallStatusForSelectedAppsQuestion": "Visszaállítja a kiválasztott alkalmazások telepítési állapotát?",
"installStatusOfXWillBeResetExplanation": "A kiválasztott alkalmazások telepítési állapota visszaáll.\n\nEz akkor segíthet, ha az Obtainiumban megjelenített alkalmazás-verzió hibás, a frissítések vagy egyéb problémák miatt.",
"customLinkMessage": "Ezek a hivatkozások a telepített Obtainium-mal rendelkező eszközökön működnek",
"shareAppConfigLinks": "App konfiguráció megosztása HTML linkként",
"shareSelectedAppURLs": "Ossza meg a kiválasztott app URL címeit",
"shareAppConfigLinks": "Alkalmazás-konfiguráció megosztása HTML hivatkozásként",
"shareSelectedAppURLs": "A kiválasztott alkalmazás hivatkozásának megosztása",
"resetInstallStatus": "Telepítési állapot visszaállítása",
"more": "További",
"removeOutdatedFilter": "Távolítsa el az elavult app szűrőt",
"showOutdatedOnly": "Csak az elavult appok megjelenítése",
"removeOutdatedFilter": "Elavult-alkalmazás szűrő eltávolítása",
"showOutdatedOnly": "Csak az elavult alkalmazások megjelenítése",
"filter": "Szűrő",
"filterApps": "Appok szűrése",
"appName": "App név",
"filterApps": "Alkalmazások szűrése",
"appName": "Név",
"author": "Szerző",
"upToDateApps": "Naprakész appok",
"nonInstalledApps": "Nem telepített appok",
"importExport": "Import Export",
"upToDateApps": "Naprakész alkalmazások",
"nonInstalledApps": "Nem telepített alkalmazások",
"importExport": "Import/Export",
"settings": "Beállítások",
"exportedTo": "Exportálva ide {}",
"obtainiumExport": "Obtainium Adat Exportálás",
"exportedTo": "Exportálva ide: {}",
"obtainiumExport": "Obtainium adatainak exportálása",
"invalidInput": "Hibás bemenet",
"importedX": "Importálva innen {}",
"obtainiumImport": "Obtainium Adat Importálás",
"importFromURLList": "Importálás URL listából",
"importedX": "Importálva innen: {}",
"obtainiumImport": "Obtainium adatok importálása",
"importFromURLList": "Importálás webcím-listából",
"searchQuery": "Keresési lekérdezés",
"appURLList": "App URL lista",
"appURLList": "Alkalmazás webcím-lista",
"line": "Sor",
"searchX": "Keresés {}",
"searchX": "{} keresése",
"noResults": "Nincs találat",
"importX": "Importálás: {}",
"importedAppsIdDisclaimer": "Előfordulhat, hogy az importált appok helytelenül \"Nincs telepítve\" jelzéssel jelennek meg.\nA probléma megoldásához telepítse újra őket az Obtainiumon keresztül.\nEz nem érinti az alkalmazásadatokat.\n\nCsak az URL-ekre és a harmadik féltől származó importálási módszerekre vonatkozik..",
"importX": "{} importálása",
"importedAppsIdDisclaimer": "Előfordulhat, hogy az importált alkalmazások helytelenül Nincs telepítve jelzéssel jelennek meg.\nA probléma megoldásához telepítse újra őket az Obtainiumon keresztül.\nEz nem érinti az alkalmazásadatokat.\n\nCsak a hivatkozásokra és a harmadik féltől származó importálási módszerekre vonatkozik..",
"importErrors": "Importálási hibák",
"importedXOfYApps": "{}/{} app importálva.",
"followingURLsHadErrors": "A következő URL-ek hibákat tartalmaztak:",
"selectURL": "Válassza ki az URL-t",
"selectURLs": "Kiválasztott URL-ek",
"pick": "Válasszon",
"importedXOfYApps": "{}/{} alkalmazás importálva.",
"followingURLsHadErrors": "A következő webcímek hibákat tartalmaztak:",
"selectURL": "Webcím kiválasztása",
"selectURLs": "Webcímek kiválasztása",
"pick": "Kiválasztás",
"theme": "Téma",
"dark": "Sötét",
"light": "Világos",
"followSystem": "Rendszer szerint",
"followSystem": "Rendszerbeállítás használata",
"followSystemThemeExplanation": "A következő rendszer téma csak harmadik féltől származó alkalmazások használatával lehetséges",
"useBlackTheme": "Használjon teljesen fekete sötét témát",
"appSortBy": "App rendezés...",
"appSortBy": "Elrendezés",
"authorName": "Szerző/Név",
"nameAuthor": "Név/Szerző",
"asAdded": "Mint Hozzáadott",
"appSortOrder": "Appok rendezése",
"asAdded": "Mint hozzáadott",
"appSortOrder": "Rendezési sorrend",
"ascending": "Emelkedő",
"descending": "Csökkenő",
"bgUpdateCheckInterval": "Háttérfrissítés ellenőrzés időköze",
"neverManualOnly": "Soha csak manuális",
"bgUpdateCheckInterval": "Időtartam a frissítések háttér-ellenőrzése között",
"neverManualOnly": "Soha csak kézi",
"appearance": "Megjelenés",
"showWebInAppView": "Forrás megjelenítése az Appok nézetben",
"pinUpdates": "Frissítések kitűzése az App nézet tetejére",
"showWebInAppView": "Forrás megjelenítése az alkalmazásnézetben",
"pinUpdates": "Frissítések kitűzése az alkalmazásnézet tetejére",
"updates": "Frissítések",
"sourceSpecific": "Forrás-specifikus",
"appSource": "App forrás",
"sourceSpecific": "Forrásspecifikus",
"appSource": "Alkalmazás forrása",
"noLogs": "Nincsenek naplók",
"appLogs": "App naplók",
"appLogs": "Alkalmazásnaplók",
"close": "Bezárás",
"share": "Megosztás",
"appNotFound": "App nem található",
"appNotFound": "Az alkalmazás nem található",
"obtainiumExportHyphenatedLowercase": "obtainium-export",
"pickAnAPK": "Válasszon egy APK-t",
"appHasMoreThanOnePackage": "A(z) {} egynél több csomaggal rendelkezik:",
"deviceSupportsXArch": "Eszköze támogatja a {} CPU architektúrát.",
"deviceSupportsFollowingArchs": "Az eszköze a következő CPU architektúrákat támogatja:",
"deviceSupportsXArch": "Ez az eszköz támogatja a(z) {} CPU architektúrát.",
"deviceSupportsFollowingArchs": "Ez az eszköz a következő CPU architektúrákat támogatja:",
"warning": "Figyelem",
"sourceIsXButPackageFromYPrompt": "Az alkalmazás forrása „{}”, de a kiadási csomag innen származik: „{}”. Folytatja?",
"updatesAvailable": "Frissítések érhetők el",
"updatesAvailableNotifDescription": "Értesíti a felhasználót, hogy frissítések állnak rendelkezésre egy vagy több, az Obtainium által nyomon követett alkalmazáshoz",
"sourceIsXButPackageFromYPrompt": "Az alkalmazás forrása a(z) „{}” tároló, de a kiadási csomag innen származik: „{}”. Folytatja?",
"updatesAvailable": "Frissítések érhetőek el",
"updatesAvailableNotifDescription": "Értesíti a felhasználót, hogy egy vagy több, az Obtainium által nyomonkövetett alkalmazáshoz frissítések állnak rendelkezésre",
"noNewUpdates": "Nincsenek új frissítések.",
"xHasAnUpdate": "A(z) {} frissítést kapott.",
"appsUpdated": "Alkalmazások frissítve",
"appsNotUpdated": "Nem sikerült frissíteni az alkalmazásokat",
"appsUpdatedNotifDescription": "Értesíti a felhasználót, hogy egy/több app frissítése megtörtént a háttérben",
"xWasUpdatedToY": "{} frissítve a következőre: {}.",
"xWasNotUpdatedToY": "A {} frissítése a {}-ra nem sikerült.",
"appsUpdatedNotifDescription": "Értesíti a felhasználót, hogy egy vagy több alkalmazás frissítése a háttérben történt.",
"xWasUpdatedToY": "A(z) {} frissítve lett a következőre: {}.",
"xWasNotUpdatedToY": "Nem sikerült frissíteni a következőt: {}, erre: {}.",
"errorCheckingUpdates": "Hiba a frissítések keresésekor",
"errorCheckingUpdatesNotifDescription": "Értesítés, amely akkor jelenik meg, ha a háttérbeli frissítések ellenőrzése sikertelen",
"errorCheckingUpdatesNotifDescription": "Értesítés, amely akkor jelenik meg, ha a háttérfrissítés ellenőrzése nem sikerül",
"appsRemoved": "Alkalmazások eltávolítva",
"appsRemovedNotifDescription": "Értesíti a felhasználót egy vagy több alkalmazás eltávolításáról a betöltésük során fellépő hibák miatt",
"xWasRemovedDueToErrorY": "A(z) {} a következő hiba miatt lett eltávolítva: {}",
"completeAppInstallation": "Teljes app telepítés",
"obtainiumMustBeOpenToInstallApps": "Az Obtainiumnak megnyitva kell lennie az alkalmazások telepítéséhez",
"appsRemovedNotifDescription": "Értesíti a felhasználót, hogy egy vagy több alkalmazás betöltés közbeni hiba miatt eltávolításra került",
"xWasRemovedDueToErrorY": "A(z) {} eltávolításra került a következő hiba miatt: {}",
"completeAppInstallation": "Teljes alkalmazástelepítés",
"obtainiumMustBeOpenToInstallApps": "Az alkalmazások telepítéséhez az Obtainiumnak megnyitva kell lennie",
"completeAppInstallationNotifDescription": "Megkéri a felhasználót, hogy térjen vissza az Obtainiumhoz, hogy befejezze az alkalmazás telepítését",
"checkingForUpdates": "Frissítések keresése",
"checkingForUpdatesNotifDescription": "Átmeneti értesítés, amely a frissítések keresésekor jelenik meg",
"pleaseAllowInstallPerm": "Kérjük, engedélyezze az Obtainiumnak az alkalmazások telepítését",
"trackOnly": "Csak követés",
"pleaseAllowInstallPerm": "Engedélyezze az Obtainiumnak az alkalmazások telepítését",
"trackOnly": "Csak nyomonkövetés",
"errorWithHttpStatusCode": "Hiba {}",
"versionCorrectionDisabled": "Verzió korrekció letiltva (úgy tűnik, a beépülő modul nem működik)",
"versionCorrectionDisabled": "Verziókorrekció letiltva (úgy tűnik, hogy a bővítmény nem működik)",
"unknown": "Ismeretlen",
"none": "Egyik sem",
"none": "Semmi",
"never": "Soha",
"latestVersionX": "Legújabb verzió: {}",
"installedVersionX": "Telepített verzió: {}",
"lastUpdateCheckX": "Frissítés ellenőrizve: {}",
"lastUpdateCheckX": "Frissítések utoljára ellenőrizve: {}",
"remove": "Eltávolítás",
"yesMarkUpdated": "Igen, megjelölés frissítettként",
"fdroid": "F-Droid hivatalos",
"appIdOrName": "App ID vagy név",
"appId": "Alkalmazásazonosító",
"appWithIdOrNameNotFound": "Nem található app ezzel az azonosítóval vagy névvel",
"reposHaveMultipleApps": "A repók több alkalmazást is tartalmazhatnak",
"fdroidThirdPartyRepo": "F-Droid Harmadik-fél Repo",
"steamMobile": "Steam mobil",
"appIdOrName": "Az alkalmazás-azonosító vagy név",
"appId": "Alkalmazás-azonosító",
"appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel",
"reposHaveMultipleApps": "A tárolók több alkalmazást is tartalmazhatnak",
"fdroidThirdPartyRepo": "F-Droid harmadik féltől származó tároló",
"steamMobile": "Steam Mobil",
"steamChat": "Steam Chat",
"install": "Telepít",
"markInstalled": "Telepítettnek jelöl",
"update": "Frissít",
"markUpdated": "Frissítettnek jelöl",
"additionalOptions": "További lehetőségek",
"install": "Telepítés",
"markInstalled": "Telepítettnek jelölés",
"update": "Frissítés",
"markUpdated": "Frissítettnek jelölés",
"additionalOptions": "További beállítások",
"disableVersionDetection": "Verzió érzékelés letiltása",
"noVersionDetectionExplanation": "Ezt a beállítást csak olyan alkalmazásoknál szabad használni, ahol a verzióérzékelés nem működik megfelelően.",
"downloadingX": "{} letöltés",
"downloadX": "Letöltés {}",
"downloadedX": "Letöltés {}",
"releaseAsset": "Kiadási tartalom",
"downloadNotifDescription": "Értesíti a felhasználót az app letöltésének előrehaladásáról",
"downloadingX": "{} letöltése",
"downloadX": "{} letöltése",
"downloadedX": "{} letöltve",
"releaseAsset": "Kiadási csomag",
"downloadNotifDescription": "Értesíti a felhasználót az alkalmazás letöltésének előrehaladásáról",
"noAPKFound": "Nem található APK",
"noVersionDetection": "Nincs verzió érzékelés",
"categorize": "Kategorizálás",
@@ -201,8 +201,8 @@
"noCategory": "Nincs kategória",
"noCategories": "Nincsenek kategóriák",
"deleteCategoriesQuestion": "Törli a kategóriákat?",
"categoryDeleteWarning": "A(z) {} összes app kategorizálatlan állapotba kerül.",
"addCategory": "Új kategória",
"categoryDeleteWarning": "A törölt kategóriákban lévő összes alkalmazás kategorizálatlanná válik.",
"addCategory": "Kategória hozzáadása",
"label": "Címke",
"language": "Nyelv",
"copiedToClipboard": "Másolva a vágólapra",
@@ -210,133 +210,134 @@
"selectedCategorizeWarning": "Ez felváltja a kiválasztott alkalmazások meglévő kategória-beállításait.",
"filterAPKsByRegEx": "Az APK-k szűrése reguláris kifejezéssel",
"removeFromObtainium": "Eltávolítás az Obtainiumból",
"uninstallFromDevice": "Eltávolítás a készülékről",
"uninstallFromDevice": "Eltávolítás az eszközről",
"onlyWorksWithNonVersionDetectApps": "Csak azoknál az alkalmazásoknál működik, amelyeknél a verzióérzékelés le van tiltva.",
"releaseDateAsVersion": "Használja a Kiadás dátumát, mint verziót",
"releaseDateAsVersionExplanation": "Ezt a beállítást csak olyan alkalmazásoknál szabad használni, ahol a verzió érzékelése nem működik megfelelően, de elérhető a kiadás dátuma.",
"changes": "Változtatások",
"releaseDateAsVersion": "Használja a kiadás dátumát, mint verziót",
"releaseDateAsVersionExplanation": "Ezt a beállítást csak olyan alkalmazásoknál szabad használni, ahol a verzióérzékelés nem működik megfelelően, de elérhető a kiadás dátuma.",
"changes": "Változások",
"releaseDate": "Kiadás dátuma",
"importFromURLsInFile": "Importálás fájlban található URL-ből (mint pl. OPML)",
"versionDetectionExplanation": "A verzió karakterlánc egyeztetése az OS által észlelt verzióval",
"versionDetection": "Verzió érzékelés",
"standardVersionDetection": "Alapért. verzió érzékelés",
"groupByCategory": "Csoportosítás Kategória alapján",
"importFromURLsInFile": "Importálás fájlban található webcímből (pl. OPML)",
"versionDetectionExplanation": "A verzió-karakterlánc egyeztetése az OS által észlelt verzióval",
"versionDetection": "Verzióérzékelés",
"standardVersionDetection": "Alapértelmezett verzióérzékelés",
"groupByCategory": "Csoportosítás kategória alapján",
"autoApkFilterByArch": "Ha lehetséges, próbálja CPU architektúra szerint szűrni az APK-kat",
"overrideSource": "Forrás felülbírása",
"dontShowAgain": "Ne mutassa ezt újra",
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített appokat az App nézet aljára",
"overrideSource": "Forrás felülírása",
"dontShowAgain": "Ne jelenítse meg ezt többé",
"dontShowTrackOnlyWarnings": "Ne jelenítse meg a „Csak nyomonkövetés figyelmeztetést",
"dontShowAPKOriginWarnings": "Ne jelenítse meg az APK eredetére vonatkozó figyelmeztetéseket",
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített alkalmazásokat az alkalmazás-nézet aljára",
"gitlabPATLabel": "GitLab személyes hozzáférési token",
"about": "Rólunk",
"requiresCredentialsInSettings": "{}: Ehhez további hitelesítő adatokra van szükség (a Beállításokban)",
"checkOnStart": "Egyszer az alkalmazás indításakor is",
"tryInferAppIdFromCode": "Próbálja kikövetkeztetni az app azonosítót a forráskódból",
"removeOnExternalUninstall": "A külsőleg eltávolított appok auto. eltávolítása",
"pickHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
"checkUpdateOnDetailPage": "Frissítések keresése az app részleteit tartalmazó oldal megnyitásakor",
"about": "Névjegy",
"requiresCredentialsInSettings": "A(z) {} alkalmazásnak további hitelesítő adatokra van szüksége (a beállításokban)",
"checkOnStart": "Frissítések keresése indításkor",
"tryInferAppIdFromCode": "Próbálja meg kikövetkeztetni az alkalmazás azonosítót a forráskódból",
"removeOnExternalUninstall": "A külsőleg eltávolított alkalmazások automatikus eltávolítása",
"pickHighestVersionCode": "A legmagasabb verziószámú APK automatikus kiválasztása",
"checkUpdateOnDetailPage": "Frissítések keresése az alkalmazás részleteit tartalmazó oldal megnyitásakor",
"disablePageTransitions": "Lap áttűnési animációk letiltása",
"reversePageTransitions": "Fordított lap áttűnési animációk",
"minStarCount": "Minimális csillag szám",
"addInfoBelow": "Adja hozzá ezt az infót alább.",
"addInfoInSettings": "Adja hozzá ezt az infót a Beállításokban.",
"githubSourceNote": "A GitHub sebességkorlátozás elkerülhető API-kulcs használatával.",
"sortByLastLinkSegment": "Rendezés csak a link utolsó szegmense szerint",
"minStarCount": "Minimális csillagozási szám",
"addInfoBelow": "Adja hozzá ezt az információt alább.",
"addInfoInSettings": "Adja hozzá ezt az információt a beállításokban.",
"githubSourceNote": "A GitHub/GitLab lekérdezés-korlátozás elkerülhető egy API-kulcs használatával.",
"sortByLastLinkSegment": "Rendezés csak a hivatkozás utolsó szegmense szerint",
"filterReleaseNotesByRegEx": "Kiadási megjegyzések szűrése reguláris kifejezéssel",
"customLinkFilterRegex": "Egyéni APK hivatkozásszűrő reguláris kifejezéssel (Alapérték '.apk$')",
"appsPossiblyUpdated": "App frissítési kísérlet",
"customLinkFilterRegex": "Egyéni APK hivatkozásszűrő reguláris kifejezéssel (Alapértelmezett „.apk$)",
"appsPossiblyUpdated": "Megkísérelt alkalmazás-frissítések",
"appsPossiblyUpdatedNotifDescription": "Értesíti a felhasználót, hogy egy vagy több alkalmazás frissítése lehetséges a háttérben",
"xWasPossiblyUpdatedToY": "{} frissítve lehet erre {}.",
"enableBackgroundUpdates": "Frissítések a háttérben",
"backgroundUpdateReqsExplanation": "Előfordulhat, hogy nem minden appnál lehetséges a háttérbeli frissítés.",
"xWasPossiblyUpdatedToY": "A(z) {} frissülhetett a következőre: {}.",
"enableBackgroundUpdates": "Háttérfrissítések engedélyezése",
"backgroundUpdateReqsExplanation": "Előfordulhat, hogy nem minden alkalmazásnál lehetséges a háttérbeli frissítés.",
"backgroundUpdateLimitsExplanation": "A háttérben történő telepítés sikeressége csak az Obtainium megnyitásakor állapítható meg.",
"verifyLatestTag": "Ellenőrizze a „legújabb” címkét",
"intermediateLinkRegex": "Szűrés egy 'köztes' látogatási linkre",
"filterByLinkText": "A hivatkozások szűrése linkszöveg alapján",
"intermediateLinkNotFound": "Köztes link nem található",
"intermediateLink": "Köztes link",
"intermediateLinkRegex": "Szűrés egy köztes” hivatkozás megnyitásához",
"filterByLinkText": "Hivatkozások szűrése egy hivatkozásszöveg alapján",
"intermediateLinkNotFound": "Köztes hivatkozás nem található",
"intermediateLink": "Köztes hivatkozás",
"exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)",
"bgUpdatesOnWiFiOnly": "Tiltsa le a háttérben frissítéseket, ha nincs Wi-Fi-n",
"autoSelectHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
"versionExtractionRegEx": "Verzió kibontása reguláris kifejezéssel",
"trimVersionString": "Trim Version String RegEx-szel",
"matchGroupToUseForX": "A \"{}\" csoporthoz használandó csoport egyeztetése",
"matchGroupToUse": "Párosítsa a csoportot a használathoz",
"highlightTouchTargets": "Emelje ki a kevésbé nyilvánvaló érintési célokat",
"pickExportDir": "Válassza az Exportálási könyvtárat",
"autoExportOnChanges": "Auto-exportálás a változások után",
"bgUpdatesOnWiFiOnly": "A háttérben futó frissítések letiltása, ha nincs Wi-Fi",
"autoSelectHighestVersionCode": "A legmagasabb verziószámú APK automatikus kiválasztása",
"versionExtractionRegEx": "Verziókarakterlánc-kivonatolása reguláris kifejezéssel",
"trimVersionString": "Verziókarakterlánc levágása reguláris kifejezéssel",
"matchGroupToUseForX": "A(z) „{}” esetén használandó csoport egyeztetése",
"matchGroupToUse": "Verziókarakterlánc-kivonatoláshoz használandó csoport reguláris kifejezéssel való egyeztetése",
"highlightTouchTargets": "A kevésbé nyilvánvaló érintési pontok kiemelése",
"pickExportDir": "Válassza ki a könyvtárat, ahová exportálni szeretne",
"autoExportOnChanges": "Automatikus exportálás a változások után",
"includeSettings": "Tartalmazza a beállításokat",
"filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel",
"trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t",
"dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése",
"reverseSort": "Fordított rendezés",
"takeFirstLink": "Vegye az első linket",
"skipSort": "A válogatás kihagyása",
"reverseSort": "Fordított elrendezés",
"takeFirstLink": "Vegye az első hivatkozást",
"skipSort": "Rendezés kihagyása",
"debugMenu": "Hibakereső menü",
"bgTaskStarted": "A háttérfeladat elindult ellenőrizze a naplókat.",
"runBgCheckNow": "Futtassa a Háttérben frissítés ellenőrzését most",
"versionExtractWholePage": "Alkalmazza a Version Extraction Regex-et az egész oldalra",
"runBgCheckNow": "Frissítések keresése a háttérben",
"versionExtractWholePage": "„Verziókarakterlánc-kivonatolása reguláris kifejezéssel” alkalmazása az egész oldalra",
"installing": "Telepítés",
"skipUpdateNotifications": "A frissítési értesítések kihagyása",
"updatesAvailableNotifChannel": "Frissítések érhetők el",
"updatesAvailableNotifChannel": "Frissítések érhetőek el",
"appsUpdatedNotifChannel": "Alkalmazások frissítve",
"appsPossiblyUpdatedNotifChannel": "App frissítési kísérlet",
"appsPossiblyUpdatedNotifChannel": "Megkísérelt alkalmazás-frissítések",
"errorCheckingUpdatesNotifChannel": "Hiba a frissítések keresésekor",
"appsRemovedNotifChannel": "Alkalmazások eltávolítva",
"downloadingXNotifChannel": "{} letöltés",
"completeAppInstallationNotifChannel": "Teljes app telepítés",
"appsRemovedNotifChannel": "Eltávolított alkalmazások",
"downloadingXNotifChannel": "A(z) {} letöltése",
"completeAppInstallationNotifChannel": "Teljes alkalmazás telepítés",
"checkingForUpdatesNotifChannel": "Frissítések keresése",
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak követhető appokat ellenőrizze frissítésekért",
"supportFixedAPKURL": "Támogatja a rögzített APK URL-eket",
"selectX": "Kiválaszt {}",
"parallelDownloads": "Párhuzamos letöltéseket enged",
"useShizuku": "Használja Shizuku vagy Sui telepítéséhez",
"shizukuBinderNotFound": "A Shizuku nem fut",
"shizukuOld": "Régi Shizuku verzió (<11) - frissítsd!",
"shizukuOldAndroidWithADB": "Shizuku fut Android < 8.1 ADB-vel - frissítse az Androidot vagy használja a Sui-t helyette",
"shizukuPretendToBeGooglePlay": "Állítsa be a Google Play-t telepítési forrásként (ha Shizuku-t használ)",
"useSystemFont": "Használja a rendszer betűtípusát",
"useVersionCodeAsOSVersion": "Az app verziókód használata a rendszer által észlelt verzióként",
"requestHeader": "Kérelem fejléc",
"useLatestAssetDateAsReleaseDate": "Használja a legújabb tartalomfeltöltést megjelenési dátumként",
"defaultPseudoVersioningMethod": "Alapértelmezett álverziós módszer",
"partialAPKHash": "Részleges APK Hash",
"APKLinkHash": "APK Link Hash",
"directAPKLink": "Közvetlen APK Link",
"pseudoVersionInUse": "Egy álverzió van használatban",
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak nyomonkövethető alkalmazások frissítéseinek ellenőrzése",
"supportFixedAPKURL": "Támogatja a rögzített APK webcímeket",
"selectX": "{} kiválasztása",
"parallelDownloads": "Párhuzamos letöltések engedélyezése",
"useShizuku": "Shizuku vagy Sui használata a telepítéshez",
"shizukuBinderNotFound": "A Shizuku szolgáltatás nem fut",
"shizukuOld": "Régi Shizuku verzió (<11) - frissítse",
"shizukuOldAndroidWithADB": "A Shizuku csak Android < 8.1 ADB-vel fut - frissítse az Androidot vagy használja a Sui-t helyette",
"shizukuPretendToBeGooglePlay": "Állítsa be a Google Playt telepítési forrásként (ha Shizukut használ)",
"useSystemFont": "A rendszer betűtípusának használata",
"useVersionCodeAsOSVersion": "Az alkalmazás verziókódjának használata a rendszer által észlelt verzióként",
"requestHeader": "Kérelemfejléc",
"useLatestAssetDateAsReleaseDate": "A kiadás dátumaként használja a legutóbbi csomagfeltöltést",
"defaultPseudoVersioningMethod": "Alapértelmezett pszeudo-verziós módszer",
"partialAPKHash": "Részleges APK hasító értéke",
"APKLinkHash": "APK hivatkozás hasító értéke",
"directAPKLink": "Közvetlen APK hivatkozás",
"pseudoVersionInUse": "Egy pszeudo-verzió van használatban",
"installed": "Telepített",
"latest": "Legújabb",
"invertRegEx": "Invertált reguláris kifejezés",
"note": "Megjegyzés:",
"selfHostedNote": "A \"{}\" legördülő menü használható bármely forrás saját üzemeltetésű/egyéni példányainak eléréséhez.",
"invertRegEx": "Reguláris kifejezés invertálása",
"note": "Megjegyzés",
"selfHostedNote": "A(z) \{}\ legördülő menü segítségével elérhetővé válnak a bármilyen más forrásból származó saját üzemeltetésű- vagy egyéni példányok.",
"badDownload": "Az APK-t nem lehetett elemezni (inkompatibilis vagy részleges letöltés)",
"beforeNewInstallsShareToAppVerifier": "Új alkalmazások megosztása az AppVerifierrel (ha elérhető)",
"appVerifierInstructionToast": "Ossza meg az AppVerifierrel, majd térjen vissza ide, ha kész.",
"wiki": "Súgó/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (használat saját felelősségre)",
"crowdsourcedConfigsLabel": "Crowdsource-ből származó alkalmazások beállítása (saját felelősségére használja)",
"allowInsecure": "Bizonytalan HTTP-kérések engedélyezése",
"removeAppQuestion": {
"one": "Eltávolítja az alkalmazást?",
"other": "Eltávolítja az alkalmazásokat?"
},
"tooManyRequestsTryAgainInMinutes": {
"one": "Túl sok kérés (korlátozott arány) próbálja újra {} perc múlva",
"other": "Túl sok kérés (korlátozott arány) próbálja újra {} perc múlva"
"one": "Túl sok kérés (lekérdezés-korlátozás) próbálja újra {} perc múlva,\nvagy adjon meg egy GitHub/GitLab API-kulcsot",
"other": "Túl sok kérés (lekérdezés-korlátozás) próbálja újra {} perc múlva,\nvagy adjon meg egy GitHub/GitLab API-kulcsot"
},
"bgUpdateGotErrorRetryInMinutes": {
"one": "A háttérfrissítések ellenőrzése {}-t észlelt, {} perc múlva ütemezi az újrapróbálkozást",
"other": "A háttérfrissítések ellenőrzése {}-t észlelt, {} perc múlva ütemezi az újrapróbálkozást"
"one": "Frissítések ellenőrzése a háttérben a következőt észlelte: {} - Újrapróbálkozás: {} perc múlva",
"other": "Frissítések ellenőrzése a háttérben a következőt észlelte: {} - Újrapróbálkozás: {} perc múlva"
},
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
"one": "A háttérfrissítés ellenőrzése {} frissítést talált szükség esetén értesíti a felhasználót",
"other": "A háttérfrissítés ellenőrzése {} frissítést talált szükség esetén értesíti a felhasználót"
"one": "Frissítések ellenőrzése a háttérben {} frissítést talált - szükség esetén értesíti a felhasználót",
"other": "Frissítések ellenőrzése a háttérben {} frissítést talált - szükség esetén értesíti a felhasználót"
},
"apps": {
"one": "{} app",
"other": "{} app"
"one": "{} alkalmazás",
"other": "{} alkalmazás"
},
"url": {
"one": "{} URL",
"other": "{} URL"
"one": "{} webcím",
"other": "{} webcím"
},
"minute": {
"one": "{} perc",
@@ -351,27 +352,27 @@
"other": "{} nap"
},
"clearedNLogsBeforeXAfterY": {
"one": "{n} napló törölve (előtte = {előtte}, utána = {utána})",
"other": "{n} napló törölve (előtte = {előtte}, utána = {utána})"
"one": "{n} napló törölve lett ({after} után és {before} előtt)",
"other": "{n} napló törölve lett ({after} után és {before} előtt)"
},
"xAndNMoreUpdatesAvailable": {
"one": "A(z) {} és 1 további alkalmazás frissítéseket kapott.",
"other": "{} és {} további alkalmazás frissítéseket kapott."
"one": "A(z) {} és 1 további alkalmazás frissítést kapott.",
"other": "A(z) {} és {} további alkalmazás frissítést kapott."
},
"xAndNMoreUpdatesInstalled": {
"one": "A(z) {} és 1 további alkalmazás frissítve.",
"other": "{} és {} további alkalmazás frissítve."
"other": "A(z) {} és {} további alkalmazás frissítve."
},
"xAndNMoreUpdatesFailed": {
"one": "Nem sikerült frissíteni {} és még 1 alkalmazást.",
"other": "Nem sikerült frissíteni {} és {} további alkalmazásokat."
"one": "Nem sikerült frissíteni a következőt: {}, valamint 1 további alkalmazást.",
"other": "Nem sikerült frissíteni a következőt: {}, valamint {} további alkalmazást."
},
"xAndNMoreUpdatesPossiblyInstalled": {
"one": "{} és 1 további alkalmazás is frissült.",
"other": "{} és {} további alkalmazás is frissült."
"one": "A(z) {}, valamint 1 további alkalmazás sikeresen frissítve.",
"other": "A(z) {}, valamint {} további alkalmazás sikeresen frissítve."
},
"apk": {
"one": "{} APK",
"other": "{} APK-k"
"other": "{} APK"
}
}

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Condividete con AppVerifier, quindi tornate qui quando siete pronti.",
"wiki": "Aiuto/Wiki",
"crowdsourcedConfigsLabel": "Configurazioni di app in crowdsourcing (uso a proprio rischio)",
"allowInsecure": "Consentire le richieste HTTP non sicure",
"removeAppQuestion": {
"one": "Rimuovere l'app?",
"other": "Rimuovere le app?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "AppVerifierに共有し、準備ができたらここに戻ってください。",
"wiki": "ヘルプ/ウィキ",
"crowdsourcedConfigsLabel": "クラウドソーシングによるアプリの設定(利用は自己責任で)",
"allowInsecure": "安全でないHTTPリクエストを許可する",
"removeAppQuestion": {
"one": "アプリを削除しますか?",
"other": "アプリを削除しますか?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Deel het met AppVerifier en keer daarna hier terug.",
"wiki": "Help/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App-configuraties (gebruik op eigen risico)",
"allowInsecure": "Onveilige HTTP-verzoeken toestaan",
"removeAppQuestion": {
"one": "App verwijderen?",
"other": "Apps verwijderen?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Udostępnij w AppVerifier, a następnie wróć tutaj, gdy będziesz gotowy.",
"wiki": "Pomoc/Wiki",
"crowdsourcedConfigsLabel": "Konfiguracje aplikacji pochodzące z crowdsourcingu (korzystanie na własne ryzyko)",
"allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
"removeAppQuestion": {
"one": "Usunąć aplikację?",
"few": "Usunąć aplikacje?",

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Partilhe com o AppVerifier e, em seguida, regresse aqui quando estiver pronto.",
"wiki": "Ajuda/Wiki",
"crowdsourcedConfigsLabel": "Configurações de aplicações de crowdsourcing (utilização por sua conta e risco)",
"allowInsecure": "Permitir pedidos HTTP inseguros",
"removeAppQuestion": {
"one": "Remover aplicativo?",
"other": "Remover aplicativos?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Поделитесь с AppVerifier, а затем вернитесь сюда, когда будете готовы.",
"wiki": "Помощь/Вики",
"crowdsourcedConfigsLabel": "Конфигурации приложений на основе краудсорсинга (используйте на свой страх и риск)",
"allowInsecure": "Разрешить небезопасные HTTP-запросы",
"removeAppQuestion": {
"one": "Удалить приложение?",
"other": "Удалить приложения?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Dela till AppVerifier och återvänd sedan hit när du är klar.",
"wiki": "Hjälp/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourcade appkonfigurationer (använd på egen risk)",
"allowInsecure": "Tillåt osäkra HTTP-förfrågningar",
"removeAppQuestion": {
"one": "Ta Bort App?",
"other": "Ta Bort Appar?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "AppVerifier ile paylaşın, hazır olduğunuzda buraya dönün.",
"wiki": "Yardım/Wiki",
"crowdsourcedConfigsLabel": "Kitle Kaynaklı Uygulama Yapılandırmaları (riski size ait olmak üzere kullanın)",
"allowInsecure": "Güvensiz HTTP isteklerine izin ver",
"removeAppQuestion": {
"one": "Uygulamayı Kaldır?",
"other": "Uygulamaları Kaldır?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Надішліть на AppVerifier, а потім поверніться сюди, коли будете готові.",
"wiki": "Довідка/Вікі",
"crowdsourcedConfigsLabel": "Краудсорсингові конфігурації додатків (використовуйте на свій страх і ризик)",
"allowInsecure": "Дозволити незахищені HTTP-запити",
"removeAppQuestion": {
"one": "Видалити застосунок?",
"other": "Видалити застосунки?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "Chia sẻ lên AppVerifier, sau đó quay lại đây khi sẵn sàng.",
"wiki": "Trợ giúp/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "Gỡ ứng dụng?",
"other": "Gỡ ứng dụng?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "分享至 AppVerifier然後準備好時回到此處。",
"wiki": "幫助/維基",
"crowdsourcedConfigsLabel": "群眾外包的應用程式設定(使用風險自負)",
"allowInsecure": "Allow insecure HTTP requests",
"removeAppQuestion": {
"one": "移除應用程式?",
"other": "移除應用程式?"

View File

@@ -314,6 +314,7 @@
"appVerifierInstructionToast": "分享至 AppVerifier完成后返回此处。",
"wiki": "帮助/Wiki",
"crowdsourcedConfigsLabel": "众包应用程序配置(使用风险自负)",
"allowInsecure": "允许不安全的 HTTP 请求",
"removeAppQuestion": {
"one": "是否删除应用?",
"other": "是否删除应用?"

View File

@@ -10,7 +10,7 @@ class APKCombo extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+[^/]+',
caseSensitive: false);

View File

@@ -32,7 +32,7 @@ class APKMirror extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/apk/[^/]+/[^/]+',
caseSensitive: false);

View File

@@ -29,7 +29,7 @@ class APKPure extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegExB = RegExp(
'^https?://m.${getSourceRegex(hosts)}(/+[^/]{2})?/+[^/]+/+[^/]+',
caseSensitive: false);
@@ -109,11 +109,16 @@ class APKPure extends AppSource {
'')
?.group(0)
?.trim();
String? type = apkInfo
?.querySelector('div.info-top span.tag')
?.text
.trim() ??
'APK';
var types = apkInfo
?.querySelectorAll('div.info-top span.tag')
.map((e) => e.text.trim())
.map((t) => t == 'APKs' ? 'APK' : t) ??
[];
String type = types.isEmpty
? 'APK'
: types.length == 1
? types.first
: types.last;
String? dateString = apkInfo
?.querySelector('div.info-bottom span.time')
?.text

View File

@@ -14,7 +14,7 @@ class Aptoide extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
caseSensitive: false);

View File

@@ -16,7 +16,7 @@ class Codeberg extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
caseSensitive: false);

View File

@@ -1,12 +1,12 @@
import 'package:easy_localization/easy_localization.dart';
import 'package:obtainium/app_sources/html.dart';
import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart';
class DirectAPKLink extends AppSource {
HTML html = HTML();
DirectAPKLink() {
neverAutoSelect = true;
name = tr('directAPKLink');
additionalSourceAppSpecificSettingFormItems = html
.additionalSourceAppSpecificSettingFormItems
@@ -24,6 +24,19 @@ class DirectAPKLink extends AppSource {
];
}
@override
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
if (!forSelection) {
return url;
}
RegExp standardUrlRegExA = RegExp('.+\\.apk\$', caseSensitive: false);
var match = standardUrlRegExA.firstMatch(url);
if (match == null) {
throw InvalidURLError(name);
}
return match.group(0)!;
}
@override
Future<Map<String, String>?> getRequestHeaders(
Map<String, dynamic> additionalSettings,

View File

@@ -38,7 +38,7 @@ class FDroid extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegExB = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+packages/+[^/]+',
caseSensitive: false);

View File

@@ -43,7 +43,7 @@ class FDroidRepo extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
var standardUri = Uri.parse(url);
var pathSegments = standardUri.pathSegments;
if (pathSegments.isNotEmpty && pathSegments.last == 'index.xml') {

View File

@@ -154,7 +154,7 @@ class GitHub extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
caseSensitive: false);

View File

@@ -52,7 +52,7 @@ class GitLab extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
caseSensitive: false);

View File

@@ -288,7 +288,7 @@ class HTML extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return url;
}
@@ -350,7 +350,8 @@ class HTML extends AppSource {
? rel.hashCode.toString()
: (await checkPartialDownloadHashDynamic(rel,
headers: await getRequestHeaders(additionalSettings,
forAPKDownload: true)))
forAPKDownload: true),
allowInsecure: additionalSettings['allowInsecure'] == true))
.toString();
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
AppNames(uri.host, tr('app')));

View File

@@ -12,7 +12,7 @@ class HuaweiAppGallery extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}(/#)?/(app|appdl)/[^/]+',
caseSensitive: false);

View File

@@ -14,7 +14,7 @@ class IzzyOnDroid extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegExA = RegExp(
'^https?://android.${getSourceRegex(hosts)}/repo/apk/[^/]+',
caseSensitive: false);

View File

@@ -10,7 +10,7 @@ class Mullvad extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}',
caseSensitive: false);

View File

@@ -10,7 +10,7 @@ class NeutronCode extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/downloads/file/[^/]+',
caseSensitive: false);

View File

@@ -9,7 +9,7 @@ class Signal extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return 'https://${hosts[0]}';
}

View File

@@ -9,7 +9,7 @@ class SourceForge extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
var sourceRegex = getSourceRegex(hosts);
RegExp standardUrlRegExC =
RegExp('^https?://(www\\.)?$sourceRegex/p/.+', caseSensitive: false);

View File

@@ -20,7 +20,7 @@ class SourceHut extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
caseSensitive: false);

View File

@@ -20,7 +20,7 @@ class SteamMobile extends AppSource {
final apks = {'steam': tr('steamMobile'), 'steam-chat-app': tr('steamChat')};
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return 'https://${hosts[0]}';
}

View File

@@ -11,7 +11,7 @@ class TelegramApp extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return 'https://${hosts[0]}';
}

View File

@@ -0,0 +1,78 @@
import 'dart:convert';
import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart';
class Tencent extends AppSource {
Tencent() {
name = 'Tencent App Store';
hosts = ['sj.qq.com'];
naiveStandardVersionDetection = true;
showReleaseDateAsVersionToggle = true;
}
@override
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://${getSourceRegex(hosts)}/appdetail/[^/]+',
caseSensitive: false);
var match = standardUrlRegEx.firstMatch(url);
if (match == null) {
throw InvalidURLError(name);
}
return match.group(0)!;
}
@override
Future<String?> tryInferringAppId(String standardUrl,
{Map<String, dynamic> additionalSettings = const {}}) async {
return Uri.parse(standardUrl).pathSegments.last;
}
@override
Future<APKDetails> getLatestAPKDetails(
String standardUrl,
Map<String, dynamic> additionalSettings,
) async {
String appId = (await tryInferringAppId(standardUrl))!;
String baseHost = Uri.parse(standardUrl)
.host
.split('.')
.reversed
.toList()
.sublist(0, 2)
.reversed
.join('.');
var res = await sourceRequest(
'https://upage.html5.$baseHost/wechat-apkinfo', additionalSettings,
followRedirects: false, postBody: {"packagename": appId});
if (res.statusCode == 200) {
var json = jsonDecode(res.body);
if (json['app_detail_records'][appId] == null) {
throw NoReleasesError();
}
var version =
json['app_detail_records'][appId]['apk_all_data']['version_name'];
var apkUrl = json['app_detail_records'][appId]['apk_all_data']['url'];
if (apkUrl == null) {
throw NoAPKError();
}
var appName = json['app_detail_records'][appId]['app_info']['name'];
var author = json['app_detail_records'][appId]['app_info']['author'];
var releaseDate =
json['app_detail_records'][appId]['app_info']['update_time'];
return APKDetails(
version,
[MapEntry(Uri.parse(apkUrl).queryParameters['fsname']!, apkUrl)],
AppNames(author, appName),
releaseDate: releaseDate != null
? DateTime.fromMillisecondsSinceEpoch(releaseDate * 1000)
: null);
} else {
throw getObtainiumHttpError(res);
}
}
}

View File

@@ -14,7 +14,7 @@ class Uptodown extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
caseSensitive: false);

View File

@@ -21,7 +21,7 @@ class VLC extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return 'https://${hosts[0]}';
}

View File

@@ -10,7 +10,7 @@ class WhatsApp extends AppSource {
}
@override
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
return 'https://${hosts[0]}';
}

View File

@@ -23,6 +23,7 @@ import 'package:easy_localization/src/localization.dart';
List<MapEntry<Locale, String>> supportedLocales = const [
MapEntry(Locale('en'), 'English'),
MapEntry(Locale('zh'), '简体中文'),
MapEntry(Locale('zh_Hant_TW'), '臺灣話'),
MapEntry(Locale('it'), 'Italiano'),
MapEntry(Locale('ja'), '日本語'),
MapEntry(Locale('hu'), 'Magyar'),
@@ -41,6 +42,8 @@ List<MapEntry<Locale, String>> supportedLocales = const [
MapEntry(Locale('tr'), 'Türkçe'),
MapEntry(Locale('uk'), 'Українська'),
MapEntry(Locale('da'), 'Dansk'),
MapEntry(Locale('en', 'EO'),
'Esperanto'), // https://github.com/aissat/easy_localization/issues/220#issuecomment-846035493
];
const fallbackLocale = Locale('en');
const localeDir = 'assets/translations';
@@ -245,15 +248,17 @@ class _ObtainiumState extends State<Obtainium> {
colorScheme: settingsProvider.theme == ThemeSettings.dark
? darkColorScheme
: lightColorScheme,
fontFamily:
settingsProvider.useSystemFont ? 'SystemFont' : 'Wix-Madefor-Display'),
fontFamily: settingsProvider.useSystemFont
? 'SystemFont'
: 'Wix-Madefor-Display'),
darkTheme: ThemeData(
useMaterial3: true,
colorScheme: settingsProvider.theme == ThemeSettings.light
? lightColorScheme
: darkColorScheme,
fontFamily:
settingsProvider.useSystemFont ? 'SystemFont' : 'Wix-Madefor-Display'),
fontFamily: settingsProvider.useSystemFont
? 'SystemFont'
: 'Wix-Madefor-Display'),
home: Shortcuts(shortcuts: <LogicalKeySet, Intent>{
LogicalKeySet(LogicalKeyboardKey.select): const ActivateIntent(),
}, child: const HomePage()));

View File

@@ -248,7 +248,8 @@ class _AppPageState extends State<AppPage> {
children: [
const SizedBox(height: 20),
FutureBuilder(
future: appsProvider.updateAppIcon(app?.app.id),
future:
appsProvider.updateAppIcon(app?.app.id, ignoreCache: true),
builder: (ctx, val) {
return app?.icon != null
? Row(

View File

@@ -416,6 +416,8 @@ class AppsPageState extends State<AppsPage> {
? Image.memory(
listedApps[appIndex].icon!,
gaplessPlayback: true,
opacity: AlwaysStoppedAnimation(
listedApps[appIndex].installedInfo == null ? 0.6 : 1),
)
: Row(
mainAxisSize: MainAxisSize.min,

View File

@@ -17,6 +17,7 @@ import 'package:device_info_plus/device_info_plus.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/io_client.dart';
import 'package:obtainium/components/generated_form.dart';
import 'package:obtainium/components/generated_form_modal.dart';
import 'package:obtainium/custom_errors.dart';
@@ -146,17 +147,23 @@ Future<File> downloadFileWithRetry(String url, String fileName,
bool fileNameHasExt, Function? onProgress, String destDir,
{bool useExisting = true,
Map<String, String>? headers,
int retries = 3}) async {
int retries = 3,
bool allowInsecure = false}) async {
try {
return await downloadFile(
url, fileName, fileNameHasExt, onProgress, destDir,
useExisting: useExisting, headers: headers);
useExisting: useExisting,
headers: headers,
allowInsecure: allowInsecure);
} catch (e) {
if (retries > 0 && e is ClientException) {
await Future.delayed(const Duration(seconds: 5));
return await downloadFileWithRetry(
url, fileName, fileNameHasExt, onProgress, destDir,
useExisting: useExisting, headers: headers, retries: (retries - 1));
useExisting: useExisting,
headers: headers,
retries: (retries - 1),
allowInsecure: allowInsecure);
} else {
rethrow;
}
@@ -173,11 +180,14 @@ String hashListOfLists(List<List<int>> data) {
Future<String> checkPartialDownloadHashDynamic(String url,
{int startingSize = 1024,
int lowerLimit = 128,
Map<String, String>? headers}) async {
Map<String, String>? headers,
bool allowInsecure = false}) async {
for (int i = startingSize; i >= lowerLimit; i -= 256) {
List<String> ab = await Future.wait([
checkPartialDownloadHash(url, i, headers: headers),
checkPartialDownloadHash(url, i, headers: headers)
checkPartialDownloadHash(url, i,
headers: headers, allowInsecure: allowInsecure),
checkPartialDownloadHash(url, i,
headers: headers, allowInsecure: allowInsecure)
]);
if (ab[0] == ab[1]) {
return ab[0];
@@ -187,13 +197,13 @@ Future<String> checkPartialDownloadHashDynamic(String url,
}
Future<String> checkPartialDownloadHash(String url, int bytesToGrab,
{Map<String, String>? headers}) async {
{Map<String, String>? headers, bool allowInsecure = false}) async {
var req = Request('GET', Uri.parse(url));
if (headers != null) {
req.headers.addAll(headers);
}
req.headers[HttpHeaders.rangeHeader] = 'bytes=0-$bytesToGrab';
var client = http.Client();
var client = IOClient(createHttpClient(allowInsecure));
var response = await client.send(req);
if (response.statusCode < 200 || response.statusCode > 299) {
throw ObtainiumError(response.reasonPhrase ?? tr('unexpectedError'));
@@ -204,12 +214,14 @@ Future<String> checkPartialDownloadHash(String url, int bytesToGrab,
Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
Function? onProgress, String destDir,
{bool useExisting = true, Map<String, String>? headers}) async {
{bool useExisting = true,
Map<String, String>? headers,
bool allowInsecure = false}) async {
// Send the initial request but cancel it as soon as you have the headers
var reqHeaders = headers ?? {};
var req = Request('GET', Uri.parse(url));
req.headers.addAll(reqHeaders);
var client = http.Client();
var client = IOClient(createHttpClient(allowInsecure));
StreamedResponse response = await client.send(req);
var resHeaders = response.headers;
@@ -275,7 +287,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
IOSink? sink;
if (rangeFeatureEnabled && fullContentLength != null && rangeStart > 0) {
client.close();
client = http.Client();
client = IOClient(createHttpClient(allowInsecure));
req = Request('GET', Uri.parse(url));
req.headers.addAll(reqHeaders);
req.headers.addAll({'range': 'bytes=$rangeStart-${fullContentLength - 1}'});
@@ -318,12 +330,12 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
}
Future<Map<String, String>> getHeaders(String url,
{Map<String, String>? headers}) async {
{Map<String, String>? headers, bool allowInsecure = false}) async {
var req = http.Request('GET', Uri.parse(url));
if (headers != null) {
req.headers.addAll(headers);
}
var client = http.Client();
var client = IOClient(createHttpClient(allowInsecure));
var response = await client.send(req);
if (response.statusCode < 200 || response.statusCode > 299) {
throw ObtainiumError(response.reasonPhrase ?? tr('unexpectedError'));
@@ -363,6 +375,7 @@ class AppsProvider with ChangeNotifier {
late Stream<FGBGType>? foregroundStream;
late StreamSubscription<FGBGType>? foregroundSubscription;
late Directory APKDir;
late Directory iconsCacheDir;
late SettingsProvider settingsProvider = SettingsProvider();
Iterable<AppInMemory> getAppValues() => apps.values.map((a) => a.deepCopy());
@@ -381,12 +394,21 @@ class AppsProvider with ChangeNotifier {
var cacheDirs = await getExternalCacheDirectories();
if (cacheDirs?.isNotEmpty ?? false) {
APKDir = cacheDirs!.first;
iconsCacheDir = Directory('${cacheDirs.first.path}/icons');
if (!iconsCacheDir.existsSync()) {
iconsCacheDir.createSync();
}
} else {
APKDir =
Directory('${(await getExternalStorageDirectory())!.path}/apks');
if (!APKDir.existsSync()) {
APKDir.createSync();
}
iconsCacheDir =
Directory('${(await getExternalStorageDirectory())!.path}/icons');
if (!iconsCacheDir.existsSync()) {
iconsCacheDir.createSync();
}
}
if (!isBg) {
// Load Apps into memory (in background processes, this is done later instead of in the constructor)
@@ -468,7 +490,9 @@ class AppsProvider with ChangeNotifier {
notificationsProvider?.notify(notif);
}
prevProg = prog;
}, APKDir.path, useExisting: useExisting);
}, APKDir.path,
useExisting: useExisting,
allowInsecure: app.additionalSettings['allowInsecure'] == true);
// Set to 90 for remaining steps, will make null in 'finally'
if (apps[app.id] != null) {
apps[app.id]!.downloadProgress = -1;
@@ -967,11 +991,16 @@ class AppsProvider with ChangeNotifier {
}
for (var res in downloadResults) {
if (!errors.appIdNames.containsKey(res['id'])) {
await installFn(
res['id'] as String,
res['willBeSilent'] as bool,
res['downloadedFile'] as DownloadedApk?,
res['downloadedDir'] as DownloadedXApkDir?);
try {
await installFn(
res['id'] as String,
res['willBeSilent'] as bool,
res['downloadedFile'] as DownloadedApk?,
res['downloadedDir'] as DownloadedXApkDir?);
} catch (e) {
var id = res['id'] as String;
errors.add(id, e, appName: apps[id]?.name);
}
}
}
@@ -1031,7 +1060,8 @@ class AppsProvider with ChangeNotifier {
.getRequestHeaders(app.additionalSettings,
forAPKDownload:
fileUrl.key.endsWith('.apk') ? true : false),
useExisting: false);
useExisting: false,
allowInsecure: app.additionalSettings['allowInsecure'] == true);
notificationsProvider
.notify(DownloadedNotification(fileUrl.key, fileUrl.value));
} catch (e) {
@@ -1277,10 +1307,16 @@ class AppsProvider with ChangeNotifier {
notifyListeners();
}
Future<void> updateAppIcon(String? appId) async {
Future<void> updateAppIcon(String? appId, {bool ignoreCache = false}) async {
if (apps[appId]?.icon == null) {
var icon =
(await apps[appId]?.installedInfo?.applicationInfo?.getAppIcon());
var cachedIcon = File('${iconsCacheDir.path}/$appId.png');
var alreadyCached = cachedIcon.existsSync() && !ignoreCache;
var icon = alreadyCached
? (await cachedIcon.readAsBytes())
: (await apps[appId]?.installedInfo?.applicationInfo?.getAppIcon());
if (icon != null && !alreadyCached) {
cachedIcon.writeAsBytes(icon.toList());
}
if (icon != null) {
apps.update(
apps[appId]!.app.id,
@@ -1578,12 +1614,13 @@ class AppsProvider with ChangeNotifier {
}
String? returnPath;
if (!pickOnly) {
var encoder = const JsonEncoder.withIndent(" ");
Map<String, dynamic> finalExport = generateExportJSON();
var result = await saf.createFile(exportDir,
displayName:
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
mimeType: 'application/json',
bytes: Uint8List.fromList(utf8.encode(jsonEncode(finalExport))));
bytes: Uint8List.fromList(utf8.encode(encoder.convert(finalExport))));
if (result == null) {
throw ObtainiumError(tr('unexpectedError'));
}

View File

@@ -2,11 +2,13 @@
// AppSource is an abstract class with a concrete implementation for each source
import 'dart:convert';
import 'dart:io';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:html/dom.dart';
import 'package:http/http.dart';
import 'package:http/io_client.dart';
import 'package:obtainium/app_sources/apkmirror.dart';
import 'package:obtainium/app_sources/apkpure.dart';
import 'package:obtainium/app_sources/aptoide.dart';
@@ -26,6 +28,7 @@ import 'package:obtainium/app_sources/sourceforge.dart';
import 'package:obtainium/app_sources/sourcehut.dart';
import 'package:obtainium/app_sources/steammobile.dart';
import 'package:obtainium/app_sources/telegramapp.dart';
import 'package:obtainium/app_sources/tencent.dart';
import 'package:obtainium/app_sources/uptodown.dart';
import 'package:obtainium/app_sources/vlc.dart';
import 'package:obtainium/app_sources/whatsapp.dart';
@@ -399,6 +402,15 @@ getSourceRegex(List<String> hosts) {
return '(${hosts.join('|').replaceAll('.', '\\.')})';
}
HttpClient createHttpClient(bool insecure) {
final client = HttpClient();
if (insecure) {
client.badCertificateCallback =
(X509Certificate cert, String host, int port) => true;
}
return client;
}
abstract class AppSource {
List<String> hosts = [];
bool hostChanged = false;
@@ -454,17 +466,25 @@ abstract class AppSource {
Future<Response> sourceRequest(
String url, Map<String, dynamic> additionalSettings,
{bool followRedirects = true}) async {
{bool followRedirects = true, Object? postBody}) async {
var requestHeaders = await getRequestHeaders(additionalSettings);
if (requestHeaders != null || followRedirects == false) {
var req = Request('GET', Uri.parse(url));
var req = Request(postBody == null ? 'GET' : 'POST', Uri.parse(url));
req.followRedirects = followRedirects;
if (requestHeaders != null) {
req.headers.addAll(requestHeaders);
}
return Response.fromStream(await Client().send(req));
if (postBody != null) {
req.headers[HttpHeaders.contentTypeHeader] = 'application/json';
req.body = jsonEncode(postBody);
}
return Response.fromStream(await IOClient(
createHttpClient(additionalSettings['allowInsecure'] == true))
.send(req));
} else {
return get(Uri.parse(url));
return postBody == null
? get(Uri.parse(url))
: post(Uri.parse(url), body: jsonEncode(postBody));
}
}
@@ -472,7 +492,7 @@ abstract class AppSource {
//
}
String sourceSpecificStandardizeURL(String url) {
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
throw NotImplementedError();
}
@@ -538,6 +558,10 @@ abstract class AppSource {
GeneratedFormSwitch('shizukuPretendToBeGooglePlay',
label: tr('shizukuPretendToBeGooglePlay'), defaultValue: false)
],
[
GeneratedFormSwitch('allowInsecure',
label: tr('allowInsecure'), defaultValue: false)
],
[
GeneratedFormSwitch('exemptFromBackgroundUpdates',
label: tr('exemptFromBackgroundUpdates'))
@@ -765,6 +789,7 @@ class SourceProvider {
Aptoide(),
Uptodown(),
HuaweiAppGallery(),
Tencent(),
Jenkins(),
APKMirror(),
Signal(),
@@ -809,7 +834,7 @@ class SourceProvider {
for (var s in sources.where(
(element) => element.hosts.isEmpty && !element.neverAutoSelect)) {
try {
s.sourceSpecificStandardizeURL(url);
s.sourceSpecificStandardizeURL(url, forSelection: true);
source = s;
break;
} catch (e) {

View File

@@ -47,10 +47,10 @@ packages:
dependency: "direct main"
description:
name: app_links
sha256: "4acba851087b25136e8f6e32a53bd4536eb3bec69947ddb66e7b9a5792ceb0c7"
sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99
url: "https://pub.dev"
source: hosted
version: "6.2.0"
version: "6.3.2"
app_links_linux:
dependency: transitive
description:
@@ -103,10 +103,10 @@ packages:
dependency: "direct main"
description:
name: background_fetch
sha256: b5c298c911bc2ce41152668bc72eb0488f0665d75bc6d1e69e7d8367763eddcd
sha256: e9f26ae54d88310b7ac2a68f2f9fcee0081a4d5f11100f233a70702021e7ac4f
url: "https://pub.dev"
source: hosted
version: "1.3.5"
version: "1.3.7"
boolean_selector:
dependency: transitive
description:
@@ -303,18 +303,18 @@ packages:
dependency: "direct main"
description:
name: flex_color_picker
sha256: "809af4ec82ede3b140ed0219b97d548de99e47aa4b99b14a10f705a2dbbcba5e"
sha256: "12dc855ae8ef5491f529b1fc52c655f06dcdf4114f1f7fdecafa41eec2ec8d79"
url: "https://pub.dev"
source: hosted
version: "3.5.1"
version: "3.6.0"
flex_seed_scheme:
dependency: transitive
description:
name: flex_seed_scheme
sha256: cc08c81879ecfd2ab840664ce4770980da0b8a319e35f51bcf763849b7f7596b
sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334"
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.4.1"
flutter:
dependency: "direct main"
description: flutter
@@ -388,26 +388,26 @@ packages:
dependency: "direct dev"
description:
name: flutter_launcher_icons
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
sha256: "619817c4b65b322b5104b6bb6dfe6cda62d9729bd7ad4303ecc8b4e690a67a77"
url: "https://pub.dev"
source: hosted
version: "0.13.1"
version: "0.14.1"
flutter_lints:
dependency: "direct dev"
description:
name: flutter_lints
sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "5.0.0"
flutter_local_notifications:
dependency: "direct main"
description:
name: flutter_local_notifications
sha256: c500d5d9e7e553f06b61877ca6b9c8b92c570a4c8db371038702e8ce57f8a50f
sha256: "49eeef364fddb71515bc78d5a8c51435a68bccd6e4d68e25a942c5e47761ae71"
url: "https://pub.dev"
source: hosted
version: "17.2.2"
version: "17.2.3"
flutter_local_notifications_linux:
dependency: transitive
description:
@@ -433,18 +433,18 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown
sha256: a23c41ee57573e62fc2190a1f36a0480c4d90bde3a8a8d7126e5d5992fb53fb7
sha256: e17575ca576a34b46c58c91f9948891117a1bd97815d2e661813c7f90c647a78
url: "https://pub.dev"
source: hosted
version: "0.7.3+1"
version: "0.7.3+2"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de"
sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
url: "https://pub.dev"
source: hosted
version: "2.0.21"
version: "2.0.22"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -571,10 +571,10 @@ packages:
dependency: transitive
description:
name: lints
sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413"
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "5.0.0"
markdown:
dependency: "direct main"
description:
@@ -611,10 +611,10 @@ packages:
dependency: transitive
description:
name: mime
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
url: "https://pub.dev"
source: hosted
version: "1.0.5"
version: "1.0.6"
nested:
dependency: transitive
description:
@@ -715,18 +715,18 @@ packages:
dependency: transitive
description:
name: permission_handler_html
sha256: d220eb8476b466d58b161e10b3001d93999010a26228a3fb89c4280db1249546
sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851
url: "https://pub.dev"
source: hosted
version: "0.1.3+1"
version: "0.1.3+2"
permission_handler_platform_interface:
dependency: transitive
description:
name: permission_handler_platform_interface
sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
url: "https://pub.dev"
source: hosted
version: "4.2.2"
version: "4.2.3"
permission_handler_windows:
dependency: transitive
description:
@@ -827,10 +827,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
url: "https://pub.dev"
source: hosted
version: "2.3.1"
version: "2.3.2"
shared_preferences_foundation:
dependency: transitive
description:
@@ -913,18 +913,18 @@ packages:
dependency: "direct main"
description:
name: sqflite
sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
sha256: ff5a2436ef8ebdfda748fbfe957f9981524cb5ff11e7bafa8c42771840e8a788
url: "https://pub.dev"
source: hosted
version: "2.3.3+1"
version: "2.3.3+2"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e"
sha256: "2d8e607db72e9cb7748c9c6e739e2c9618320a5517de693d5a24609c4671b1a4"
url: "https://pub.dev"
source: hosted
version: "2.5.4+2"
version: "2.5.4+4"
stack_trace:
dependency: transitive
description:
@@ -953,10 +953,10 @@ packages:
dependency: transitive
description:
name: synchronized
sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
url: "https://pub.dev"
source: hosted
version: "3.2.0"
version: "3.3.0+3"
term_glyph:
dependency: transitive
description:
@@ -1001,10 +1001,10 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab
url: "https://pub.dev"
source: hosted
version: "6.3.9"
version: "6.3.10"
url_launcher_ios:
dependency: transitive
description:
@@ -1025,10 +1025,10 @@ packages:
dependency: transitive
description:
name: url_launcher_macos
sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
url: "https://pub.dev"
source: hosted
version: "3.2.0"
version: "3.2.1"
url_launcher_platform_interface:
dependency: transitive
description:
@@ -1057,10 +1057,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
url: "https://pub.dev"
source: hosted
version: "4.4.2"
version: "4.5.1"
vector_math:
dependency: transitive
description:
@@ -1073,34 +1073,34 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
url: "https://pub.dev"
source: hosted
version: "14.2.4"
version: "14.2.5"
web:
dependency: transitive
description:
name: web
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.dev"
source: hosted
version: "1.0.0"
version: "1.1.0"
webview_flutter:
dependency: "direct main"
description:
name: webview_flutter
sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522"
sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736
url: "https://pub.dev"
source: hosted
version: "4.8.0"
version: "4.9.0"
webview_flutter_android:
dependency: transitive
description:
name: webview_flutter_android
sha256: c66651fba15f9d7ddd31daec42da8d6bce46c85610a7127e3ebcb39a4395c3c9
sha256: "6e64fcb1c19d92024da8f33503aaeeda35825d77142c01d0ea2aa32edc79fdc8"
url: "https://pub.dev"
source: hosted
version: "3.16.6"
version: "3.16.7"
webview_flutter_platform_interface:
dependency: transitive
description:
@@ -1129,10 +1129,10 @@ packages:
dependency: transitive
description:
name: win32_registry
sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
url: "https://pub.dev"
source: hosted
version: "1.1.4"
version: "1.1.5"
xdg_directories:
dependency: transitive
description:

View File

@@ -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
# 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.
version: 1.1.20+2277
version: 1.1.22+2279
environment:
sdk: '>=3.0.0 <4.0.0'
@@ -84,14 +84,14 @@ dependencies:
dev_dependencies:
flutter_test:
sdk: flutter
flutter_launcher_icons: ^0.13.1
flutter_launcher_icons: ^0.14.1
# The "flutter_lints" package below contains a set of recommended lints to
# encourage good coding practices. The lint set provided by the package is
# activated in the `analysis_options.yaml` file located at the root of your
# package. See that file for information about deactivating specific lint
# rules and activating additional ones.
flutter_lints: ^4.0.0
flutter_lints: ^5.0.0
flutter_launcher_icons:
android: "ic_launcher"