mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-20 13:19:28 +02:00
Compare commits
76 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
4017253470 | ||
|
b0b6ddb8fd | ||
|
192b7fc6ce | ||
|
b74dbb973c | ||
|
46ccf8478b | ||
|
9a354ecf0e | ||
|
738dd5649f | ||
|
9f50d8db2d | ||
|
eeb57dbe35 | ||
|
cbcc8c4eaf | ||
|
f4d27c8494 | ||
|
7507e7bf5c | ||
|
783e8029b6 | ||
|
3554257918 | ||
|
ef98ceaaa2 | ||
|
86540e703d | ||
|
1b7c340e2c | ||
|
ba6148dfef | ||
|
6b47048e43 | ||
|
b698947ecf | ||
|
e677d3179c | ||
|
25ef35c13c | ||
|
ba167fed33 | ||
|
d03c4dec4e | ||
|
e2525eef74 | ||
|
35caec61c5 | ||
|
33a7af216c | ||
|
b7c477fd40 | ||
|
045d8cfbe8 | ||
|
ea6e0b37a3 | ||
|
d58eba984e | ||
|
3d46237d17 | ||
|
ed3cff87ca | ||
|
2002581106 | ||
|
e968d50aac | ||
|
1e03194765 | ||
|
10c558faaf | ||
|
dcf6957842 | ||
|
77bebc48bc | ||
|
cad14dd6a4 | ||
|
5d72af5b20 | ||
|
1fcb923469 | ||
|
f89bc41ac1 | ||
|
70988a91fd | ||
|
f3481f94dd | ||
|
204eadd809 | ||
|
69f2ec1777 | ||
|
b98c23e369 | ||
|
64779fb55a | ||
|
845cf0a035 | ||
|
9dba240202 | ||
|
8aa682028f | ||
|
cb80b80efb | ||
|
eb1d997413 | ||
|
986badc653 | ||
|
2432db0b31 | ||
|
5be2c9b51d | ||
|
d801994fed | ||
|
19bb9a0331 | ||
|
b8dc6f9a53 | ||
|
3a7ba00486 | ||
|
86416df7dd | ||
|
704f209e4d | ||
|
e1bed6f0cf | ||
|
61c88596f0 | ||
|
a07c51a04a | ||
|
0e46a83843 | ||
|
1a4b9658c3 | ||
|
9b922abe48 | ||
|
6f0f883d88 | ||
|
aafcc4d96e | ||
|
e019c8027b | ||
|
b6acb43055 | ||
|
d9f6e3328e | ||
|
0e50132e13 | ||
|
c74e8456d2 |
2
.flutter
2
.flutter
Submodule .flutter updated: 80c2e84975...2663184aa7
@@ -26,6 +26,7 @@ Currently supported App sources:
|
|||||||
- [Aptoide](https://aptoide.com/)
|
- [Aptoide](https://aptoide.com/)
|
||||||
- [Uptodown](https://uptodown.com/)
|
- [Uptodown](https://uptodown.com/)
|
||||||
- [Huawei AppGallery](https://appgallery.huawei.com/)
|
- [Huawei AppGallery](https://appgallery.huawei.com/)
|
||||||
|
- [Tencent App Store](https://sj.qq.com/)
|
||||||
- Jenkins Jobs
|
- Jenkins Jobs
|
||||||
- [APKMirror](https://apkmirror.com/) (Track-Only)
|
- [APKMirror](https://apkmirror.com/) (Track-Only)
|
||||||
- Open Source - App-Specific:
|
- Open Source - App-Specific:
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Deinstaliraj s uređaja",
|
"uninstallFromDevice": "Deinstaliraj s uređaja",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Radi samo za aplikacije s onemogućenom detekcijom verzije.",
|
"onlyWorksWithNonVersionDetectApps": "Radi samo za aplikacije s onemogućenom detekcijom verzije.",
|
||||||
"releaseDateAsVersion": "Koristi datum izdanja kao verziju",
|
"releaseDateAsVersion": "Koristi datum izdanja kao verziju",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
"releaseDateAsVersionExplanation": "Ova opcija bi se trebala koristiti samo za aplikacije gdje detekcija verzije ne radi ispravno, ali je datum izdavanja dostupan.",
|
"releaseDateAsVersionExplanation": "Ova opcija bi se trebala koristiti samo za aplikacije gdje detekcija verzije ne radi ispravno, ali je datum izdavanja dostupan.",
|
||||||
"changes": "Promjene",
|
"changes": "Promjene",
|
||||||
"releaseDate": "Datum izdavanja",
|
"releaseDate": "Datum izdavanja",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Dijeli sa AppVerifier-om, zatim se vratite kada ste spremni.",
|
"appVerifierInstructionToast": "Dijeli sa AppVerifier-om, zatim se vratite kada ste spremni.",
|
||||||
"wiki": "Pomoć/Wiki",
|
"wiki": "Pomoć/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Konfiguracije aplikacije obezbeđene pomoću velikog broja ljudi (crowdsourcing) (koristite na svoju odgovornost)",
|
"crowdsourcedConfigsLabel": "Konfiguracije aplikacije obezbeđene pomoću velikog broja ljudi (crowdsourcing) (koristite na svoju odgovornost)",
|
||||||
|
"allowInsecure": "Allow insecure HTTP requests",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Želite li ukloniti aplikaciju?",
|
"one": "Želite li ukloniti aplikaciju?",
|
||||||
"other": "Želite li ukloniti aplikacije?"
|
"other": "Želite li ukloniti aplikacije?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Odinstalovat ze zařízení",
|
"uninstallFromDevice": "Odinstalovat ze zařízení",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Funguje pouze pro aplikace s vypnutou detekcí verze.",
|
"onlyWorksWithNonVersionDetectApps": "Funguje pouze pro aplikace s vypnutou detekcí verze.",
|
||||||
"releaseDateAsVersion": "Použít datum vydání jako verzi",
|
"releaseDateAsVersion": "Použít datum vydání jako verzi",
|
||||||
|
"releaseTitleAsVersion": "Použít název verze jako řetězec verze",
|
||||||
"releaseDateAsVersionExplanation": "Tato možnost by měla být použita pouze u aplikace, kde detekce verzí nefunguje správně, ale je k dispozici datum vydání.",
|
"releaseDateAsVersionExplanation": "Tato možnost by měla být použita pouze u aplikace, kde detekce verzí nefunguje správně, ale je k dispozici datum vydání.",
|
||||||
"changes": "Změny",
|
"changes": "Změny",
|
||||||
"releaseDate": "Datum vydání",
|
"releaseDate": "Datum vydání",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Sdílejte do aplikace AppVerifier a po dokončení se sem vraťte.",
|
"appVerifierInstructionToast": "Sdílejte do aplikace AppVerifier a po dokončení se sem vraťte.",
|
||||||
"wiki": "Nápověda/Wiki",
|
"wiki": "Nápověda/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Konfigurace aplikací s využitím crowdsourcingu (použití na vlastní nebezpečí)",
|
"crowdsourcedConfigsLabel": "Konfigurace aplikací s využitím crowdsourcingu (použití na vlastní nebezpečí)",
|
||||||
|
"allowInsecure": "Povolení nezabezpečených požadavků HTTP",
|
||||||
|
"stayOneVersionBehind": "Zůstaňte o jednu verzi pozadu za nejnovější",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Odstranit Apku?",
|
"one": "Odstranit Apku?",
|
||||||
"other": "Odstranit Apky?"
|
"other": "Odstranit Apky?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Afinstaller fra enhed",
|
"uninstallFromDevice": "Afinstaller fra enhed",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Virker kun for apps med versionsregistrering deaktiveret.",
|
"onlyWorksWithNonVersionDetectApps": "Virker kun for apps med versionsregistrering deaktiveret.",
|
||||||
"releaseDateAsVersion": "Brug udgivelsesdato som versionsstreng",
|
"releaseDateAsVersion": "Brug udgivelsesdato som versionsstreng",
|
||||||
|
"releaseTitleAsVersion": "Brug udgivelsestitel som versionsstreng",
|
||||||
"releaseDateAsVersionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt, men hvor en udgivelsesdato er tilgængelig.",
|
"releaseDateAsVersionExplanation": "Denne indstilling bør kun bruges til apps, hvor versionsregistrering ikke virker korrekt, men hvor en udgivelsesdato er tilgængelig.",
|
||||||
"changes": "Ændringer",
|
"changes": "Ændringer",
|
||||||
"releaseDate": "Udgivelsesdato",
|
"releaseDate": "Udgivelsesdato",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Del til AppVerifier, og vend tilbage hertil, når du er klar.",
|
"appVerifierInstructionToast": "Del til AppVerifier, og vend tilbage hertil, når du er klar.",
|
||||||
"wiki": "Hjælp/Wiki",
|
"wiki": "Hjælp/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourcede app-konfigurationer (brug på egen risiko)",
|
"crowdsourcedConfigsLabel": "Crowdsourcede app-konfigurationer (brug på egen risiko)",
|
||||||
|
"allowInsecure": "Tillad usikre HTTP-anmodninger",
|
||||||
|
"stayOneVersionBehind": "Vær en version bagud i forhold til den nyeste",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Fjern app?",
|
"one": "Fjern app?",
|
||||||
"other": "Fjern apps?"
|
"other": "Fjern apps?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Vom Gerät deinstallieren",
|
"uninstallFromDevice": "Vom Gerät deinstallieren",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Funktioniert nur bei Apps mit deaktivierter Versionserkennung.",
|
"onlyWorksWithNonVersionDetectApps": "Funktioniert nur bei Apps mit deaktivierter Versionserkennung.",
|
||||||
"releaseDateAsVersion": "Veröffentlichungsdatum als Version verwenden",
|
"releaseDateAsVersion": "Veröffentlichungsdatum als Version verwenden",
|
||||||
|
"releaseTitleAsVersion": "Versionstitel als Versionsstring verwenden",
|
||||||
"releaseDateAsVersionExplanation": "Diese Option sollte nur für Apps verwendet werden, bei denen die Versionserkennung nicht korrekt funktioniert, aber ein Veröffentlichungsdatum verfügbar ist.",
|
"releaseDateAsVersionExplanation": "Diese Option sollte nur für Apps verwendet werden, bei denen die Versionserkennung nicht korrekt funktioniert, aber ein Veröffentlichungsdatum verfügbar ist.",
|
||||||
"changes": "Änderungen",
|
"changes": "Änderungen",
|
||||||
"releaseDate": "Veröffentlichungsdatum",
|
"releaseDate": "Veröffentlichungsdatum",
|
||||||
@@ -250,7 +251,7 @@
|
|||||||
"enableBackgroundUpdates": "Hintergrundaktualisierungen aktivieren",
|
"enableBackgroundUpdates": "Hintergrundaktualisierungen aktivieren",
|
||||||
"backgroundUpdateReqsExplanation": "Die Hintergrundaktualisierung ist möglicherweise nicht für alle Apps möglich.",
|
"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.",
|
"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",
|
"intermediateLinkRegex": "Filter für einen „Zwischen“-Link, der zuerst besucht werden soll",
|
||||||
"filterByLinkText": "Links durch Linktext filtern",
|
"filterByLinkText": "Links durch Linktext filtern",
|
||||||
"intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden",
|
"intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Geben Sie die Daten an AppVerifier weiter und kehren Sie dann hierher zurück, wenn Sie fertig sind.",
|
"appVerifierInstructionToast": "Geben Sie die Daten an AppVerifier weiter und kehren Sie dann hierher zurück, wenn Sie fertig sind.",
|
||||||
"wiki": "Hilfe/Wiki",
|
"wiki": "Hilfe/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App-Konfigurationen (Verwendung auf eigene Gefahr)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App-Konfigurationen (Verwendung auf eigene Gefahr)",
|
||||||
|
"allowInsecure": "Unsichere HTTP-Anfragen zulassen",
|
||||||
|
"stayOneVersionBehind": "Eine Version hinter der neuesten Version bleiben",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App entfernen?",
|
"one": "App entfernen?",
|
||||||
"other": "Apps entfernen?"
|
"other": "Apps entfernen?"
|
||||||
|
380
assets/translations/en-EO.json
Normal file
380
assets/translations/en-EO.json
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
{
|
||||||
|
"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",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
|
"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",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
}
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Uninstall from Device",
|
"uninstallFromDevice": "Uninstall from Device",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Only works for Apps with version detection disabled.",
|
"onlyWorksWithNonVersionDetectApps": "Only works for Apps with version detection disabled.",
|
||||||
"releaseDateAsVersion": "Use release date as version string",
|
"releaseDateAsVersion": "Use release date as version string",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
"releaseDateAsVersionExplanation": "This option should only be used for Apps where version detection does not work correctly, but a release date is available.",
|
"releaseDateAsVersionExplanation": "This option should only be used for Apps where version detection does not work correctly, but a release date is available.",
|
||||||
"changes": "Changes",
|
"changes": "Changes",
|
||||||
"releaseDate": "Release Date",
|
"releaseDate": "Release Date",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Share to AppVerifier, then return here when ready.",
|
"appVerifierInstructionToast": "Share to AppVerifier, then return here when ready.",
|
||||||
"wiki": "Help/Wiki",
|
"wiki": "Help/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
|
||||||
|
"allowInsecure": "Allow insecure HTTP requests",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remove App?",
|
"one": "Remove App?",
|
||||||
"other": "Remove Apps?"
|
"other": "Remove Apps?"
|
||||||
@@ -374,4 +377,4 @@
|
|||||||
"one": "{} APK",
|
"one": "{} APK",
|
||||||
"other": "{} APKs"
|
"other": "{} APKs"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Desinstalar del dispositivo",
|
"uninstallFromDevice": "Desinstalar del dispositivo",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Solo funciona para aplicaciones con la detección de versiones desactivada.",
|
"onlyWorksWithNonVersionDetectApps": "Solo funciona para aplicaciones con la detección de versiones desactivada.",
|
||||||
"releaseDateAsVersion": "Por fecha de publicación",
|
"releaseDateAsVersion": "Por fecha de publicación",
|
||||||
|
"releaseTitleAsVersion": "Utilizar el título de la versión como cadena de versión",
|
||||||
"releaseDateAsVersionExplanation": "Esta opción solo se debería usar con aplicaciones en las que la detección de versiones no funciona pero hay disponible una fecha de publicación.",
|
"releaseDateAsVersionExplanation": "Esta opción solo se debería usar con aplicaciones en las que la detección de versiones no funciona pero hay disponible una fecha de publicación.",
|
||||||
"changes": "Cambios",
|
"changes": "Cambios",
|
||||||
"releaseDate": "Fecha de publicación",
|
"releaseDate": "Fecha de publicación",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
|
"appVerifierInstructionToast": "Comparta con AppVerifier y vuelva aquí cuando esté listo.",
|
||||||
"wiki": "Ayuda/Wiki",
|
"wiki": "Ayuda/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (uso bajo su propia responsabilidad)",
|
||||||
|
"allowInsecure": "Permitir peticiones HTTP inseguras",
|
||||||
|
"stayOneVersionBehind": "Mantenerse una versión por detrás de la última",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "¿Eliminar aplicación?",
|
"one": "¿Eliminar aplicación?",
|
||||||
"other": "¿Eliminar aplicaciones?"
|
"other": "¿Eliminar aplicaciones?"
|
||||||
|
@@ -22,9 +22,9 @@
|
|||||||
"requiredInBrackets": "(ضروری)",
|
"requiredInBrackets": "(ضروری)",
|
||||||
"dropdownNoOptsError": "خطا: کشویی باید حداقل یک گزینه داشته باشد",
|
"dropdownNoOptsError": "خطا: کشویی باید حداقل یک گزینه داشته باشد",
|
||||||
"colour": "رنگ",
|
"colour": "رنگ",
|
||||||
"standard": "Standard",
|
"standard": "استاندارد",
|
||||||
"custom": "Custom",
|
"custom": "سفارشی",
|
||||||
"useMaterialYou": "Use Material You",
|
"useMaterialYou": "از Material You استفاده کنید",
|
||||||
"githubStarredRepos": "مخازن ستاره دار گیتهاب",
|
"githubStarredRepos": "مخازن ستاره دار گیتهاب",
|
||||||
"uname": "نام کاربری",
|
"uname": "نام کاربری",
|
||||||
"wrongArgNum": "تعداد آرگومان های ارائه شده اشتباه است",
|
"wrongArgNum": "تعداد آرگومان های ارائه شده اشتباه است",
|
||||||
@@ -88,22 +88,22 @@
|
|||||||
"author": "سازنده",
|
"author": "سازنده",
|
||||||
"upToDateApps": "برنامه های به روز",
|
"upToDateApps": "برنامه های به روز",
|
||||||
"nonInstalledApps": "برنامه های نصب نشده",
|
"nonInstalledApps": "برنامه های نصب نشده",
|
||||||
"importExport": "درون ریزی/برون ریزی",
|
"importExport": "وارد کردن/صادر کردن",
|
||||||
"settings": "تنظیمات",
|
"settings": "تنظیمات",
|
||||||
"exportedTo": "برون ریزی به{}",
|
"exportedTo": "صادر کردن به{}",
|
||||||
"obtainiumExport": "صادرکردن Obtainium",
|
"obtainiumExport": "صادر کردن Obtainium",
|
||||||
"invalidInput": "ورودی نامعتبر",
|
"invalidInput": "ورودی نامعتبر",
|
||||||
"importedX": "وارد شده {}",
|
"importedX": "وارد شده {}",
|
||||||
"obtainiumImport": "واردکردن Obtainium",
|
"obtainiumImport": "وارد کردن Obtainium",
|
||||||
"importFromURLList": "درون ریزی از فهرست آدرس اینترنتی",
|
"importFromURLList": "وارد کردن از فهرست آدرس اینترنتی",
|
||||||
"searchQuery": "جستجوی سوال",
|
"searchQuery": "جستجوی سوال",
|
||||||
"appURLList": "فهرست آدرس اینترنتی برنامه",
|
"appURLList": "فهرست آدرس اینترنتی برنامه",
|
||||||
"line": "خط",
|
"line": "خط",
|
||||||
"searchX": "جستجو {}",
|
"searchX": "جستجو {}",
|
||||||
"noResults": "نتیجه ای پیدا نشد",
|
"noResults": "نتیجه ای پیدا نشد",
|
||||||
"importX": "درون ریزی {}",
|
"importX": " وارد کردن {}",
|
||||||
"importedAppsIdDisclaimer": "ممکن است برنامههای وارد شده به اشتباه بهعنوان \"نصب نشده\" نشان داده شوند.\nبرای رفع این مشکل، آنها را دوباره از طریق Obtainium نصب کنید.\nاین نباید روی دادههای برنامه تأثیر بگذارد.\n\nفقط بر روی آدرس اینترنتی و روشهای درون ریزی شخص ثالث تأثیر میگذارد.",
|
"importedAppsIdDisclaimer": "ممکن است برنامههای وارد شده به اشتباه بهعنوان \"نصب نشده\" نشان داده شوند.\nبرای رفع این مشکل، آنها را دوباره از طریق Obtainium نصب کنید.\nاین نباید روی دادههای برنامه تأثیر بگذارد.\n\nفقط بر روی آدرس اینترنتی و روشهای درون ریزی شخص ثالث تأثیر میگذارد.",
|
||||||
"importErrors": "خطاهای درون ریزی",
|
"importErrors": "خطاهای وارد کردن",
|
||||||
"importedXOfYApps": "{} از {} برنامه وارد شد.",
|
"importedXOfYApps": "{} از {} برنامه وارد شد.",
|
||||||
"followingURLsHadErrors": "آدرس های اینترنتی زیر دارای خطا بودند:",
|
"followingURLsHadErrors": "آدرس های اینترنتی زیر دارای خطا بودند:",
|
||||||
"selectURL": "آدرس اینترنتی انتخاب شده",
|
"selectURL": "آدرس اینترنتی انتخاب شده",
|
||||||
@@ -135,7 +135,7 @@
|
|||||||
"close": "بستن",
|
"close": "بستن",
|
||||||
"share": "اشتراک گذاری",
|
"share": "اشتراک گذاری",
|
||||||
"appNotFound": "برنامه پیدا نشد",
|
"appNotFound": "برنامه پیدا نشد",
|
||||||
"obtainiumExportHyphenatedLowercase": "برون ریزی-obtainium",
|
"obtainiumExportHyphenatedLowercase": "صادر کردن-obtainium",
|
||||||
"pickAnAPK": "یک APK انتخاب کنید",
|
"pickAnAPK": "یک APK انتخاب کنید",
|
||||||
"appHasMoreThanOnePackage": "{} بیش از یک بسته دارد:",
|
"appHasMoreThanOnePackage": "{} بیش از یک بسته دارد:",
|
||||||
"deviceSupportsXArch": "دستگاه شما از معماری پردازنده {} پشتیبانی میکند",
|
"deviceSupportsXArch": "دستگاه شما از معماری پردازنده {} پشتیبانی میکند",
|
||||||
@@ -213,10 +213,11 @@
|
|||||||
"uninstallFromDevice": "حذف نصب از دستگاه",
|
"uninstallFromDevice": "حذف نصب از دستگاه",
|
||||||
"onlyWorksWithNonVersionDetectApps": "فقط برای برنامههایی کار میکند که تشخیص نسخه غیرفعال است.",
|
"onlyWorksWithNonVersionDetectApps": "فقط برای برنامههایی کار میکند که تشخیص نسخه غیرفعال است.",
|
||||||
"releaseDateAsVersion": "از تاریخ انتشار به عنوان نسخه استفاده کنید",
|
"releaseDateAsVersion": "از تاریخ انتشار به عنوان نسخه استفاده کنید",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
"releaseDateAsVersionExplanation": "این گزینه فقط باید برای برنامه هایی استفاده شود که تشخیص نسخه به درستی کار نمی کند، اما تاریخ انتشار در دسترس است.",
|
"releaseDateAsVersionExplanation": "این گزینه فقط باید برای برنامه هایی استفاده شود که تشخیص نسخه به درستی کار نمی کند، اما تاریخ انتشار در دسترس است.",
|
||||||
"changes": "تغییرات",
|
"changes": "تغییرات",
|
||||||
"releaseDate": "تاریخ انتشار",
|
"releaseDate": "تاریخ انتشار",
|
||||||
"importFromURLsInFile": "درون ریزی از آدرس های اینترنتی موجود در فایل (مانند OPML)",
|
"importFromURLsInFile": "وارد کردن از آدرس های اینترنتی موجود در فایل (مانند OPML)",
|
||||||
"versionDetectionExplanation": "تطبیق رشته نسخه با نسخه شناسایی شده از سیستم عامل",
|
"versionDetectionExplanation": "تطبیق رشته نسخه با نسخه شناسایی شده از سیستم عامل",
|
||||||
"versionDetection": "تشخیص نسخه",
|
"versionDetection": "تشخیص نسخه",
|
||||||
"standardVersionDetection": "تشخیص نسخه استاندارد",
|
"standardVersionDetection": "تشخیص نسخه استاندارد",
|
||||||
@@ -259,12 +260,12 @@
|
|||||||
"bgUpdatesOnWiFiOnly": "بهروزرسانیهای پسزمینه را در صورت عدم اتصال به WiFi غیرفعال کنید",
|
"bgUpdatesOnWiFiOnly": "بهروزرسانیهای پسزمینه را در صورت عدم اتصال به WiFi غیرفعال کنید",
|
||||||
"autoSelectHighestVersionCode": "انتخاب خودکار بالاترین نسخه کد APK",
|
"autoSelectHighestVersionCode": "انتخاب خودکار بالاترین نسخه کد APK",
|
||||||
"versionExtractionRegEx": "نسخه استخراج RegEx",
|
"versionExtractionRegEx": "نسخه استخراج RegEx",
|
||||||
"trimVersionString": "Trim Version String With RegEx",
|
"trimVersionString": "برش رشته نسخه با RegEx",
|
||||||
"matchGroupToUseForX": "Match Group to Use for \"{}\"",
|
"matchGroupToUseForX": "مطابقت دادن گروه برای استفاده برای \"{}\"",
|
||||||
"matchGroupToUse": "گروه مورد استفاده را مطابقت دهید",
|
"matchGroupToUse": "گروه مورد استفاده را مطابقت دهید",
|
||||||
"highlightTouchTargets": "اهداف لمسی کمتر واضح را برجسته کنید",
|
"highlightTouchTargets": "اهداف لمسی کمتر واضح را برجسته کنید",
|
||||||
"pickExportDir": "فهرست برون ریزی را انتخاب کنید",
|
"pickExportDir": "فهرست صادر کردن را انتخاب کنید",
|
||||||
"autoExportOnChanges": "برون ریزی خودکار تغییرات",
|
"autoExportOnChanges": "صادر کردن خودکار تغییرات",
|
||||||
"includeSettings": "شامل تنظیمات",
|
"includeSettings": "شامل تنظیمات",
|
||||||
"filterVersionsByRegEx": "فیلتر کردن نسخه ها با RegEx",
|
"filterVersionsByRegEx": "فیلتر کردن نسخه ها با RegEx",
|
||||||
"trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید",
|
"trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید",
|
||||||
@@ -290,11 +291,11 @@
|
|||||||
"supportFixedAPKURL": "پشتیبانی از URL های APK ثابت",
|
"supportFixedAPKURL": "پشتیبانی از URL های APK ثابت",
|
||||||
"selectX": "انتخاب کنید {}",
|
"selectX": "انتخاب کنید {}",
|
||||||
"parallelDownloads": "اجازه دانلود موازی",
|
"parallelDownloads": "اجازه دانلود موازی",
|
||||||
"useShizuku": "Use Shizuku or Sui to install",
|
"useShizuku": "برای نصب از Shizuku یا Sui استفاده کنید",
|
||||||
"shizukuBinderNotFound": "Shizuku در حال اجرا نیست",
|
"shizukuBinderNotFound": "Shizuku در حال اجرا نیست",
|
||||||
"shizukuOld": "Old Shizuku version (<11) - update it",
|
"shizukuOld": "نسخه قدیمی Shizuku (<11) - آن را به روز کنید",
|
||||||
"shizukuOldAndroidWithADB": "Shizuku running on Android < 8.1 with ADB - update Android or use Sui instead",
|
"shizukuOldAndroidWithADB": "Shizuku در Android < 8.1 با ADB اجرا می شود - اندروید را به روز کنید یا به جای آن از Sui استفاده کنید",
|
||||||
"shizukuPretendToBeGooglePlay": "Set Google Play as the installation source (if Shizuku is used)",
|
"shizukuPretendToBeGooglePlay": "Google Play را به عنوان منبع نصب تنظیم کنید (در صورت استفاده از Shizuku)",
|
||||||
"useSystemFont": "استفاده از فونت سیستم",
|
"useSystemFont": "استفاده از فونت سیستم",
|
||||||
"useVersionCodeAsOSVersion": "استفاده کد نسخه برنامه به جای نسخه شناسایی شده توسط سیستم عامل استفاده کنید",
|
"useVersionCodeAsOSVersion": "استفاده کد نسخه برنامه به جای نسخه شناسایی شده توسط سیستم عامل استفاده کنید",
|
||||||
"requestHeader": "درخواست سطر بالایی",
|
"requestHeader": "درخواست سطر بالایی",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "در AppVerifier به اشتراک بگذارید، سپس پس از آماده شدن به اینجا برگردید.",
|
"appVerifierInstructionToast": "در AppVerifier به اشتراک بگذارید، سپس پس از آماده شدن به اینجا برگردید.",
|
||||||
"wiki": "راهنما/ویکی",
|
"wiki": "راهنما/ویکی",
|
||||||
"crowdsourcedConfigsLabel": "تنظیمات برنامه Crowdsourced (با مسئولیت خود استفاده کنید)",
|
"crowdsourcedConfigsLabel": "تنظیمات برنامه Crowdsourced (با مسئولیت خود استفاده کنید)",
|
||||||
|
"allowInsecure": "درخواست های HTTP ناامن را مجاز کنید",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "برنامه حذف شود؟",
|
"one": "برنامه حذف شود؟",
|
||||||
"other": "برنامه ها حذف شوند؟"
|
"other": "برنامه ها حذف شوند؟"
|
||||||
|
@@ -88,23 +88,23 @@
|
|||||||
"author": "Auteur",
|
"author": "Auteur",
|
||||||
"upToDateApps": "Applications à jour",
|
"upToDateApps": "Applications à jour",
|
||||||
"nonInstalledApps": "Applications non installées",
|
"nonInstalledApps": "Applications non installées",
|
||||||
"importExport": "Sauvegarder/Restaurer",
|
"importExport": "Importer/Exporter",
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
"exportedTo": "Sauvegardé vers {}",
|
"exportedTo": "Exporté vers {}",
|
||||||
"obtainiumExport": "Sauvegarder Obtainium",
|
"obtainiumExport": "Exporter Obtainium",
|
||||||
"invalidInput": "Entrée invalide",
|
"invalidInput": "Entrée invalide",
|
||||||
"importedX": "Restauré {}",
|
"importedX": "Importé {}",
|
||||||
"obtainiumImport": "Restaurer Obtainium",
|
"obtainiumImport": "Importer sur Obtainium",
|
||||||
"importFromURLList": "Restaurer depuis une liste d'URL",
|
"importFromURLList": "Importer depuis une liste d'URL",
|
||||||
"searchQuery": "Requête de recherche",
|
"searchQuery": "Requête de recherche",
|
||||||
"appURLList": "Liste d'URL de l'application",
|
"appURLList": "Liste d'URL de l'application",
|
||||||
"line": "Ligne",
|
"line": "Ligne",
|
||||||
"searchX": "Rechercher {}",
|
"searchX": "Rechercher {}",
|
||||||
"noResults": "Aucun résultat",
|
"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.",
|
"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",
|
"importErrors": "Erreurs lors de l'importation",
|
||||||
"importedXOfYApps": "{} applications sur {} ont été restaurées.",
|
"importedXOfYApps": "{} applications sur {} ont été importés.",
|
||||||
"followingURLsHadErrors": "Les URL suivants comportent des erreurs :",
|
"followingURLsHadErrors": "Les URL suivants comportent des erreurs :",
|
||||||
"selectURL": "Sélectionner l'URL",
|
"selectURL": "Sélectionner l'URL",
|
||||||
"selectURLs": "Sélectionner les URL",
|
"selectURLs": "Sélectionner les URL",
|
||||||
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Désinstaller de l'appareil",
|
"uninstallFromDevice": "Désinstaller de l'appareil",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Ne fonctionne que pour les applications dont la détection de la version est désactivée.",
|
"onlyWorksWithNonVersionDetectApps": "Ne fonctionne que pour les applications dont la détection de la version est désactivée.",
|
||||||
"releaseDateAsVersion": "Utiliser la date de sortie comme version",
|
"releaseDateAsVersion": "Utiliser la date de sortie comme version",
|
||||||
|
"releaseTitleAsVersion": "Utiliser le titre de la version comme chaîne de caractères de la version",
|
||||||
"releaseDateAsVersionExplanation": "Cette option ne doit être utilisée que pour les applications pour lesquelles la détection de la version ne fonctionne pas correctement, mais dont une date de sortie est disponible.",
|
"releaseDateAsVersionExplanation": "Cette option ne doit être utilisée que pour les applications pour lesquelles la détection de la version ne fonctionne pas correctement, mais dont une date de sortie est disponible.",
|
||||||
"changes": "Modifications",
|
"changes": "Modifications",
|
||||||
"releaseDate": "Date de sortie",
|
"releaseDate": "Date de sortie",
|
||||||
@@ -263,8 +264,8 @@
|
|||||||
"matchGroupToUseForX": "Groupe de correspondance à utiliser pour \"{}\"",
|
"matchGroupToUseForX": "Groupe de correspondance à utiliser pour \"{}\"",
|
||||||
"matchGroupToUse": "Groupe de correspondance à utiliser pour l'extraction de la version par Expression régulière",
|
"matchGroupToUse": "Groupe de correspondance à utiliser pour l'extraction de la version par Expression régulière",
|
||||||
"highlightTouchTargets": "Mettre en évidence les touches moins évidentes",
|
"highlightTouchTargets": "Mettre en évidence les touches moins évidentes",
|
||||||
"pickExportDir": "Selectionner le dossier pour l'exportation",
|
"pickExportDir": "Selectionner le dossier d'exportation",
|
||||||
"autoExportOnChanges": "Exportation automatique lors de modification",
|
"autoExportOnChanges": "Exporter automatiquement lors de modifications",
|
||||||
"includeSettings": "Inclure les paramètres",
|
"includeSettings": "Inclure les paramètres",
|
||||||
"filterVersionsByRegEx": "Filtrer les versions par expression régulière",
|
"filterVersionsByRegEx": "Filtrer les versions par expression régulière",
|
||||||
"trySelectingSuggestedVersionCode": "Essayer de sélectionner la version suggérée du code APK",
|
"trySelectingSuggestedVersionCode": "Essayer de sélectionner la version suggérée du code APK",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque tout est prêt.",
|
"appVerifierInstructionToast": "Partagez avec AppVerifier, puis revenez ici lorsque tout est prêt.",
|
||||||
"wiki": "Aide/Wiki",
|
"wiki": "Aide/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Configurations d'applications par la communauté (à utiliser à vos risques et périls)",
|
"crowdsourcedConfigsLabel": "Configurations d'applications par la communauté (à utiliser à vos risques et périls)",
|
||||||
|
"allowInsecure": "Autoriser les requêtes HTTP non sécurisées",
|
||||||
|
"stayOneVersionBehind": "Rester à une version de la dernière",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Supprimer l'application ?",
|
"one": "Supprimer l'application ?",
|
||||||
"other": "Supprimer les applications ?"
|
"other": "Supprimer les applications ?"
|
||||||
|
@@ -1,208 +1,208 @@
|
|||||||
{
|
{
|
||||||
"invalidURLForSource": "Érvénytelen a(z) {} app URL-je",
|
"invalidURLForSource": "Érvénytelen a(z) {} alkalmazás webcíme",
|
||||||
"noReleaseFound": "Nem található megfelelő kiadás",
|
"noReleaseFound": "Nem található megfelelő kiadás",
|
||||||
"noVersionFound": "Nem sikerült meghatározni a kiadás verzióját",
|
"noVersionFound": "Nem sikerült meghatározni a kiadás verzióját",
|
||||||
"urlMatchesNoSource": "Az URL nem egyezik ismert forrással",
|
"urlMatchesNoSource": "A webcím nem egyezik egyetlen ismert forrással sem",
|
||||||
"cantInstallOlderVersion": "Nem telepíthető egy app régebbi verziója",
|
"cantInstallOlderVersion": "Nem telepíthető egy alkalmazás régebbi verziója",
|
||||||
"appIdMismatch": "A letöltött csomagazonosító nem egyezik a meglévő app azonosítóval",
|
"appIdMismatch": "A letöltött csomagazonosító nem egyezik a meglévő alkalmazás azonosítójával",
|
||||||
"functionNotImplemented": "Ez az osztály nem valósította meg ezt a függvényt",
|
"functionNotImplemented": "Ebben az ágban nincs implementálva ez a funkció",
|
||||||
"placeholder": "Helykitöltő",
|
"placeholder": "Helyőrző",
|
||||||
"someErrors": "Néhány hiba történt",
|
"someErrors": "Néhány hiba történt",
|
||||||
"unexpectedError": "Váratlan hiba",
|
"unexpectedError": "Váratlan hiba",
|
||||||
"ok": "Oké",
|
"ok": "Rendben",
|
||||||
"and": "és",
|
"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",
|
"includePrereleases": "Tartalmazza az előzetes kiadásokat",
|
||||||
"fallbackToOlderReleases": "Visszatérés a régebbi kiadásokhoz",
|
"fallbackToOlderReleases": "Visszatérés a régebbi kiadásokhoz",
|
||||||
"filterReleaseTitlesByRegEx": "A kiadás címeinek szűrése reguláris kifejezéssel",
|
"filterReleaseTitlesByRegEx": "A kiadás címeinek szűrése reguláris kifejezéssel",
|
||||||
"invalidRegEx": "Érvénytelen reguláris kifejezés",
|
"invalidRegEx": "Érvénytelen reguláris kifejezés",
|
||||||
"noDescription": "Nincs leírás",
|
"noDescription": "Nincs leírás",
|
||||||
"cancel": "Mégse",
|
"cancel": "Mégse",
|
||||||
"continue": "Tovább",
|
"continue": "Folytatás",
|
||||||
"requiredInBrackets": "(Kötelező)",
|
"requiredInBrackets": "(Szükséges)",
|
||||||
"dropdownNoOptsError": "HIBA: A LEDOBÁST LEGALÁBB EGY OPCIÓHOZ KELL RENDELNI",
|
"dropdownNoOptsError": "HIBA: A LEGÖRDÜLŐ LISTÁNAK LEGALÁBB EGY OPCIÓVAL KELL RENDELKEZNIE",
|
||||||
"colour": "Szín",
|
"colour": "Szín",
|
||||||
"standard": "Standard",
|
"standard": "Általános",
|
||||||
"custom": "Custom",
|
"custom": "Egyéni",
|
||||||
"useMaterialYou": "Használja az Ön által használt anyagot",
|
"useMaterialYou": "Material You használata",
|
||||||
"githubStarredRepos": "GitHub Csillagos Repo-k",
|
"githubStarredRepos": "Csillagozott GitHub tárolók",
|
||||||
"uname": "Felh.név",
|
"uname": "Felhasználónév",
|
||||||
"wrongArgNum": "Rossz számú argumentumot adott meg",
|
"wrongArgNum": "A megadott argumentumok száma nem megfelelő",
|
||||||
"xIsTrackOnly": "A(z) {} csak nyomonkövethető",
|
"xIsTrackOnly": "A(z) {} csak nyomonkövethető",
|
||||||
"source": "Forrás",
|
"source": "Forrás",
|
||||||
"app": "Alkalmazás",
|
"app": "Alkalmazás",
|
||||||
"appsFromSourceAreTrackOnly": "Az ebből a forrásból származó alkalmazások 'Csak nyomon követhetőek'.",
|
"appsFromSourceAreTrackOnly": "Az ebből a forrásból származó alkalmazások „csak nyomonkövethetők”.",
|
||||||
"youPickedTrackOnly": "A 'Csak követés' opciót választotta.",
|
"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.",
|
"trackOnlyAppDescription": "Az alkalmazás frissítéseit nyomon követi, de az Obtainium nem tudja letölteni vagy telepíteni.",
|
||||||
"cancelled": "Törölve",
|
"cancelled": "Visszavonva",
|
||||||
"appAlreadyAdded": "Az app már hozzáadva",
|
"appAlreadyAdded": "Az alkalmazás már hozzá van adva",
|
||||||
"alreadyUpToDateQuestion": "Az app már naprakész?",
|
"alreadyUpToDateQuestion": "Az alkalmazás már naprakész?",
|
||||||
"addApp": "App hozzáadás",
|
"addApp": "Hozzáadás",
|
||||||
"appSourceURL": "App forrás URL",
|
"appSourceURL": "Alkalmazás forrásának webcíme",
|
||||||
"error": "Hiba",
|
"error": "Hiba",
|
||||||
"add": "Hozzáadás",
|
"add": "Hozzáadás",
|
||||||
"searchSomeSourcesLabel": "Keresés (csak egyes források)",
|
"searchSomeSourcesLabel": "Keresés (csak bizonyos források)",
|
||||||
"search": "Keresés",
|
"search": "Keresés",
|
||||||
"additionalOptsFor": "További lehetőségek a következőhöz: {}",
|
"additionalOptsFor": "További lehetőségek a következőhöz: {}",
|
||||||
"supportedSources": "Támogatott források",
|
"supportedSources": "Támogatott források",
|
||||||
"trackOnlyInBrackets": "(Csak nyomonkövetés)",
|
"trackOnlyInBrackets": "(Csak nyomonkövetés)",
|
||||||
"searchableInBrackets": "(Kereshető)",
|
"searchableInBrackets": "(Kereshető)",
|
||||||
"appsString": "Appok",
|
"appsString": "Alkalmazások",
|
||||||
"noApps": "Nincs App",
|
"noApps": "Nincsenek alkalmazások",
|
||||||
"noAppsForFilter": "Nincsenek appok a szűrőhöz",
|
"noAppsForFilter": "Nincsenek alkalmazások a szűrőhöz",
|
||||||
"byX": "Fejlesztő: {}",
|
"byX": "Fejlesztő: {}",
|
||||||
"percentProgress": "Folyamat: {}%",
|
"percentProgress": "Folyamat: {}%",
|
||||||
"pleaseWait": "Kis türelmet",
|
"pleaseWait": "Kis türelmet",
|
||||||
"updateAvailable": "Frissítés érhető el",
|
"updateAvailable": "Frissítés érhető el",
|
||||||
"notInstalled": "Nem telepített",
|
"notInstalled": "Nem telepített",
|
||||||
"pseudoVersion": "ál-verzió",
|
"pseudoVersion": "pszeudoverzió",
|
||||||
"selectAll": "Mindet kiválaszt",
|
"selectAll": "Összes kiválasztása",
|
||||||
"deselectX": "Törölje {} kijelölését",
|
"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.",
|
"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?",
|
"removeSelectedAppsQuestion": "A kiválasztott alkalmazások eltávolítása?",
|
||||||
"removeSelectedApps": "Távolítsa el a kiválasztott appokat",
|
"removeSelectedApps": "A kiválasztott alkalmazások eltávolítása",
|
||||||
"updateX": "Frissítés: {}",
|
"updateX": "A(z) {} frissítése",
|
||||||
"installX": "Telepítés: {}",
|
"installX": "A(z) {} telepítése",
|
||||||
"markXTrackOnlyAsUpdated": "Jelölje meg: {}\n(Csak nyomon követhető)\nmint Frissített",
|
"markXTrackOnlyAsUpdated": "Megjelölés: {}\n(Csak nyomonkövetés)\nFrissítettként",
|
||||||
"changeX": "Változás {}",
|
"changeX": "{} változtatás",
|
||||||
"installUpdateApps": "Appok telepítése/frissítése",
|
"installUpdateApps": "Alkalmazások telepítése/frissítése",
|
||||||
"installUpdateSelectedApps": "Telepítse/frissítse a kiválasztott appokat",
|
"installUpdateSelectedApps": "A kiválasztott alkalmazások telepítése/frissítése",
|
||||||
"markXSelectedAppsAsUpdated": "Megjelöl {} kiválasztott alkalmazást frissítettként?",
|
"markXSelectedAppsAsUpdated": "A(z) {} kiválasztott alkalmazás megjelölése frissítettként?",
|
||||||
"no": "Nem",
|
"no": "Nem",
|
||||||
"yes": "Igen",
|
"yes": "Igen",
|
||||||
"markSelectedAppsUpdated": "Jelölje meg a kiválasztott appokat frissítettként",
|
"markSelectedAppsUpdated": "A kiválasztott alkalmazások megjelölése frissítettként",
|
||||||
"pinToTop": "Rögzítés felülre",
|
"pinToTop": "Kitűzés felülre",
|
||||||
"unpinFromTop": "Eltávolít felülről",
|
"unpinFromTop": "Kitűzés megszüntetése",
|
||||||
"resetInstallStatusForSelectedAppsQuestion": "Visszaállítja a kiválasztott appok telepítési állapotát?",
|
"resetInstallStatusForSelectedAppsQuestion": "Visszaállítja a kiválasztott alkalmazások 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.",
|
"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",
|
"customLinkMessage": "Ezek a hivatkozások a telepített Obtainiummal rendelkező eszközökön működnek",
|
||||||
"shareAppConfigLinks": "App konfiguráció megosztása HTML linkként",
|
"shareAppConfigLinks": "Alkalmazás-konfiguráció megosztása HTML-hivatkozásként",
|
||||||
"shareSelectedAppURLs": "Ossza meg a kiválasztott app URL címeit",
|
"shareSelectedAppURLs": "A kiválasztott alkalmazás hivatkozásának megosztása",
|
||||||
"resetInstallStatus": "Telepítési állapot visszaállítása",
|
"resetInstallStatus": "Telepítési állapot visszaállítása",
|
||||||
"more": "További",
|
"more": "További",
|
||||||
"removeOutdatedFilter": "Távolítsa el az elavult app szűrőt",
|
"removeOutdatedFilter": "Elavult-alkalmazás szűrő eltávolítása",
|
||||||
"showOutdatedOnly": "Csak az elavult appok megjelenítése",
|
"showOutdatedOnly": "Csak az elavult alkalmazások megjelenítése",
|
||||||
"filter": "Szűrő",
|
"filter": "Szűrő",
|
||||||
"filterApps": "Appok szűrése",
|
"filterApps": "Alkalmazások szűrése",
|
||||||
"appName": "App név",
|
"appName": "Név",
|
||||||
"author": "Szerző",
|
"author": "Szerző",
|
||||||
"upToDateApps": "Naprakész appok",
|
"upToDateApps": "Naprakész alkalmazások",
|
||||||
"nonInstalledApps": "Nem telepített appok",
|
"nonInstalledApps": "Nem telepített alkalmazások",
|
||||||
"importExport": "Import Export",
|
"importExport": "Import/Export",
|
||||||
"settings": "Beállítások",
|
"settings": "Beállítások",
|
||||||
"exportedTo": "Exportálva ide {}",
|
"exportedTo": "Exportálva ide: {}",
|
||||||
"obtainiumExport": "Obtainium Adat Exportálás",
|
"obtainiumExport": "Obtainium adatok exportálása",
|
||||||
"invalidInput": "Hibás bemenet",
|
"invalidInput": "Hibás bemenet",
|
||||||
"importedX": "Importálva innen {}",
|
"importedX": "Importálva innen: {}",
|
||||||
"obtainiumImport": "Obtainium Adat Importálás",
|
"obtainiumImport": "Obtainium adatok importálása",
|
||||||
"importFromURLList": "Importálás URL listából",
|
"importFromURLList": "Importálás webcímlistából",
|
||||||
"searchQuery": "Keresési lekérdezés",
|
"searchQuery": "Keresési lekérdezés",
|
||||||
"appURLList": "App URL lista",
|
"appURLList": "Alkalmazás-webcímlista",
|
||||||
"line": "Sor",
|
"line": "Sor",
|
||||||
"searchX": "Keresés {}",
|
"searchX": "{} keresése",
|
||||||
"noResults": "Nincs találat",
|
"noResults": "Nincs találat",
|
||||||
"importX": "Importálás: {}",
|
"importX": "{} importálása",
|
||||||
"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..",
|
"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 webcímekre és a harmadik féltől származó importálási módszerekre vonatkozik.",
|
||||||
"importErrors": "Importálási hibák",
|
"importErrors": "Importálási hibák",
|
||||||
"importedXOfYApps": "{}/{} app importálva.",
|
"importedXOfYApps": "{}/{} alkalmazás importálva.",
|
||||||
"followingURLsHadErrors": "A következő URL-ek hibákat tartalmaztak:",
|
"followingURLsHadErrors": "A következő webcímek hibákat tartalmaztak:",
|
||||||
"selectURL": "Válassza ki az URL-t",
|
"selectURL": "Webcím kiválasztása",
|
||||||
"selectURLs": "Kiválasztott URL-ek",
|
"selectURLs": "Webcímek kiválasztása",
|
||||||
"pick": "Válasszon",
|
"pick": "Kiválasztás",
|
||||||
"theme": "Téma",
|
"theme": "Téma",
|
||||||
"dark": "Sötét",
|
"dark": "Sötét",
|
||||||
"light": "Világos",
|
"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",
|
"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",
|
"useBlackTheme": "Használjon teljesen fekete sötét témát",
|
||||||
"appSortBy": "App rendezés...",
|
"appSortBy": "Elrendezés",
|
||||||
"authorName": "Szerző/Név",
|
"authorName": "Szerző/Név",
|
||||||
"nameAuthor": "Név/Szerző",
|
"nameAuthor": "Név/Szerző",
|
||||||
"asAdded": "Mint Hozzáadott",
|
"asAdded": "Hozzáadás dátuma",
|
||||||
"appSortOrder": "Appok rendezése",
|
"appSortOrder": "Elrendezés sorrendje",
|
||||||
"ascending": "Emelkedő",
|
"ascending": "Növekvő",
|
||||||
"descending": "Csökkenő",
|
"descending": "Csökkenő",
|
||||||
"bgUpdateCheckInterval": "Háttérfrissítés ellenőrzés időköze",
|
"bgUpdateCheckInterval": "Időtartam a frissítések háttérellenőrzése között",
|
||||||
"neverManualOnly": "Soha – csak manuális",
|
"neverManualOnly": "Soha – csak kézi",
|
||||||
"appearance": "Megjelenés",
|
"appearance": "Megjelenés",
|
||||||
"showWebInAppView": "Forrás megjelenítése az Appok nézetben",
|
"showWebInAppView": "Forrás megjelenítése az alkalmazásnézetben",
|
||||||
"pinUpdates": "Frissítések kitűzése az App nézet tetejére",
|
"pinUpdates": "Frissítések kitűzése az alkalmazásnézet tetejére",
|
||||||
"updates": "Frissítések",
|
"updates": "Frissítések",
|
||||||
"sourceSpecific": "Forrás-specifikus",
|
"sourceSpecific": "Forrásspecifikus",
|
||||||
"appSource": "App forrás",
|
"appSource": "Alkalmazás forrása",
|
||||||
"noLogs": "Nincsenek naplók",
|
"noLogs": "Nincsenek naplók",
|
||||||
"appLogs": "App naplók",
|
"appLogs": "Alkalmazásnaplók",
|
||||||
"close": "Bezárás",
|
"close": "Bezárás",
|
||||||
"share": "Megosztás",
|
"share": "Megosztás",
|
||||||
"appNotFound": "App nem található",
|
"appNotFound": "Az alkalmazás nem található",
|
||||||
"obtainiumExportHyphenatedLowercase": "obtainium-export",
|
"obtainiumExportHyphenatedLowercase": "obtainium-adat",
|
||||||
"pickAnAPK": "Válasszon egy APK-t",
|
"pickAnAPK": "Válasszon egy APK-t",
|
||||||
"appHasMoreThanOnePackage": "A(z) {} egynél több csomaggal rendelkezik:",
|
"appHasMoreThanOnePackage": "A(z) {} egynél több csomaggal rendelkezik:",
|
||||||
"deviceSupportsXArch": "Eszköze támogatja a {} CPU architektúrát.",
|
"deviceSupportsXArch": "Ez az eszköz támogatja a(z) {} CPU architektúrát.",
|
||||||
"deviceSupportsFollowingArchs": "Az eszköze a következő CPU architektúrákat támogatja:",
|
"deviceSupportsFollowingArchs": "Ez az eszköz a következő CPU architektúrákat támogatja:",
|
||||||
"warning": "Figyelem",
|
"warning": "Figyelem",
|
||||||
"sourceIsXButPackageFromYPrompt": "Az alkalmazás forrása „{}”, de a kiadási csomag innen származik: „{}”. Folytatja?",
|
"sourceIsXButPackageFromYPrompt": "Az alkalmazás forrása a(z) „{}” tároló, de a kiadási csomag innen származik: „{}”. Folytatja?",
|
||||||
"updatesAvailable": "Frissítések érhetők el",
|
"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",
|
"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.",
|
"noNewUpdates": "Nincsenek új frissítések.",
|
||||||
"xHasAnUpdate": "A(z) {} frissítést kapott.",
|
"xHasAnUpdate": "A(z) {} frissítést kapott.",
|
||||||
"appsUpdated": "Alkalmazások frissítve",
|
"appsUpdated": "Alkalmazások frissítve",
|
||||||
"appsNotUpdated": "Nem sikerült frissíteni az alkalmazásokat",
|
"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",
|
"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": "{} frissítve a következőre: {}.",
|
"xWasUpdatedToY": "A(z) {} frissítve lett a következőre: {}.",
|
||||||
"xWasNotUpdatedToY": "A {} frissítése a {}-ra nem sikerült.",
|
"xWasNotUpdatedToY": "Nem sikerült frissíteni a következőt: {}, erre: {}.",
|
||||||
"errorCheckingUpdates": "Hiba a frissítések keresésekor",
|
"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",
|
"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",
|
"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) {} a következő hiba miatt lett eltávolítva: {}",
|
"xWasRemovedDueToErrorY": "A(z) {} eltávolításra került a következő hiba miatt: {}",
|
||||||
"completeAppInstallation": "Teljes app telepítés",
|
"completeAppInstallation": "Teljes alkalmazástelepítés",
|
||||||
"obtainiumMustBeOpenToInstallApps": "Az Obtainiumnak megnyitva kell lennie az alkalmazások telepítéséhez",
|
"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",
|
"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",
|
"checkingForUpdates": "Frissítések keresése",
|
||||||
"checkingForUpdatesNotifDescription": "Átmeneti értesítés, amely a frissítések keresésekor jelenik meg",
|
"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",
|
"pleaseAllowInstallPerm": "Engedélyezze az Obtainiumnak az alkalmazások telepítését",
|
||||||
"trackOnly": "Csak követés",
|
"trackOnly": "Csak nyomonkövetés",
|
||||||
"errorWithHttpStatusCode": "Hiba {}",
|
"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",
|
"unknown": "Ismeretlen",
|
||||||
"none": "Egyik sem",
|
"none": "Semmi",
|
||||||
"never": "Soha",
|
"never": "Soha",
|
||||||
"latestVersionX": "Legújabb verzió: {}",
|
"latestVersionX": "Legújabb verzió: {}",
|
||||||
"installedVersionX": "Telepített verzió: {}",
|
"installedVersionX": "Telepített verzió: {}",
|
||||||
"lastUpdateCheckX": "Frissítés ellenőrizve: {}",
|
"lastUpdateCheckX": "Frissítések utoljára ellenőrizve: {}",
|
||||||
"remove": "Eltávolítás",
|
"remove": "Eltávolítás",
|
||||||
"yesMarkUpdated": "Igen, megjelölés frissítettként",
|
"yesMarkUpdated": "Igen, megjelölés frissítettként",
|
||||||
"fdroid": "F-Droid hivatalos",
|
"fdroid": "F-Droid hivatalos",
|
||||||
"appIdOrName": "App ID vagy név",
|
"appIdOrName": "Az alkalmazás-azonosító vagy név",
|
||||||
"appId": "Alkalmazásazonosító",
|
"appId": "Alkalmazás-azonosító",
|
||||||
"appWithIdOrNameNotFound": "Nem található app ezzel az azonosítóval vagy névvel",
|
"appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel",
|
||||||
"reposHaveMultipleApps": "A repók több alkalmazást is tartalmazhatnak",
|
"reposHaveMultipleApps": "A tárolók több alkalmazást is tartalmazhatnak",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Harmadik-fél Repo",
|
"fdroidThirdPartyRepo": "F-Droid harmadik féltől származó tároló",
|
||||||
"steamMobile": "Steam mobil",
|
"steamMobile": "Steam Mobil",
|
||||||
"steamChat": "Steam Chat",
|
"steamChat": "Steam Chat",
|
||||||
"install": "Telepít",
|
"install": "Telepítés",
|
||||||
"markInstalled": "Telepítettnek jelöl",
|
"markInstalled": "Telepítettnek jelölés",
|
||||||
"update": "Frissít",
|
"update": "Frissítés",
|
||||||
"markUpdated": "Frissítettnek jelöl",
|
"markUpdated": "Frissítettnek jelölés",
|
||||||
"additionalOptions": "További lehetőségek",
|
"additionalOptions": "További beállítások",
|
||||||
"disableVersionDetection": "Verzió érzékelés letiltása",
|
"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.",
|
"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",
|
"downloadingX": "{} letöltése",
|
||||||
"downloadX": "Letöltés {}",
|
"downloadX": "{} letöltése",
|
||||||
"downloadedX": "Letöltés {}",
|
"downloadedX": "{} letöltve",
|
||||||
"releaseAsset": "Kiadási tartalom",
|
"releaseAsset": "Kiadási csomag",
|
||||||
"downloadNotifDescription": "Értesíti a felhasználót az app letöltésének előrehaladásáról",
|
"downloadNotifDescription": "Értesíti a felhasználót az alkalmazás letöltésének előrehaladásáról",
|
||||||
"noAPKFound": "Nem található APK",
|
"noAPKFound": "Nem található APK",
|
||||||
"noVersionDetection": "Nincs verzió érzékelés",
|
"noVersionDetection": "Nincs verzióérzékelés",
|
||||||
"categorize": "Kategorizálás",
|
"categorize": "Kategorizálás",
|
||||||
"categories": "Kategóriák",
|
"categories": "Kategóriák",
|
||||||
"category": "Kategória",
|
"category": "Kategória",
|
||||||
"noCategory": "Nincs kategória",
|
"noCategory": "Nincs kategória",
|
||||||
"noCategories": "Nincsenek kategóriák",
|
"noCategories": "Nincsenek kategóriák",
|
||||||
"deleteCategoriesQuestion": "Törli a kategóriákat?",
|
"deleteCategoriesQuestion": "Törli a kategóriákat?",
|
||||||
"categoryDeleteWarning": "A(z) {} összes app kategorizálatlan állapotba kerül.",
|
"categoryDeleteWarning": "A törölt kategóriákban lévő összes alkalmazás kategorizálatlanná válik.",
|
||||||
"addCategory": "Új kategória",
|
"addCategory": "Kategória hozzáadása",
|
||||||
"label": "Címke",
|
"label": "Címke",
|
||||||
"language": "Nyelv",
|
"language": "Nyelv",
|
||||||
"copiedToClipboard": "Másolva a vágólapra",
|
"copiedToClipboard": "Másolva a vágólapra",
|
||||||
@@ -210,133 +210,136 @@
|
|||||||
"selectedCategorizeWarning": "Ez felváltja a kiválasztott alkalmazások meglévő kategória-beállításait.",
|
"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",
|
"filterAPKsByRegEx": "Az APK-k szűrése reguláris kifejezéssel",
|
||||||
"removeFromObtainium": "Eltávolítás az Obtainiumból",
|
"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.",
|
"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",
|
"releaseDateAsVersion": "Használja a kiadás dátumát verzióként",
|
||||||
"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.",
|
"releaseTitleAsVersion": "A kiadás címét verziószálként használja",
|
||||||
"changes": "Változtatások",
|
"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",
|
"releaseDate": "Kiadás dátuma",
|
||||||
"importFromURLsInFile": "Importálás fájlban található URL-ből (mint pl. OPML)",
|
"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",
|
"versionDetectionExplanation": "A verziókarakterlánc egyeztetése az rendszer által észlelt verzióval",
|
||||||
"versionDetection": "Verzió érzékelés",
|
"versionDetection": "Verzióérzékelés",
|
||||||
"standardVersionDetection": "Alapért. verzió érzékelés",
|
"standardVersionDetection": "Alapértelmezett verzióérzékelés",
|
||||||
"groupByCategory": "Csoportosítás Kategória alapján",
|
"groupByCategory": "Csoportosítás kategória alapján",
|
||||||
"autoApkFilterByArch": "Ha lehetséges, próbálja CPU architektúra szerint szűrni az APK-kat",
|
"autoApkFilterByArch": "Ha lehetséges, próbálja CPU architektúra szerint szűrni az APK-kat",
|
||||||
"overrideSource": "Forrás felülbírálása",
|
"overrideSource": "Forrás felülírása",
|
||||||
"dontShowAgain": "Ne mutassa ezt újra",
|
"dontShowAgain": "Ne jelenítse meg ezt többé",
|
||||||
"dontShowTrackOnlyWarnings": "Ne jelenítsen meg 'Csak nyomon követés' figyelmeztetést",
|
"dontShowTrackOnlyWarnings": "Ne jelenítse meg a „Csak nyomonkövetés” figyelmeztetést",
|
||||||
"dontShowAPKOriginWarnings": "Ne jelenítsen meg az APK eredetére vonatkozó figyelmeztetéseket",
|
"dontShowAPKOriginWarnings": "Ne jelenítse meg az APK eredetére vonatkozó figyelmeztetéseket",
|
||||||
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített appokat az App nézet aljára",
|
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített alkalmazásokat az alkalmazásnézet aljára",
|
||||||
"gitlabPATLabel": "GitLab személyes hozzáférési token",
|
"gitlabPATLabel": "GitLab személyes hozzáférési token",
|
||||||
"about": "Rólunk",
|
"about": "Névjegy",
|
||||||
"requiresCredentialsInSettings": "{}: Ehhez további hitelesítő adatokra van szükség (a Beállításokban)",
|
"requiresCredentialsInSettings": "A(z) {} alkalmazásnak további hitelesítő adatokra van szüksége (a beállításokban)",
|
||||||
"checkOnStart": "Egyszer az alkalmazás indításakor is",
|
"checkOnStart": "Frissítések keresése indításkor",
|
||||||
"tryInferAppIdFromCode": "Próbálja kikövetkeztetni az app azonosítót a forráskódból",
|
"tryInferAppIdFromCode": "Próbálja meg kikövetkeztetni az alkalmazás azonosítóját a forráskódból",
|
||||||
"removeOnExternalUninstall": "A külsőleg eltávolított appok auto. eltávolítása",
|
"removeOnExternalUninstall": "A külsőleg eltávolított alkalmazások automatikus eltávolítása",
|
||||||
"pickHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
|
"pickHighestVersionCode": "A legmagasabb verziószámú APK automatikus kiválasztása",
|
||||||
"checkUpdateOnDetailPage": "Frissítések keresése az app részleteit tartalmazó oldal megnyitásakor",
|
"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",
|
"disablePageTransitions": "Lap áttűnési animációk letiltása",
|
||||||
"reversePageTransitions": "Fordított lap áttűnési animációk",
|
"reversePageTransitions": "Fordított lap áttűnési animációk",
|
||||||
"minStarCount": "Minimális csillag szám",
|
"minStarCount": "Minimális csillagozási szám",
|
||||||
"addInfoBelow": "Adja hozzá ezt az infót alább.",
|
"addInfoBelow": "Adja hozzá ezt az információt alább.",
|
||||||
"addInfoInSettings": "Adja hozzá ezt az infót a Beállításokban.",
|
"addInfoInSettings": "Adja hozzá ezt az információt a beállításokban.",
|
||||||
"githubSourceNote": "A GitHub sebességkorlátozás elkerülhető API-kulcs használatával.",
|
"githubSourceNote": "A GitHub/GitLab lekérdezés-korlátozás elkerülhető egy API-kulcs használatával.",
|
||||||
"sortByLastLinkSegment": "Rendezés csak a link utolsó szegmense szerint",
|
"sortByLastLinkSegment": "Rendezés csak a hivatkozás utolsó szakasza szerint",
|
||||||
"filterReleaseNotesByRegEx": "Kiadási megjegyzések szűrése reguláris kifejezéssel",
|
"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$')",
|
"customLinkFilterRegex": "Egyéni APK-hivatkozásszűrő reguláris kifejezéssel (Alapértelmezett „.apk$”)",
|
||||||
"appsPossiblyUpdated": "App frissítési kísérlet",
|
"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",
|
"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 {}.",
|
"xWasPossiblyUpdatedToY": "A(z) {} frissülhetett a következőre: {}.",
|
||||||
"enableBackgroundUpdates": "Frissítések a háttérben",
|
"enableBackgroundUpdates": "Háttérfrissítések engedélyezése",
|
||||||
"backgroundUpdateReqsExplanation": "Előfordulhat, hogy nem minden appnál lehetséges a háttérbeli frissítés.",
|
"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.",
|
"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",
|
"verifyLatestTag": "Ellenőrizze a „legújabb” címkét",
|
||||||
"intermediateLinkRegex": "Szűrés egy 'köztes' látogatási linkre",
|
"intermediateLinkRegex": "Szűrő egy „köztes” hivatkozás felkereséséhez",
|
||||||
"filterByLinkText": "A hivatkozások szűrése linkszöveg alapján",
|
"filterByLinkText": "Hivatkozások szűrése hivatkozásszöveg alapján",
|
||||||
"intermediateLinkNotFound": "Köztes link nem található",
|
"intermediateLinkNotFound": "Köztes hivatkozás nem található",
|
||||||
"intermediateLink": "Köztes link",
|
"intermediateLink": "Köztes hivatkozás",
|
||||||
"exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)",
|
"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",
|
"bgUpdatesOnWiFiOnly": "A háttérben futó frissítések letiltása, ha nincs Wi-Fi",
|
||||||
"autoSelectHighestVersionCode": "A legmagasabb verziószámú APK auto. kiválasztása",
|
"autoSelectHighestVersionCode": "A legmagasabb verziószámú APK automatikus kiválasztása",
|
||||||
"versionExtractionRegEx": "Verzió kibontása reguláris kifejezéssel",
|
"versionExtractionRegEx": "Verziókarakterlánc-kivonatolása reguláris kifejezéssel",
|
||||||
"trimVersionString": "Trim Version String RegEx-szel",
|
"trimVersionString": "Verziókarakterlánc levágása reguláris kifejezéssel",
|
||||||
"matchGroupToUseForX": "A \"{}\" csoporthoz használandó csoport egyeztetése",
|
"matchGroupToUseForX": "A(z) „{}” esetén használandó csoport egyeztetése",
|
||||||
"matchGroupToUse": "Párosítsa a csoportot a használathoz",
|
"matchGroupToUse": "Verziókarakterlánc-kivonatoláshoz használandó csoport reguláris kifejezéssel való egyeztetése",
|
||||||
"highlightTouchTargets": "Emelje ki a kevésbé nyilvánvaló érintési célokat",
|
"highlightTouchTargets": "A kevésbé nyilvánvaló érintési pontok kiemelése",
|
||||||
"pickExportDir": "Válassza az Exportálási könyvtárat",
|
"pickExportDir": "Válassza ki a könyvtárat, ahová exportálni szeretne",
|
||||||
"autoExportOnChanges": "Auto-exportálás a változások után",
|
"autoExportOnChanges": "Automatikus exportálás a változások után",
|
||||||
"includeSettings": "Tartalmazza a beállításokat",
|
"includeSettings": "Tartalmazza a beállításokat",
|
||||||
"filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel",
|
"filterVersionsByRegEx": "Verziók szűrése reguláris kifejezéssel",
|
||||||
"trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t",
|
"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",
|
"dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése",
|
||||||
"reverseSort": "Fordított rendezés",
|
"reverseSort": "Fordított elrendezés",
|
||||||
"takeFirstLink": "Vegye az első linket",
|
"takeFirstLink": "Vegye az első hivatkozást",
|
||||||
"skipSort": "A válogatás kihagyása",
|
"skipSort": "Rendezés kihagyása",
|
||||||
"debugMenu": "Hibakereső menü",
|
"debugMenu": "Hibakereső menü",
|
||||||
"bgTaskStarted": "A háttérfeladat elindult – ellenőrizze a naplókat.",
|
"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",
|
"runBgCheckNow": "Frissítések keresése a háttérben",
|
||||||
"versionExtractWholePage": "Alkalmazza a Version Extraction Regex-et az egész oldalra",
|
"versionExtractWholePage": "„Verziókarakterlánc-kivonatolása reguláris kifejezéssel” alkalmazása az egész oldalra",
|
||||||
"installing": "Telepítés",
|
"installing": "Telepítés",
|
||||||
"skipUpdateNotifications": "A frissítési értesítések kihagyása",
|
"skipUpdateNotifications": "A frissítési értesítések kihagyása",
|
||||||
"updatesAvailableNotifChannel": "Frissítések érhetők el",
|
"updatesAvailableNotifChannel": "Frissítések érhetők el",
|
||||||
"appsUpdatedNotifChannel": "Alkalmazások frissítve",
|
"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",
|
"errorCheckingUpdatesNotifChannel": "Hiba a frissítések keresésekor",
|
||||||
"appsRemovedNotifChannel": "Alkalmazások eltávolítva",
|
"appsRemovedNotifChannel": "Eltávolított alkalmazások",
|
||||||
"downloadingXNotifChannel": "{} letöltés",
|
"downloadingXNotifChannel": "A(z) {} letöltése",
|
||||||
"completeAppInstallationNotifChannel": "Teljes app telepítés",
|
"completeAppInstallationNotifChannel": "Teljes alkalmazás telepítés",
|
||||||
"checkingForUpdatesNotifChannel": "Frissítések keresése",
|
"checkingForUpdatesNotifChannel": "Frissítések keresése",
|
||||||
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak követhető appokat ellenőrizze frissítésekért",
|
"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 URL-eket",
|
"supportFixedAPKURL": "Támogatja a rögzített APK webcímeket",
|
||||||
"selectX": "Kiválaszt {}",
|
"selectX": "{} kiválasztása",
|
||||||
"parallelDownloads": "Párhuzamos letöltéseket enged",
|
"parallelDownloads": "Párhuzamos letöltések engedélyezése",
|
||||||
"useShizuku": "Használja Shizuku vagy Sui telepítéséhez",
|
"useShizuku": "Shizuku vagy Sui használata a telepítéshez",
|
||||||
"shizukuBinderNotFound": "A Shizuku nem fut",
|
"shizukuBinderNotFound": "A Shizuku szolgáltatás nem fut",
|
||||||
"shizukuOld": "Régi Shizuku verzió (<11) - frissítsd!",
|
"shizukuOld": "Régi Shizuku verzió (<11) - frissítse",
|
||||||
"shizukuOldAndroidWithADB": "Shizuku fut Android < 8.1 ADB-vel - frissítse az Androidot vagy használja a Sui-t helyette",
|
"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 Play-t telepítési forrásként (ha Shizuku-t használ)",
|
"shizukuPretendToBeGooglePlay": "Állítsa be a Google Playt telepítési forrásként (ha Shizukut használ)",
|
||||||
"useSystemFont": "Használja a rendszer betűtípusát",
|
"useSystemFont": "A rendszer betűtípusának használata",
|
||||||
"useVersionCodeAsOSVersion": "Az app verziókód használata a rendszer által észlelt verzióként",
|
"useVersionCodeAsOSVersion": "Az alkalmazás verziókódjának használata a rendszer által észlelt verzióként",
|
||||||
"requestHeader": "Kérelem fejléc",
|
"requestHeader": "Kérelemfejléc",
|
||||||
"useLatestAssetDateAsReleaseDate": "Használja a legújabb tartalomfeltöltést megjelenési dátumként",
|
"useLatestAssetDateAsReleaseDate": "A kiadás dátumaként használja a legutóbbi csomagfeltöltést",
|
||||||
"defaultPseudoVersioningMethod": "Alapértelmezett álverziós módszer",
|
"defaultPseudoVersioningMethod": "Alapértelmezett pszeudoverziós módszer",
|
||||||
"partialAPKHash": "Részleges APK Hash",
|
"partialAPKHash": "Részleges APK hasító értéke",
|
||||||
"APKLinkHash": "APK Link Hash",
|
"APKLinkHash": "APK hivatkozás hasító értéke",
|
||||||
"directAPKLink": "Közvetlen APK Link",
|
"directAPKLink": "Közvetlen APK hivatkozás",
|
||||||
"pseudoVersionInUse": "Egy álverzió van használatban",
|
"pseudoVersionInUse": "Egy pszeudoverzió van használatban",
|
||||||
"installed": "Telepített",
|
"installed": "Telepített",
|
||||||
"latest": "Legújabb",
|
"latest": "Legújabb",
|
||||||
"invertRegEx": "Invertált reguláris kifejezés",
|
"invertRegEx": "Reguláris kifejezés invertálása",
|
||||||
"note": "Megjegyzé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.",
|
"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)",
|
"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ő)",
|
"beforeNewInstallsShareToAppVerifier": "Új alkalmazások megosztása az AppVerifierrel (ha elérhető)",
|
||||||
"appVerifierInstructionToast": "Ossza meg az AppVerifierrel, majd térjen vissza ide, ha kész.",
|
"appVerifierInstructionToast": "Ossza meg az AppVerifierrel, majd térjen vissza ide, ha kész.",
|
||||||
"wiki": "Súgó/Wiki",
|
"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": "Nem biztonságos HTTP-kérések engedélyezése",
|
||||||
|
"stayOneVersionBehind": "Maradjon egy verzióval a legfrissebb mögött",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Eltávolítja az alkalmazást?",
|
"one": "Eltávolítja az alkalmazást?",
|
||||||
"other": "Eltávolítja az alkalmazásokat?"
|
"other": "Eltávolítja az alkalmazásokat?"
|
||||||
},
|
},
|
||||||
"tooManyRequestsTryAgainInMinutes": {
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
"one": "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 (korlátozott arány) – próbálja újra {} perc múlva"
|
"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": {
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
"one": "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": "A háttérfrissítések ellenőrzése {}-t észlelt, {} perc múlva ütemezi az újrapróbálkozást"
|
"other": "Frissítések ellenőrzése a háttérben a következőt észlelte: {} - Újrapróbálkozás: {} perc múlva"
|
||||||
},
|
},
|
||||||
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
"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",
|
"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": "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": "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": {
|
"apps": {
|
||||||
"one": "{} app",
|
"one": "{} alkalmazás",
|
||||||
"other": "{} app"
|
"other": "{} alkalmazás"
|
||||||
},
|
},
|
||||||
"url": {
|
"url": {
|
||||||
"one": "{} URL",
|
"one": "{} webcím",
|
||||||
"other": "{} URL"
|
"other": "{} webcím"
|
||||||
},
|
},
|
||||||
"minute": {
|
"minute": {
|
||||||
"one": "{} perc",
|
"one": "{} perc",
|
||||||
@@ -351,27 +354,27 @@
|
|||||||
"other": "{} nap"
|
"other": "{} nap"
|
||||||
},
|
},
|
||||||
"clearedNLogsBeforeXAfterY": {
|
"clearedNLogsBeforeXAfterY": {
|
||||||
"one": "{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 (előtte = {előtte}, utána = {utána})"
|
"other": "{n} napló törölve lett ({after} után és {before} előtt)"
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesAvailable": {
|
"xAndNMoreUpdatesAvailable": {
|
||||||
"one": "A(z) {} és 1 további alkalmazás frissítéseket kapott.",
|
"one": "A(z) {} és 1 további alkalmazás frissítést kapott.",
|
||||||
"other": "{} és {} további alkalmazás frissítéseket kapott."
|
"other": "A(z) {} és {} további alkalmazás frissítést kapott."
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesInstalled": {
|
"xAndNMoreUpdatesInstalled": {
|
||||||
"one": "A(z) {} és 1 további alkalmazás frissítve.",
|
"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": {
|
"xAndNMoreUpdatesFailed": {
|
||||||
"one": "Nem sikerült frissíteni {} és még 1 alkalmazást.",
|
"one": "Nem sikerült frissíteni a következőt: {}, valamint 1 további alkalmazást.",
|
||||||
"other": "Nem sikerült frissíteni {} és {} további alkalmazásokat."
|
"other": "Nem sikerült frissíteni a következőt: {}, valamint {} további alkalmazást."
|
||||||
},
|
},
|
||||||
"xAndNMoreUpdatesPossiblyInstalled": {
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
"one": "{} és 1 további alkalmazás is frissült.",
|
"one": "A(z) {}, valamint 1 további alkalmazás sikeresen frissítve.",
|
||||||
"other": "{} és {} további alkalmazás is frissült."
|
"other": "A(z) {}, valamint {} további alkalmazás sikeresen frissítve."
|
||||||
},
|
},
|
||||||
"apk": {
|
"apk": {
|
||||||
"one": "{} APK",
|
"one": "{} APK",
|
||||||
"other": "{} APK-k"
|
"other": "{} APK"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
380
assets/translations/id.json
Normal file
380
assets/translations/id.json
Normal file
@@ -0,0 +1,380 @@
|
|||||||
|
{
|
||||||
|
"invalidURLForSource": "Bukan URL aplikasi {} yang valid",
|
||||||
|
"noReleaseFound": "Tidak dapat menemukan rilis yang sesuai",
|
||||||
|
"noVersionFound": "Tidak dapat memastikan versi rilis yang sesuai",
|
||||||
|
"urlMatchesNoSource": "URL tidak sesuai dengan sumber yang diketahui",
|
||||||
|
"cantInstallOlderVersion": "Tidak dapat memasang versi aplikasi yang lebih lama",
|
||||||
|
"appIdMismatch": "ID paket yang diunduh tidak sama dengan ID aplikasi yang ada",
|
||||||
|
"functionNotImplemented": "Kelas ini belum mengimplementasikan fungsi ini",
|
||||||
|
"placeholder": "Tempat penampung",
|
||||||
|
"someErrors": "Terjadi beberapa kesalahan",
|
||||||
|
"unexpectedError": "Kesalahan tidak terduga",
|
||||||
|
"ok": "Oke",
|
||||||
|
"and": "dan",
|
||||||
|
"githubPATLabel": "Token Akses Pribadi GitHub (tingkatkan batasan tarif)",
|
||||||
|
"includePrereleases": "Sertakan pra-rilis",
|
||||||
|
"fallbackToOlderReleases": "Alternatif kembali ke rilis lama",
|
||||||
|
"filterReleaseTitlesByRegEx": "Filter judul rilis dengan ekspresi reguler",
|
||||||
|
"invalidRegEx": "Ekspresi reguler tidak valid",
|
||||||
|
"noDescription": "Tidak ada deskripsi",
|
||||||
|
"cancel": "Batal",
|
||||||
|
"continue": "Lanjut",
|
||||||
|
"requiredInBrackets": "(Diperlukan)",
|
||||||
|
"dropdownNoOptsError": "KESALAHAN: DROPDOWN HARUS MEMILIKI SETIDAKNYA SATU OPSI",
|
||||||
|
"colour": "Warna",
|
||||||
|
"standard": "Standar",
|
||||||
|
"custom": "Kustom",
|
||||||
|
"useMaterialYou": "Gunakan Material You",
|
||||||
|
"githubStarredRepos": "Repositori berbintang GitHub",
|
||||||
|
"uname": "Nama pengguna",
|
||||||
|
"wrongArgNum": "Salah memberikan jumlah argumen",
|
||||||
|
"xIsTrackOnly": "{} adalah Pelacakan Saja",
|
||||||
|
"source": "Sumber",
|
||||||
|
"app": "Aplikasi",
|
||||||
|
"appsFromSourceAreTrackOnly": "Aplikasi dari sumber ini hanya untuk 'Pelacakan Saja'.",
|
||||||
|
"youPickedTrackOnly": "Anda telah memilih opsi Pelacakan Saja.",
|
||||||
|
"trackOnlyAppDescription": "Aplikasi akan dilacak untuk pembaruan, tetapi Obtainium tidak akan dapat mengunduh atau memasangnya.",
|
||||||
|
"cancelled": "Dibatalkan",
|
||||||
|
"appAlreadyAdded": "Aplikasi sudah ditambahkan",
|
||||||
|
"alreadyUpToDateQuestion": "Aplikasi sudah yang terbaru?",
|
||||||
|
"addApp": "Tambah aplikasi",
|
||||||
|
"appSourceURL": "Tambah sumber URL",
|
||||||
|
"error": "Kesalahan",
|
||||||
|
"add": "Tambah",
|
||||||
|
"searchSomeSourcesLabel": "Cari (beberapa sumber saja)",
|
||||||
|
"search": "Cari",
|
||||||
|
"additionalOptsFor": "Opsi tambahan untuk {}",
|
||||||
|
"supportedSources": "Sumber yang didukung",
|
||||||
|
"trackOnlyInBrackets": "(Pelacakan Saja)",
|
||||||
|
"searchableInBrackets": "(Dapat dicari)",
|
||||||
|
"appsString": "Aplikasi",
|
||||||
|
"noApps": "Tidak ada aplikasi",
|
||||||
|
"noAppsForFilter": "Tidak ada aplikasi untuk difilter",
|
||||||
|
"byX": "Oleh {}",
|
||||||
|
"percentProgress": "Perkembangan: {}%",
|
||||||
|
"pleaseWait": "Harap tunggu",
|
||||||
|
"updateAvailable": "Pembaruan tersedia",
|
||||||
|
"notInstalled": "Tidak terpasang",
|
||||||
|
"pseudoVersion": "versi semu",
|
||||||
|
"selectAll": "Pilih semua",
|
||||||
|
"deselectX": "Batal pilih {}",
|
||||||
|
"xWillBeRemovedButRemainInstalled": "{} akan dihapus dari Obtainium tetapi tetap terpasang di perangkat.",
|
||||||
|
"removeSelectedAppsQuestion": "Hapus aplikasi terpilih?",
|
||||||
|
"removeSelectedApps": "Hapus aplikasi terpilih",
|
||||||
|
"updateX": "Perbarui {}",
|
||||||
|
"installX": "Pasang {}",
|
||||||
|
"markXTrackOnlyAsUpdated": "Tandai {}\n(Pelacakan Saja)\nsudah diperbarui",
|
||||||
|
"changeX": "Ubah {}",
|
||||||
|
"installUpdateApps": "Pasang/perbarui aplikasi",
|
||||||
|
"installUpdateSelectedApps": "Pasang/perbarui aplikasi terpilih",
|
||||||
|
"markXSelectedAppsAsUpdated": "Tandai {} aplikasi terpilih sudah diperbarui?",
|
||||||
|
"no": "Tidak",
|
||||||
|
"yes": "Ya",
|
||||||
|
"markSelectedAppsUpdated": "Tandai aplikasi terpilih sudah diperbarui",
|
||||||
|
"pinToTop": "Sematkan ke atas",
|
||||||
|
"unpinFromTop": "Lepaskan semat dari atas",
|
||||||
|
"resetInstallStatusForSelectedAppsQuestion": "Atur ulang status pemasangan untuk aplikasi terpilih?",
|
||||||
|
"installStatusOfXWillBeResetExplanation": "Status pemasangan dari aplikasi terpilih akan diatur ulang.\n\nHal ini bisa membantu saat versi aplikasi yang ditampilkan di Obtainium salah akibat pembaruan yang gagal atau masalah lainnya.",
|
||||||
|
"customLinkMessage": "Tautan ini berfungsi pada perangkat yang terpasang Obtainium",
|
||||||
|
"shareAppConfigLinks": "Bagikan konfigurasi aplikasi sebagai tautan HTML",
|
||||||
|
"shareSelectedAppURLs": "Bagikan URL aplikasi terpilih",
|
||||||
|
"resetInstallStatus": "Atur ulang status pemasangan",
|
||||||
|
"more": "Lebih banyak",
|
||||||
|
"removeOutdatedFilter": "Hapus filter aplikasi yang usang",
|
||||||
|
"showOutdatedOnly": "Tampilkan aplikasi yang usang saja",
|
||||||
|
"filter": "Filter",
|
||||||
|
"filterApps": "Filter aplikasi",
|
||||||
|
"appName": "Nama aplikasi",
|
||||||
|
"author": "Pencipta",
|
||||||
|
"upToDateApps": "Aplikasi terbaru",
|
||||||
|
"nonInstalledApps": "Aplikasi tidak terpasang",
|
||||||
|
"importExport": "Impor/ekspor",
|
||||||
|
"settings": "Pengaturan",
|
||||||
|
"exportedTo": "Diekspor ke {}",
|
||||||
|
"obtainiumExport": "Ekspor Obtainium",
|
||||||
|
"invalidInput": "Masukan tidak valid",
|
||||||
|
"importedX": "{} diimpor",
|
||||||
|
"obtainiumImport": "Impor Obtainium",
|
||||||
|
"importFromURLList": "Impor dari daftar URL",
|
||||||
|
"searchQuery": "Cari Kueri",
|
||||||
|
"appURLList": "Daftar URL aplikasi",
|
||||||
|
"line": "Baris",
|
||||||
|
"searchX": "Cari {}",
|
||||||
|
"noResults": "Tidak ada hasil yang ditemukan",
|
||||||
|
"importX": "Impor {}",
|
||||||
|
"importedAppsIdDisclaimer": "Aplikasi yang diimpor mungkin secara salah ditampilkan sebagai \"Tidak terpasang\".\nUntuk memperbaikinya, lakukan pemasangan ulang melalui Obtainium.\nHal ini seharusnya tidak mempengaruhi data aplikasi.\n\nHanya mempengaruhi metode impor URL dan pihak ketiga.",
|
||||||
|
"importErrors": "Kesalahan impor",
|
||||||
|
"importedXOfYApps": "{} dari {} aplikasi diimpor.",
|
||||||
|
"followingURLsHadErrors": "URL berikut mengalami kesalahan:",
|
||||||
|
"selectURL": "Pilih URL",
|
||||||
|
"selectURLs": "Pilih URL",
|
||||||
|
"pick": "Pilih",
|
||||||
|
"theme": "Tema",
|
||||||
|
"dark": "Gelap",
|
||||||
|
"light": "Terang",
|
||||||
|
"followSystem": "Mengikuti sistem",
|
||||||
|
"followSystemThemeExplanation": "Tema mengikuti sistem hanya mungkin dengan menggunakan aplikasi pihak ketiga",
|
||||||
|
"useBlackTheme": "Gunakan tema hitam pekat",
|
||||||
|
"appSortBy": "Penyortiran aplikasi berdasarkan",
|
||||||
|
"authorName": "Pencipta/nama",
|
||||||
|
"nameAuthor": "Nama/pencipta",
|
||||||
|
"asAdded": "Tanggal ditambahkan",
|
||||||
|
"appSortOrder": "Urutan penyortiran aplikasi",
|
||||||
|
"ascending": "Menaik",
|
||||||
|
"descending": "Menurun",
|
||||||
|
"bgUpdateCheckInterval": "Interval pemeriksaan pembaruan di latar belakang",
|
||||||
|
"neverManualOnly": "Tidak pernah - manual saja",
|
||||||
|
"appearance": "Tampilan",
|
||||||
|
"showWebInAppView": "Tampilkan halaman web sumber dalam tampilan aplikasi",
|
||||||
|
"pinUpdates": "Sematkan pembaruan ke atas tampilan aplikasi",
|
||||||
|
"updates": "Pembaruan",
|
||||||
|
"sourceSpecific": "Sumber spesifik",
|
||||||
|
"appSource": "Sumber aplikasi",
|
||||||
|
"noLogs": "Tidak ada catatan",
|
||||||
|
"appLogs": "Catatan aplikasi",
|
||||||
|
"close": "Tutup",
|
||||||
|
"share": "Bagikan",
|
||||||
|
"appNotFound": "Aplikasi tidak ditemukan",
|
||||||
|
"obtainiumExportHyphenatedLowercase": "ekspor-obtainium",
|
||||||
|
"pickAnAPK": "Pilih APK",
|
||||||
|
"appHasMoreThanOnePackage": "{} memiliki lebih dari satu paket:",
|
||||||
|
"deviceSupportsXArch": "Perangkat Anda mendukung arsitektur CPU {}.",
|
||||||
|
"deviceSupportsFollowingArchs": "Perangkat anda mendukung arsitektur CPU berikut:",
|
||||||
|
"warning": "Peringatan",
|
||||||
|
"sourceIsXButPackageFromYPrompt": "Sumber aplikasinya adalah '{}' tetapi paket rilisnya berasal dari '{}'. Lanjutkan?",
|
||||||
|
"updatesAvailable": "Pembaruan tersedia",
|
||||||
|
"updatesAvailableNotifDescription": "Memberi tahu pengguna bahwa pembaruan tersedia untuk aplikasi yang dilacak oleh Obtainium",
|
||||||
|
"noNewUpdates": "Tidak ada pembaruan baru.",
|
||||||
|
"xHasAnUpdate": "{} memiliki pembaruan.",
|
||||||
|
"appsUpdated": "Aplikasi diperbarui",
|
||||||
|
"appsNotUpdated": "Gagal memperbarui aplikasi",
|
||||||
|
"appsUpdatedNotifDescription": "Memberi tahu pengguna bahwa pembaruan terhadap aplikasi diterapkan di latar belakang",
|
||||||
|
"xWasUpdatedToY": "{} telah diperbarui ke {}.",
|
||||||
|
"xWasNotUpdatedToY": "Gagal memperbarui {} ke {}.",
|
||||||
|
"errorCheckingUpdates": "Kesalahan dalam memeriksa pembaruan",
|
||||||
|
"errorCheckingUpdatesNotifDescription": "Notifikasi yang ditampilkan saat pemeriksaan pembaruan latar belakang gagal",
|
||||||
|
"appsRemoved": "Aplikasi dihapus",
|
||||||
|
"appsRemovedNotifDescription": "Memberi tahu pengguna bahwa aplikasi dihapus karena kesalahan saat memuatnya",
|
||||||
|
"xWasRemovedDueToErrorY": "{} dihapus karena kesalahan berikut: {}",
|
||||||
|
"completeAppInstallation": "Selesaikan pemasangan aplikasi",
|
||||||
|
"obtainiumMustBeOpenToInstallApps": "Obtainium harus terbuka untuk memasang aplikasi",
|
||||||
|
"completeAppInstallationNotifDescription": "Meminta pengguna kembali ke Obtainium untuk menyelesaikan pemasangan aplikasi",
|
||||||
|
"checkingForUpdates": "Memeriksa pembaruan",
|
||||||
|
"checkingForUpdatesNotifDescription": "Notifikasi sementara yang ditampilkan saat memeriksa pembaruan",
|
||||||
|
"pleaseAllowInstallPerm": "Harap izinkan Obtainium untuk memasang aplikasi",
|
||||||
|
"trackOnly": "Pelacakan Saja",
|
||||||
|
"errorWithHttpStatusCode": "Kesalahan {}",
|
||||||
|
"versionCorrectionDisabled": "Koreksi versi dinonaktifkan (sepertinya plugin tidak berfungsi)",
|
||||||
|
"unknown": "Tidak diketahui",
|
||||||
|
"none": "Tidak ada",
|
||||||
|
"never": "Tidak pernah",
|
||||||
|
"latestVersionX": "Terbaru: {}",
|
||||||
|
"installedVersionX": "Terpasang: {}",
|
||||||
|
"lastUpdateCheckX": "Terakhir memeriksa pembaruan: {}",
|
||||||
|
"remove": "Hapus",
|
||||||
|
"yesMarkUpdated": "Ya, tandai bahwa sudah diperbarui",
|
||||||
|
"fdroid": "F-Droid Resmi",
|
||||||
|
"appIdOrName": "ID atau nama aplikasi",
|
||||||
|
"appId": "ID aplikasi",
|
||||||
|
"appWithIdOrNameNotFound": "Tidak ada aplikasi yang ditemukan dengan ID atau nama tersebut",
|
||||||
|
"reposHaveMultipleApps": "Repositori dapat berisi beberapa aplikasi",
|
||||||
|
"fdroidThirdPartyRepo": "Repositori pihak ketiga F-Droid",
|
||||||
|
"steamMobile": "Steam Mobile",
|
||||||
|
"steamChat": "Obrolan Steam",
|
||||||
|
"install": "Pasang",
|
||||||
|
"markInstalled": "Tandai terpasang",
|
||||||
|
"update": "perbarui",
|
||||||
|
"markUpdated": "Tandai diperbarui",
|
||||||
|
"additionalOptions": "Opsi tambahan",
|
||||||
|
"disableVersionDetection": "Nonaktifkan pendeteksi versi",
|
||||||
|
"noVersionDetectionExplanation": "Opsi ini hanya boleh digunakan untuk aplikasi dengan pendeteksi versi yang tidak berfungsi dengan benar.",
|
||||||
|
"downloadingX": "Mengunduh {}",
|
||||||
|
"downloadX": "Unduh {}",
|
||||||
|
"downloadedX": "{} diunduh",
|
||||||
|
"releaseAsset": "Aset rilis",
|
||||||
|
"downloadNotifDescription": "Memberi tahu pengguna perkembangan dalam mengunduh aplikasi",
|
||||||
|
"noAPKFound": "Tidak ada APK ditemukan",
|
||||||
|
"noVersionDetection": "Tidak ada pendeteksi versi",
|
||||||
|
"categorize": "Kategorikan",
|
||||||
|
"categories": "Kategori",
|
||||||
|
"category": "Kategori",
|
||||||
|
"noCategory": "Tidak ada kategori",
|
||||||
|
"noCategories": "Tidak ada kategori",
|
||||||
|
"deleteCategoriesQuestion": "Hapus kategori?",
|
||||||
|
"categoryDeleteWarning": "Semua aplikasi dalam kategori yang dihapus akan diatur sebagai tidak terkategori.",
|
||||||
|
"addCategory": "Tambah kategori",
|
||||||
|
"label": "Label",
|
||||||
|
"language": "Bahasa",
|
||||||
|
"copiedToClipboard": "Disalin ke papan klip",
|
||||||
|
"storagePermissionDenied": "Izin penyimpanan ditolak",
|
||||||
|
"selectedCategorizeWarning": "Ini akan mengganti pengaturan kategori yang ada untuk aplikasi terpilih.",
|
||||||
|
"filterAPKsByRegEx": "Filter APK dengan ekspresi reguler",
|
||||||
|
"removeFromObtainium": "Hapus dari Obtainium",
|
||||||
|
"uninstallFromDevice": "Copot pemasangan dari perangkat",
|
||||||
|
"onlyWorksWithNonVersionDetectApps": "Hanya bekerja untuk aplikasi dengan pendeteksi versi yang nonaktif.",
|
||||||
|
"releaseDateAsVersion": "Gunakan tanggal rilis sebagai versi string",
|
||||||
|
"releaseTitleAsVersion": "Gunakan judul rilis sebagai string versi",
|
||||||
|
"releaseDateAsVersionExplanation": "Opsi ini hanya boleh digunakan untuk aplikasi dengan pendeteksi versi yang tidak berfungsi dengan benar, tetapi tanggal rilisnya tersedia.",
|
||||||
|
"changes": "Perubahan",
|
||||||
|
"releaseDate": "Tanggal rilis",
|
||||||
|
"importFromURLsInFile": "Impor dari URL dalam berkas (seperti OPML)",
|
||||||
|
"versionDetectionExplanation": "Sesuaikan string versi dengan versi yang terdeteksi dari OS",
|
||||||
|
"versionDetection": "Pendeteksi versi",
|
||||||
|
"standardVersionDetection": "Pendeteksi versi standar",
|
||||||
|
"groupByCategory": "Kelompokkan berdasarkan kategori",
|
||||||
|
"autoApkFilterByArch": "Coba filter APK berdasarkan arsitektur CPU jika memungkinkan",
|
||||||
|
"overrideSource": "Ganti sumber",
|
||||||
|
"dontShowAgain": "Jangan tampilkan lagi",
|
||||||
|
"dontShowTrackOnlyWarnings": "Jangan tampilkan peringatan 'Pelacakan Saja'",
|
||||||
|
"dontShowAPKOriginWarnings": "Jangan tampilkan peringatan asal APK",
|
||||||
|
"moveNonInstalledAppsToBottom": "Pindahkan aplikasi tidak terpasang ke bawah tampilan aplikasi",
|
||||||
|
"gitlabPATLabel": "Token Akses Pribadi GitLab",
|
||||||
|
"about": "Tentang",
|
||||||
|
"requiresCredentialsInSettings": "{} memerlukan kredensial tambahan (dalam pengaturan)",
|
||||||
|
"checkOnStart": "Periksa pembaruan saat proses memulai",
|
||||||
|
"tryInferAppIdFromCode": "Coba untuk menebak ID aplikasi dari kode sumber",
|
||||||
|
"removeOnExternalUninstall": "Hapus otomatis aplikasi yang dicopot pemasangannya dari luar",
|
||||||
|
"pickHighestVersionCode": "Pilih otomatis APK dengan versi kode tertinggi",
|
||||||
|
"checkUpdateOnDetailPage": "Periksa pembaruan saat membuka halaman detail aplikasi",
|
||||||
|
"disablePageTransitions": "Nonaktifkan animasi transisi halaman",
|
||||||
|
"reversePageTransitions": "Animasi transisi halaman secara terbalik",
|
||||||
|
"minStarCount": "Jumlah bintang minimum",
|
||||||
|
"addInfoBelow": "Tambahkan info ini di bawah.",
|
||||||
|
"addInfoInSettings": "Tambahkan info ini di pengaturan.",
|
||||||
|
"githubSourceNote": "Pembatasan tarif pada GitHub dapat dihindari dengan menggunakan kunci API.",
|
||||||
|
"sortByLastLinkSegment": "Urutkan hanya berdasarkan segmen terakhir tautan",
|
||||||
|
"filterReleaseNotesByRegEx": "Filter catatan perilisan dengan ekspresi reguler",
|
||||||
|
"customLinkFilterRegex": "Filter tautan APK kustom dengan ekspresi reguler (Standar '.apk$')",
|
||||||
|
"appsPossiblyUpdated": "Pembaruan aplikasi dicoba",
|
||||||
|
"appsPossiblyUpdatedNotifDescription": "Memberi tahu pengguna bahwa pembaruan terhadap aplikasi berpotensi diterapkan di latar belakang",
|
||||||
|
"xWasPossiblyUpdatedToY": "{} mungkin telah diperbarui ke {}.",
|
||||||
|
"enableBackgroundUpdates": "Aktifkan pembaruan latar belakang",
|
||||||
|
"backgroundUpdateReqsExplanation": "Pembaruan latar belakang mungkin tidak dapat dilakukan untuk semua aplikasi.",
|
||||||
|
"backgroundUpdateLimitsExplanation": "Keberhasilan pemasangan di latar belakang hanya dapat ditentukan ketika Obtainium terbuka.",
|
||||||
|
"verifyLatestTag": "Verifikasi label 'terbaru'",
|
||||||
|
"intermediateLinkRegex": "Filter tautan 'perantara' untuk dikunjungi",
|
||||||
|
"filterByLinkText": "Filter tautan berdasarkan teks tautan",
|
||||||
|
"intermediateLinkNotFound": "Tautan perantara tidak ditemukan",
|
||||||
|
"intermediateLink": "Tautan perantara",
|
||||||
|
"exemptFromBackgroundUpdates": "Dikecualikan dari pembaruan latar belakang (jika diaktifkan)",
|
||||||
|
"bgUpdatesOnWiFiOnly": "Nonaktifkan pembaruan latar belakang saat tidak menggunakan WiFi",
|
||||||
|
"autoSelectHighestVersionCode": "Pilih otomatis APK dengan versi kode tertinggi",
|
||||||
|
"versionExtractionRegEx": "Reguler ekspresi terkait ekstraksi versi string",
|
||||||
|
"trimVersionString": "Potong versi string dengan reguler ekspresi",
|
||||||
|
"matchGroupToUseForX": "Cocokkan grup yang akan digunakan untuk \"{}\"",
|
||||||
|
"matchGroupToUse": "Cocokkan grup yang akan digunakan untuk reguler ekspresi terkait ekstraksi versi string",
|
||||||
|
"highlightTouchTargets": "Sorot target sentuh yang kurang jelas",
|
||||||
|
"pickExportDir": "Pilih direktori ekspor",
|
||||||
|
"autoExportOnChanges": "Otomatis ekspor terhadap perubahan",
|
||||||
|
"includeSettings": "Sertakan pengaturan",
|
||||||
|
"filterVersionsByRegEx": "Filter versi dengan ekspresi reguler",
|
||||||
|
"trySelectingSuggestedVersionCode": "Coba pilih APK dengan version kode yang disarankan",
|
||||||
|
"dontSortReleasesList": "Pertahankan urutan rilis dari API",
|
||||||
|
"reverseSort": "Penyortiran terbalik",
|
||||||
|
"takeFirstLink": "Ambil tautan pertama",
|
||||||
|
"skipSort": "Lewati penyortiran",
|
||||||
|
"debugMenu": "Menu debug",
|
||||||
|
"bgTaskStarted": "Tugas latar belakang dimulai - periksa catatan.",
|
||||||
|
"runBgCheckNow": "Jalankan pemeriksaan pembaruan latar belakang sekarang",
|
||||||
|
"versionExtractWholePage": "Terapkan reguler ekspresi terkait ekstraksi versi string ke seluruh halaman",
|
||||||
|
"installing": "Memasang",
|
||||||
|
"skipUpdateNotifications": "Lewati notifikasi pembaruan",
|
||||||
|
"updatesAvailableNotifChannel": "Pembaruan tersedia",
|
||||||
|
"appsUpdatedNotifChannel": "Aplikasi diperbarui",
|
||||||
|
"appsPossiblyUpdatedNotifChannel": "Pembaruan aplikasi dicoba",
|
||||||
|
"errorCheckingUpdatesNotifChannel": "Kesalahan dalam memeriksa pembaruan",
|
||||||
|
"appsRemovedNotifChannel": "Aplikasi dihapus",
|
||||||
|
"downloadingXNotifChannel": "Mengunduh {}",
|
||||||
|
"completeAppInstallationNotifChannel": "Selesaikan pemasangan aplikasi",
|
||||||
|
"checkingForUpdatesNotifChannel": "Memeriksa pembaruan",
|
||||||
|
"onlyCheckInstalledOrTrackOnlyApps": "Hanya periksa aplikasi yang dipasang dan ditandai 'Pelacakan Saja' untuk pembaruan",
|
||||||
|
"supportFixedAPKURL": "Mendukung URL APK tetap",
|
||||||
|
"selectX": "Pilih {}",
|
||||||
|
"parallelDownloads": "Izinkan mengunduh paralel",
|
||||||
|
"useShizuku": "Gunakan Shizuku atau Sui untuk memasang",
|
||||||
|
"shizukuBinderNotFound": "Layanan Shizuku tidak berjalan",
|
||||||
|
"shizukuOld": "Versi Shizuku lama (<11) - harap perbarui",
|
||||||
|
"shizukuOldAndroidWithADB": "Shizuku berjalan di Android < 8.1 dengan ADB - perbarui Android atau gunakan Sui sebagai gantinya",
|
||||||
|
"shizukuPretendToBeGooglePlay": "Atur Google Play sebagai sumber pemasangan (jika Shizuku digunakan)",
|
||||||
|
"useSystemFont": "Gunakan font sistem",
|
||||||
|
"useVersionCodeAsOSVersion": "Gunakan versi kode aplikasi sebagai versi yang terdeteksi OS",
|
||||||
|
"requestHeader": "Header permintaan",
|
||||||
|
"useLatestAssetDateAsReleaseDate": "Gunakan unggahan aset terbaru sebagai tanggal rilis",
|
||||||
|
"defaultPseudoVersioningMethod": "Metode versi semu standar",
|
||||||
|
"partialAPKHash": "Hash APK parsial",
|
||||||
|
"APKLinkHash": "Hash tautan APK",
|
||||||
|
"directAPKLink": "Tautan APK langsung",
|
||||||
|
"pseudoVersionInUse": "Versi semu sedang digunakan",
|
||||||
|
"installed": "Terpasang",
|
||||||
|
"latest": "Terbaru",
|
||||||
|
"invertRegEx": "Balikkan ekspresi reguler",
|
||||||
|
"note": "Catatan",
|
||||||
|
"selfHostedNote": "Dropdown \"{}\" bisa digunakan untuk menjangkau instansi yang dihosting sendiri/kustom dari sumber mana pun.",
|
||||||
|
"badDownload": "APK tidak dapat diurai (tidak kompatibel atau diunduh sebagian)",
|
||||||
|
"beforeNewInstallsShareToAppVerifier": "Bagikan aplikasi baru dengan AppVerifier (jika tersedia)",
|
||||||
|
"appVerifierInstructionToast": "Bagikan ke AppVerifier, lalu kembali ke sini jika sudah siap.",
|
||||||
|
"wiki": "Bantuan/Wiki",
|
||||||
|
"crowdsourcedConfigsLabel": "Konfigurasi aplikasi Crowdsourced (risiko penggunaan ditanggung sendiri)",
|
||||||
|
"allowInsecure": "Izinkan permintaan HTTP yang tidak aman",
|
||||||
|
"stayOneVersionBehind": "Tetap satu versi di belakang versi terbaru",
|
||||||
|
"removeAppQuestion": {
|
||||||
|
"one": "Hapus aplikasi?",
|
||||||
|
"other": "Hapus aplikasi?"
|
||||||
|
},
|
||||||
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
"one": "Terlalu banyak permintaan (tarif dibatasi) - coba lagi dalam {} menit",
|
||||||
|
"other": "Terlalu banyak permintaan (tarif dibatasi) - coba lagi dalam {} menit"
|
||||||
|
},
|
||||||
|
"bgUpdateGotErrorRetryInMinutes": {
|
||||||
|
"one": "Pemeriksaan pembaruan latar belakang menemui {}, akan menjadwalkan pemeriksaan ulang dalam {} menit",
|
||||||
|
"other": "Pemeriksaan pembaruan latar belakang menemui {}, akan menjadwalkan pemeriksaan ulang dalam {} menit"
|
||||||
|
},
|
||||||
|
"bgCheckFoundUpdatesWillNotifyIfNeeded": {
|
||||||
|
"one": "Pemeriksaan pembaruan latar belakang menemukan {} pembaruan - akan memberi tahu pengguna jika diperlukan",
|
||||||
|
"other": "Pemeriksaan pembaruan latar belakang menemukan {} pembaruan - akan memberi tahu pengguna jika diperlukan"
|
||||||
|
},
|
||||||
|
"apps": {
|
||||||
|
"one": "{} aplikasi",
|
||||||
|
"other": "{} aplikasi"
|
||||||
|
},
|
||||||
|
"url": {
|
||||||
|
"one": "{} URL",
|
||||||
|
"other": "{} URL"
|
||||||
|
},
|
||||||
|
"minute": {
|
||||||
|
"one": "{} menit",
|
||||||
|
"other": "{} menit"
|
||||||
|
},
|
||||||
|
"hour": {
|
||||||
|
"one": "{} jam",
|
||||||
|
"other": "{} jam"
|
||||||
|
},
|
||||||
|
"day": {
|
||||||
|
"one": "{} hari",
|
||||||
|
"other": "{} hari"
|
||||||
|
},
|
||||||
|
"clearedNLogsBeforeXAfterY": {
|
||||||
|
"one": "Menghapus {n} catatan (sebelum = {before}, setelah = {after})",
|
||||||
|
"other": "Menghapus {n} catatan (sebelum = {before}, setelah = {after})"
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesAvailable": {
|
||||||
|
"one": "{} dan 1 aplikasi lainnya memiliki pembaruan.",
|
||||||
|
"other": "{} dan {} aplikasi lainnya memiliki pembaruan."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesInstalled": {
|
||||||
|
"one": "{} dan 1 aplikasi lainnya telah diperbarui.",
|
||||||
|
"other": "{} dan {} aplikasi lainnya telah diperbarui."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesFailed": {
|
||||||
|
"one": "Gagal memperbarui {} dan 1 aplikasi lainnya.",
|
||||||
|
"other": "Gagal memperbarui {} dan {} aplikasi lainnya."
|
||||||
|
},
|
||||||
|
"xAndNMoreUpdatesPossiblyInstalled": {
|
||||||
|
"one": "{} dan 1 aplikasi lainnya mungkin telah diperbarui.",
|
||||||
|
"other": "{} dan {} aplikasi lainnya mungkin telah diperbarui."
|
||||||
|
},
|
||||||
|
"apk": {
|
||||||
|
"one": "{} APK",
|
||||||
|
"other": "{} APK"
|
||||||
|
}
|
||||||
|
}
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Disinstalla dal dispositivo",
|
"uninstallFromDevice": "Disinstalla dal dispositivo",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Funziona solo per le app con il rilevamento della versione disattivato.",
|
"onlyWorksWithNonVersionDetectApps": "Funziona solo per le app con il rilevamento della versione disattivato.",
|
||||||
"releaseDateAsVersion": "Usa data di rilascio come versione",
|
"releaseDateAsVersion": "Usa data di rilascio come versione",
|
||||||
|
"releaseTitleAsVersion": "Usa il titolo della versione come stringa di versione",
|
||||||
"releaseDateAsVersionExplanation": "Questa opzione dovrebbe essere usata solo per le app in cui il rilevamento della versione non funziona correttamente, ma è disponibile una data di rilascio.",
|
"releaseDateAsVersionExplanation": "Questa opzione dovrebbe essere usata solo per le app in cui il rilevamento della versione non funziona correttamente, ma è disponibile una data di rilascio.",
|
||||||
"changes": "Novità",
|
"changes": "Novità",
|
||||||
"releaseDate": "Data di rilascio",
|
"releaseDate": "Data di rilascio",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Condividete con AppVerifier, quindi tornate qui quando siete pronti.",
|
"appVerifierInstructionToast": "Condividete con AppVerifier, quindi tornate qui quando siete pronti.",
|
||||||
"wiki": "Aiuto/Wiki",
|
"wiki": "Aiuto/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Configurazioni di app in crowdsourcing (uso a proprio rischio)",
|
"crowdsourcedConfigsLabel": "Configurazioni di app in crowdsourcing (uso a proprio rischio)",
|
||||||
|
"allowInsecure": "Consentire le richieste HTTP non sicure",
|
||||||
|
"stayOneVersionBehind": "Rimanere una versione indietro rispetto alla più recente",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Rimuovere l'app?",
|
"one": "Rimuovere l'app?",
|
||||||
"other": "Rimuovere le app?"
|
"other": "Rimuovere le app?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "デバイスからアンインストールする",
|
"uninstallFromDevice": "デバイスからアンインストールする",
|
||||||
"onlyWorksWithNonVersionDetectApps": "バージョン検出を無効にしているアプリにのみ動作します。",
|
"onlyWorksWithNonVersionDetectApps": "バージョン検出を無効にしているアプリにのみ動作します。",
|
||||||
"releaseDateAsVersion": "リリース日をバージョンとして使用する",
|
"releaseDateAsVersion": "リリース日をバージョンとして使用する",
|
||||||
|
"releaseTitleAsVersion": "リリースタイトルをバージョン文字列として使用",
|
||||||
"releaseDateAsVersionExplanation": "このオプションは、バージョン検出が正しく機能しないアプリで、リリース日が利用可能な場合にのみ使用する必要があります。",
|
"releaseDateAsVersionExplanation": "このオプションは、バージョン検出が正しく機能しないアプリで、リリース日が利用可能な場合にのみ使用する必要があります。",
|
||||||
"changes": "変更点",
|
"changes": "変更点",
|
||||||
"releaseDate": "リリース日",
|
"releaseDate": "リリース日",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "AppVerifierに共有し、準備ができたらここに戻ってください。",
|
"appVerifierInstructionToast": "AppVerifierに共有し、準備ができたらここに戻ってください。",
|
||||||
"wiki": "ヘルプ/ウィキ",
|
"wiki": "ヘルプ/ウィキ",
|
||||||
"crowdsourcedConfigsLabel": "クラウドソーシングによるアプリの設定(利用は自己責任で)",
|
"crowdsourcedConfigsLabel": "クラウドソーシングによるアプリの設定(利用は自己責任で)",
|
||||||
|
"allowInsecure": "安全でないHTTPリクエストを許可する",
|
||||||
|
"stayOneVersionBehind": "最新バージョンから1つ遅れ",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "アプリを削除しますか?",
|
"one": "アプリを削除しますか?",
|
||||||
"other": "アプリを削除しますか?"
|
"other": "アプリを削除しますか?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Van apparaat verwijderen",
|
"uninstallFromDevice": "Van apparaat verwijderen",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Werkt alleen voor apps waarbij versieherkenning is uitgeschakeld.",
|
"onlyWorksWithNonVersionDetectApps": "Werkt alleen voor apps waarbij versieherkenning is uitgeschakeld.",
|
||||||
"releaseDateAsVersion": "Releasedatum als versie gebruiken",
|
"releaseDateAsVersion": "Releasedatum als versie gebruiken",
|
||||||
|
"releaseTitleAsVersion": "Gebruik releasetitel als versiestring",
|
||||||
"releaseDateAsVersionExplanation": "Deze optie moet alleen worden gebruikt voor apps waar versieherkenning niet correct werkt, maar waar wel een releasedatum beschikbaar is.",
|
"releaseDateAsVersionExplanation": "Deze optie moet alleen worden gebruikt voor apps waar versieherkenning niet correct werkt, maar waar wel een releasedatum beschikbaar is.",
|
||||||
"changes": "Aanpassingen",
|
"changes": "Aanpassingen",
|
||||||
"releaseDate": "Releasedatum",
|
"releaseDate": "Releasedatum",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Deel het met AppVerifier en keer daarna hier terug.",
|
"appVerifierInstructionToast": "Deel het met AppVerifier en keer daarna hier terug.",
|
||||||
"wiki": "Help/Wiki",
|
"wiki": "Help/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App-configuraties (gebruik op eigen risico)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App-configuraties (gebruik op eigen risico)",
|
||||||
|
"allowInsecure": "Onveilige HTTP-verzoeken toestaan",
|
||||||
|
"stayOneVersionBehind": "Blijf een versie achter op de nieuwste",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "App verwijderen?",
|
"one": "App verwijderen?",
|
||||||
"other": "Apps verwijderen?"
|
"other": "Apps verwijderen?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Odinstaluj z urządzenia",
|
"uninstallFromDevice": "Odinstaluj z urządzenia",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
|
"onlyWorksWithNonVersionDetectApps": "Działa tylko w przypadku aplikacji z wyłączonym wykrywaniem wersji.",
|
||||||
"releaseDateAsVersion": "Użyj daty wydania jako wersji",
|
"releaseDateAsVersion": "Użyj daty wydania jako wersji",
|
||||||
|
"releaseTitleAsVersion": "Użyj tytułu wydania jako ciągu znaków wersji",
|
||||||
"releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
|
"releaseDateAsVersionExplanation": "Opcja ta powinna być używana tylko w przypadku aplikacji, w których wykrywanie wersji nie działa poprawnie, ale dostępna jest data wydania.",
|
||||||
"changes": "Zmiany",
|
"changes": "Zmiany",
|
||||||
"releaseDate": "Data wydania",
|
"releaseDate": "Data wydania",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Udostępnij w AppVerifier, a następnie wróć tutaj, gdy będziesz gotowy.",
|
"appVerifierInstructionToast": "Udostępnij w AppVerifier, a następnie wróć tutaj, gdy będziesz gotowy.",
|
||||||
"wiki": "Pomoc/Wiki",
|
"wiki": "Pomoc/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Konfiguracje aplikacji pochodzące z crowdsourcingu (korzystanie na własne ryzyko)",
|
"crowdsourcedConfigsLabel": "Konfiguracje aplikacji pochodzące z crowdsourcingu (korzystanie na własne ryzyko)",
|
||||||
|
"allowInsecure": "Zezwalaj na niezabezpieczone żądania HTTP",
|
||||||
|
"stayOneVersionBehind": "Pozostań jedną wersję za najnowszą",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Usunąć aplikację?",
|
"one": "Usunąć aplikację?",
|
||||||
"few": "Usunąć aplikacje?",
|
"few": "Usunąć aplikacje?",
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Desinstalar do dispositivo",
|
"uninstallFromDevice": "Desinstalar do dispositivo",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Apenas funciona para aplicativos com detecção de versão desativada.",
|
"onlyWorksWithNonVersionDetectApps": "Apenas funciona para aplicativos com detecção de versão desativada.",
|
||||||
"releaseDateAsVersion": "Usar data de lançamento como versão",
|
"releaseDateAsVersion": "Usar data de lançamento como versão",
|
||||||
|
"releaseTitleAsVersion": "Utilizar o título da versão como cadeia de versões",
|
||||||
"releaseDateAsVersionExplanation": "Esta opção só deve ser usada para aplicativos onde a detecção de versão não funciona corretamente, mas há uma data de lançamento disponível.",
|
"releaseDateAsVersionExplanation": "Esta opção só deve ser usada para aplicativos onde a detecção de versão não funciona corretamente, mas há uma data de lançamento disponível.",
|
||||||
"changes": "Alterações",
|
"changes": "Alterações",
|
||||||
"releaseDate": "Data de lançamento",
|
"releaseDate": "Data de lançamento",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Partilhe com o AppVerifier e, em seguida, regresse aqui quando estiver pronto.",
|
"appVerifierInstructionToast": "Partilhe com o AppVerifier e, em seguida, regresse aqui quando estiver pronto.",
|
||||||
"wiki": "Ajuda/Wiki",
|
"wiki": "Ajuda/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Configurações de aplicações de crowdsourcing (utilização por sua conta e risco)",
|
"crowdsourcedConfigsLabel": "Configurações de aplicações de crowdsourcing (utilização por sua conta e risco)",
|
||||||
|
"allowInsecure": "Permitir pedidos HTTP inseguros",
|
||||||
|
"stayOneVersionBehind": "Manter-se uma versão atrás da mais recente",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Remover aplicativo?",
|
"one": "Remover aplicativo?",
|
||||||
"other": "Remover aplicativos?"
|
"other": "Remover aplicativos?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Удалить с устройства",
|
"uninstallFromDevice": "Удалить с устройства",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Работает только для приложений с отключенным определением версии",
|
"onlyWorksWithNonVersionDetectApps": "Работает только для приложений с отключенным определением версии",
|
||||||
"releaseDateAsVersion": "Дата выпуска вместо версии",
|
"releaseDateAsVersion": "Дата выпуска вместо версии",
|
||||||
|
"releaseTitleAsVersion": "Используйте название релиза в качестве строки версии",
|
||||||
"releaseDateAsVersionExplanation": "Этот параметр следует использовать только для приложений, в которых определение версии не работает правильно, но имеется дата выпуска",
|
"releaseDateAsVersionExplanation": "Этот параметр следует использовать только для приложений, в которых определение версии не работает правильно, но имеется дата выпуска",
|
||||||
"changes": "Изменения",
|
"changes": "Изменения",
|
||||||
"releaseDate": "Дата выпуска",
|
"releaseDate": "Дата выпуска",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Поделитесь с AppVerifier, а затем вернитесь сюда, когда будете готовы.",
|
"appVerifierInstructionToast": "Поделитесь с AppVerifier, а затем вернитесь сюда, когда будете готовы.",
|
||||||
"wiki": "Помощь/Вики",
|
"wiki": "Помощь/Вики",
|
||||||
"crowdsourcedConfigsLabel": "Конфигурации приложений на основе краудсорсинга (используйте на свой страх и риск)",
|
"crowdsourcedConfigsLabel": "Конфигурации приложений на основе краудсорсинга (используйте на свой страх и риск)",
|
||||||
|
"allowInsecure": "Разрешить небезопасные HTTP-запросы",
|
||||||
|
"stayOneVersionBehind": "Не отставайте от последней версии",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Удалить приложение?",
|
"one": "Удалить приложение?",
|
||||||
"other": "Удалить приложения?"
|
"other": "Удалить приложения?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Avinstallera från Enheten",
|
"uninstallFromDevice": "Avinstallera från Enheten",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Fungerar bara för Appar med versionsdetektering inaktiverat..",
|
"onlyWorksWithNonVersionDetectApps": "Fungerar bara för Appar med versionsdetektering inaktiverat..",
|
||||||
"releaseDateAsVersion": "Använd releasedatum som version",
|
"releaseDateAsVersion": "Använd releasedatum som version",
|
||||||
|
"releaseTitleAsVersion": "Använd release-titel som versionssträng",
|
||||||
"releaseDateAsVersionExplanation": "Det här alternativet bör endast användas för appar där versionsidentifiering inte fungerar korrekt, men ett releasedatum är tillgängligt.",
|
"releaseDateAsVersionExplanation": "Det här alternativet bör endast användas för appar där versionsidentifiering inte fungerar korrekt, men ett releasedatum är tillgängligt.",
|
||||||
"changes": "Ändringar",
|
"changes": "Ändringar",
|
||||||
"releaseDate": "Releasedatum",
|
"releaseDate": "Releasedatum",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Dela till AppVerifier och återvänd sedan hit när du är klar.",
|
"appVerifierInstructionToast": "Dela till AppVerifier och återvänd sedan hit när du är klar.",
|
||||||
"wiki": "Hjälp/Wiki",
|
"wiki": "Hjälp/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourcade appkonfigurationer (använd på egen risk)",
|
"crowdsourcedConfigsLabel": "Crowdsourcade appkonfigurationer (använd på egen risk)",
|
||||||
|
"allowInsecure": "Tillåt osäkra HTTP-förfrågningar",
|
||||||
|
"stayOneVersionBehind": "Håll dig en version bakom den senaste",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Ta Bort App?",
|
"one": "Ta Bort App?",
|
||||||
"other": "Ta Bort Appar?"
|
"other": "Ta Bort Appar?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Cihazdan Kaldır",
|
"uninstallFromDevice": "Cihazdan Kaldır",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Yalnızca Sürüm Algılaması Devre Dışı Uygulamalar İçin Çalışır.",
|
"onlyWorksWithNonVersionDetectApps": "Yalnızca Sürüm Algılaması Devre Dışı Uygulamalar İçin Çalışır.",
|
||||||
"releaseDateAsVersion": "Sürüm Olarak Yayın Tarihi Kullan",
|
"releaseDateAsVersion": "Sürüm Olarak Yayın Tarihi Kullan",
|
||||||
|
"releaseTitleAsVersion": "Sürüm dizesi olarak sürüm başlığını kullan",
|
||||||
"releaseDateAsVersionExplanation": "Bu seçenek, sürüm algılamanın doğru çalışmadığı ancak bir sürüm tarihinin mevcut olduğu uygulamalar için kullanılmalıdır.",
|
"releaseDateAsVersionExplanation": "Bu seçenek, sürüm algılamanın doğru çalışmadığı ancak bir sürüm tarihinin mevcut olduğu uygulamalar için kullanılmalıdır.",
|
||||||
"changes": "Değişiklikler",
|
"changes": "Değişiklikler",
|
||||||
"releaseDate": "Yayın Tarihi",
|
"releaseDate": "Yayın Tarihi",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "AppVerifier ile paylaşın, hazır olduğunuzda buraya dönün.",
|
"appVerifierInstructionToast": "AppVerifier ile paylaşın, hazır olduğunuzda buraya dönün.",
|
||||||
"wiki": "Yardım/Wiki",
|
"wiki": "Yardım/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Kitle Kaynaklı Uygulama Yapılandırmaları (riski size ait olmak üzere kullanın)",
|
"crowdsourcedConfigsLabel": "Kitle Kaynaklı Uygulama Yapılandırmaları (riski size ait olmak üzere kullanın)",
|
||||||
|
"allowInsecure": "Güvensiz HTTP isteklerine izin ver",
|
||||||
|
"stayOneVersionBehind": "En son sürümün bir sürüm gerisinde kalın",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Uygulamayı Kaldır?",
|
"one": "Uygulamayı Kaldır?",
|
||||||
"other": "Uygulamaları Kaldır?"
|
"other": "Uygulamaları Kaldır?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Видалити з пристрою",
|
"uninstallFromDevice": "Видалити з пристрою",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Працює лише з застосунками з вимкненим визначенням версії.",
|
"onlyWorksWithNonVersionDetectApps": "Працює лише з застосунками з вимкненим визначенням версії.",
|
||||||
"releaseDateAsVersion": "Використовувати дату випуску як рядок версії",
|
"releaseDateAsVersion": "Використовувати дату випуску як рядок версії",
|
||||||
|
"releaseTitleAsVersion": "Використовувати назву випуску як рядок версії",
|
||||||
"releaseDateAsVersionExplanation": "Цю опцію слід використовувати лише для застосунків, де визначення версії працює неправильно, але є дата випуску.",
|
"releaseDateAsVersionExplanation": "Цю опцію слід використовувати лише для застосунків, де визначення версії працює неправильно, але є дата випуску.",
|
||||||
"changes": "Зміни",
|
"changes": "Зміни",
|
||||||
"releaseDate": "Дата випуску",
|
"releaseDate": "Дата випуску",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Надішліть на AppVerifier, а потім поверніться сюди, коли будете готові.",
|
"appVerifierInstructionToast": "Надішліть на AppVerifier, а потім поверніться сюди, коли будете готові.",
|
||||||
"wiki": "Довідка/Вікі",
|
"wiki": "Довідка/Вікі",
|
||||||
"crowdsourcedConfigsLabel": "Краудсорсингові конфігурації додатків (використовуйте на свій страх і ризик)",
|
"crowdsourcedConfigsLabel": "Краудсорсингові конфігурації додатків (використовуйте на свій страх і ризик)",
|
||||||
|
"allowInsecure": "Дозволити незахищені HTTP-запити",
|
||||||
|
"stayOneVersionBehind": "Залишайтеся на одну версію актуальнішою",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Видалити застосунок?",
|
"one": "Видалити застосунок?",
|
||||||
"other": "Видалити застосунки?"
|
"other": "Видалити застосунки?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "Gỡ cài đặt khỏi thiết bị",
|
"uninstallFromDevice": "Gỡ cài đặt khỏi thiết bị",
|
||||||
"onlyWorksWithNonVersionDetectApps": "Chỉ hoạt động với Ứng dụng đã tắt tính năng phát hiện phiên bản.",
|
"onlyWorksWithNonVersionDetectApps": "Chỉ hoạt động với Ứng dụng đã tắt tính năng phát hiện phiên bản.",
|
||||||
"releaseDateAsVersion": "Sử dụng ngày phát hành làm phiên bản",
|
"releaseDateAsVersion": "Sử dụng ngày phát hành làm phiên bản",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
"releaseDateAsVersionExplanation": "Chỉ nên sử dụng tùy chọn này cho Ứng dụng trong đó tính năng phát hiện phiên bản không hoạt động chính xác nhưng đã có ngày phát hành.",
|
"releaseDateAsVersionExplanation": "Chỉ nên sử dụng tùy chọn này cho Ứng dụng trong đó tính năng phát hiện phiên bản không hoạt động chính xác nhưng đã có ngày phát hành.",
|
||||||
"changes": "Thay đổi",
|
"changes": "Thay đổi",
|
||||||
"releaseDate": "Ngày phát hành",
|
"releaseDate": "Ngày phát hành",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "Chia sẻ lên AppVerifier, sau đó quay lại đây khi sẵn sàng.",
|
"appVerifierInstructionToast": "Chia sẻ lên AppVerifier, sau đó quay lại đây khi sẵn sàng.",
|
||||||
"wiki": "Trợ giúp/Wiki",
|
"wiki": "Trợ giúp/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
|
"crowdsourcedConfigsLabel": "Crowdsourced App Configurations (use at your own risk)",
|
||||||
|
"allowInsecure": "Allow insecure HTTP requests",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "Gỡ ứng dụng?",
|
"one": "Gỡ ứng dụng?",
|
||||||
"other": "Gỡ ứng dụng?"
|
"other": "Gỡ ứng dụng?"
|
||||||
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "從裝置解除安裝",
|
"uninstallFromDevice": "從裝置解除安裝",
|
||||||
"onlyWorksWithNonVersionDetectApps": "僅適用於停用版本偵測的應用程式。",
|
"onlyWorksWithNonVersionDetectApps": "僅適用於停用版本偵測的應用程式。",
|
||||||
"releaseDateAsVersion": "使用發佈日期作為版本字串",
|
"releaseDateAsVersion": "使用發佈日期作為版本字串",
|
||||||
|
"releaseTitleAsVersion": "Use release title as version string",
|
||||||
"releaseDateAsVersionExplanation": "此選項僅應用於版本偵測無法正確工作但有發佈日期的應用程式。",
|
"releaseDateAsVersionExplanation": "此選項僅應用於版本偵測無法正確工作但有發佈日期的應用程式。",
|
||||||
"changes": "變更",
|
"changes": "變更",
|
||||||
"releaseDate": "發佈日期",
|
"releaseDate": "發佈日期",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "分享至 AppVerifier,然後準備好時回到此處。",
|
"appVerifierInstructionToast": "分享至 AppVerifier,然後準備好時回到此處。",
|
||||||
"wiki": "幫助/維基",
|
"wiki": "幫助/維基",
|
||||||
"crowdsourcedConfigsLabel": "群眾外包的應用程式設定(使用風險自負)",
|
"crowdsourcedConfigsLabel": "群眾外包的應用程式設定(使用風險自負)",
|
||||||
|
"allowInsecure": "Allow insecure HTTP requests",
|
||||||
|
"stayOneVersionBehind": "Stay one version behind latest",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "移除應用程式?",
|
"one": "移除應用程式?",
|
||||||
"other": "移除應用程式?"
|
"other": "移除應用程式?"
|
@@ -213,6 +213,7 @@
|
|||||||
"uninstallFromDevice": "从设备中卸载",
|
"uninstallFromDevice": "从设备中卸载",
|
||||||
"onlyWorksWithNonVersionDetectApps": "仅适用于禁用版本检测的应用。",
|
"onlyWorksWithNonVersionDetectApps": "仅适用于禁用版本检测的应用。",
|
||||||
"releaseDateAsVersion": "将发行日期作为版本号",
|
"releaseDateAsVersion": "将发行日期作为版本号",
|
||||||
|
"releaseTitleAsVersion": "使用版本标题作为版本字符串",
|
||||||
"releaseDateAsVersionExplanation": "此选项应该仅用于无法进行版本检测但能够获取发行日期的应用。",
|
"releaseDateAsVersionExplanation": "此选项应该仅用于无法进行版本检测但能够获取发行日期的应用。",
|
||||||
"changes": "更新日志",
|
"changes": "更新日志",
|
||||||
"releaseDate": "发行日期",
|
"releaseDate": "发行日期",
|
||||||
@@ -314,6 +315,8 @@
|
|||||||
"appVerifierInstructionToast": "分享至 AppVerifier,完成后返回此处。",
|
"appVerifierInstructionToast": "分享至 AppVerifier,完成后返回此处。",
|
||||||
"wiki": "帮助/Wiki",
|
"wiki": "帮助/Wiki",
|
||||||
"crowdsourcedConfigsLabel": "众包应用程序配置(使用风险自负)",
|
"crowdsourcedConfigsLabel": "众包应用程序配置(使用风险自负)",
|
||||||
|
"allowInsecure": "允许不安全的 HTTP 请求",
|
||||||
|
"stayOneVersionBehind": "比最新版本晚一个版本",
|
||||||
"removeAppQuestion": {
|
"removeAppQuestion": {
|
||||||
"one": "是否删除应用?",
|
"one": "是否删除应用?",
|
||||||
"other": "是否删除应用?"
|
"other": "是否删除应用?"
|
||||||
|
@@ -10,7 +10,7 @@ class APKCombo extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -32,7 +32,7 @@ class APKMirror extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/apk/[^/]+/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/apk/[^/]+/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -2,6 +2,7 @@ import 'package:device_info_plus/device_info_plus.dart';
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:html/parser.dart';
|
import 'package:html/parser.dart';
|
||||||
import 'package:obtainium/app_sources/html.dart';
|
import 'package:obtainium/app_sources/html.dart';
|
||||||
|
import 'package:obtainium/components/generated_form.dart';
|
||||||
import 'package:obtainium/custom_errors.dart';
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
@@ -26,10 +27,20 @@ class APKPure extends AppSource {
|
|||||||
allowSubDomains = true;
|
allowSubDomains = true;
|
||||||
naiveStandardVersionDetection = true;
|
naiveStandardVersionDetection = true;
|
||||||
showReleaseDateAsVersionToggle = true;
|
showReleaseDateAsVersionToggle = true;
|
||||||
|
additionalSourceAppSpecificSettingFormItems = [
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('fallbackToOlderReleases',
|
||||||
|
label: tr('fallbackToOlderReleases'), defaultValue: true)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('stayOneVersionBehind',
|
||||||
|
label: tr('stayOneVersionBehind'), defaultValue: false)
|
||||||
|
]
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegExB = RegExp(
|
RegExp standardUrlRegExB = RegExp(
|
||||||
'^https?://m.${getSourceRegex(hosts)}(/+[^/]{2})?/+[^/]+/+[^/]+',
|
'^https?://m.${getSourceRegex(hosts)}(/+[^/]{2})?/+[^/]+/+[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
@@ -54,6 +65,97 @@ class APKPure extends AppSource {
|
|||||||
return Uri.parse(standardUrl).pathSegments.last;
|
return Uri.parse(standardUrl).pathSegments.last;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getDetailsForVersionLink(
|
||||||
|
String standardUrl,
|
||||||
|
String appId,
|
||||||
|
String host,
|
||||||
|
List<String> supportedArchs,
|
||||||
|
String link,
|
||||||
|
Map<String, dynamic> additionalSettings) async {
|
||||||
|
var res = await sourceRequest(link, additionalSettings);
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
var html = parse(res.body);
|
||||||
|
var apksDiv =
|
||||||
|
html.querySelector('#version-list div div.show-more-content');
|
||||||
|
DateTime? topReleaseDate;
|
||||||
|
var apkUrls = apksDiv
|
||||||
|
?.querySelectorAll('div.group-title')
|
||||||
|
.map((e) {
|
||||||
|
String architectureString = e.text.trim();
|
||||||
|
if (architectureString.toLowerCase() == 'unlimited' ||
|
||||||
|
architectureString.toLowerCase() == 'universal') {
|
||||||
|
architectureString = '';
|
||||||
|
}
|
||||||
|
List<String> architectures = architectureString
|
||||||
|
.split(',')
|
||||||
|
.map((e) => e.trim())
|
||||||
|
.where((e) => e.isNotEmpty)
|
||||||
|
.toList();
|
||||||
|
// Only take the first APK for each architecture, ignore others for now, for simplicity
|
||||||
|
// Unclear why there can even be multiple APKs for the same version and arch
|
||||||
|
var apkInfo = e.nextElementSibling?.querySelector('div.info');
|
||||||
|
String? versionCode = RegExp('[0-9]+')
|
||||||
|
.firstMatch(apkInfo
|
||||||
|
?.querySelector('div.info-top span.code')
|
||||||
|
?.text ??
|
||||||
|
'')
|
||||||
|
?.group(0)
|
||||||
|
?.trim();
|
||||||
|
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
|
||||||
|
.trim();
|
||||||
|
DateTime? releaseDate = parseDateTimeMMMddCommayyyy(dateString);
|
||||||
|
if (additionalSettings['autoApkFilterByArch'] == true &&
|
||||||
|
architectures.isNotEmpty &&
|
||||||
|
architectures
|
||||||
|
.where((a) => supportedArchs.contains(a))
|
||||||
|
.isEmpty) {
|
||||||
|
return const MapEntry('', '');
|
||||||
|
}
|
||||||
|
topReleaseDate ??=
|
||||||
|
releaseDate; // Just use the release date of the first APK in the list as the release date for this version
|
||||||
|
return MapEntry(
|
||||||
|
'$appId-$versionCode-$architectureString.${type.toLowerCase()}',
|
||||||
|
'https://d.${hosts.contains(host) ? 'cdnpure.com' : host}/b/$type/$appId?versionCode=$versionCode');
|
||||||
|
})
|
||||||
|
.where((e) => e.key.isNotEmpty)
|
||||||
|
.toList() ??
|
||||||
|
[];
|
||||||
|
if (apkUrls.isEmpty) {
|
||||||
|
throw NoAPKError();
|
||||||
|
}
|
||||||
|
String version = Uri.parse(link).pathSegments.last;
|
||||||
|
String author = html
|
||||||
|
.querySelector('span.info-sdk')
|
||||||
|
?.text
|
||||||
|
.trim()
|
||||||
|
.substring(version.length + 4) ??
|
||||||
|
Uri.parse(standardUrl).pathSegments.reversed.last;
|
||||||
|
String appName =
|
||||||
|
html.querySelector('h1.info-title')?.text.trim() ?? appId;
|
||||||
|
String? changeLog = html
|
||||||
|
.querySelector('div.module.change-log')
|
||||||
|
?.innerHtml
|
||||||
|
.trim()
|
||||||
|
.replaceAll("<br>", " \n");
|
||||||
|
return APKDetails(version, apkUrls, AppNames(author, appName),
|
||||||
|
releaseDate: topReleaseDate, changeLog: changeLog);
|
||||||
|
} else {
|
||||||
|
throw getObtainiumHttpError(res);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<APKDetails> getLatestAPKDetails(
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
String standardUrl,
|
String standardUrl,
|
||||||
@@ -80,83 +182,17 @@ class APKPure extends AppSource {
|
|||||||
|
|
||||||
for (var i = 0; i < versionLinks.length; i++) {
|
for (var i = 0; i < versionLinks.length; i++) {
|
||||||
var link = versionLinks[i];
|
var link = versionLinks[i];
|
||||||
var res = await sourceRequest(link.key, additionalSettings);
|
try {
|
||||||
if (res.statusCode == 200) {
|
if (i == 0 && additionalSettings['stayOneVersionBehind'] == true) {
|
||||||
var html = parse(res.body);
|
throw NoReleasesError();
|
||||||
var apksDiv =
|
}
|
||||||
html.querySelector('#version-list div div.show-more-content');
|
return await getDetailsForVersionLink(standardUrl, appId, host,
|
||||||
DateTime? topReleaseDate;
|
supportedArchs, link.key, additionalSettings);
|
||||||
var apkUrls = apksDiv
|
} catch (e) {
|
||||||
?.querySelectorAll('div.group-title')
|
if (additionalSettings['fallbackToOlderReleases'] != true ||
|
||||||
.map((e) {
|
i == versionLinks.length - 1) {
|
||||||
String architectureString = e.text.trim();
|
rethrow;
|
||||||
if (architectureString.toLowerCase() == 'unlimited' ||
|
|
||||||
architectureString.toLowerCase() == 'universal') {
|
|
||||||
architectureString = '';
|
|
||||||
}
|
|
||||||
List<String> architectures = architectureString
|
|
||||||
.split(',')
|
|
||||||
.map((e) => e.trim())
|
|
||||||
.where((e) => e.isNotEmpty)
|
|
||||||
.toList();
|
|
||||||
// Only take the first APK for each architecture, ignore others for now, for simplicity
|
|
||||||
// Unclear why there can even be multiple APKs for the same version and arch
|
|
||||||
var apkInfo = e.nextElementSibling?.querySelector('div.info');
|
|
||||||
String? versionCode = RegExp('[0-9]+')
|
|
||||||
.firstMatch(apkInfo
|
|
||||||
?.querySelector('div.info-top span.code')
|
|
||||||
?.text ??
|
|
||||||
'')
|
|
||||||
?.group(0)
|
|
||||||
?.trim();
|
|
||||||
String? type = apkInfo
|
|
||||||
?.querySelector('div.info-top span.tag')
|
|
||||||
?.text
|
|
||||||
.trim() ??
|
|
||||||
'APK';
|
|
||||||
String? dateString = apkInfo
|
|
||||||
?.querySelector('div.info-bottom span.time')
|
|
||||||
?.text
|
|
||||||
.trim();
|
|
||||||
DateTime? releaseDate =
|
|
||||||
parseDateTimeMMMddCommayyyy(dateString);
|
|
||||||
if (additionalSettings['autoApkFilterByArch'] == true &&
|
|
||||||
architectures.isNotEmpty &&
|
|
||||||
architectures
|
|
||||||
.where((a) => supportedArchs.contains(a))
|
|
||||||
.isEmpty) {
|
|
||||||
return const MapEntry('', '');
|
|
||||||
}
|
|
||||||
topReleaseDate ??=
|
|
||||||
releaseDate; // Just use the release date of the first APK in the list as the release date for this version
|
|
||||||
return MapEntry(
|
|
||||||
'$appId-$versionCode-$architectureString.${type.toLowerCase()}',
|
|
||||||
'https://d.${hosts.contains(host) ? 'cdnpure.com' : host}/b/$type/$appId?versionCode=$versionCode');
|
|
||||||
})
|
|
||||||
.where((e) => e.key.isNotEmpty)
|
|
||||||
.toList() ??
|
|
||||||
[];
|
|
||||||
if (apkUrls.isEmpty) {
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
String version = Uri.parse(link.key).pathSegments.last;
|
|
||||||
String author = html
|
|
||||||
.querySelector('span.info-sdk')
|
|
||||||
?.text
|
|
||||||
.trim()
|
|
||||||
.substring(version.length + 4) ??
|
|
||||||
Uri.parse(standardUrl).pathSegments.reversed.last;
|
|
||||||
String appName =
|
|
||||||
html.querySelector('h1.info-title')?.text.trim() ?? appId;
|
|
||||||
String? changeLog = html
|
|
||||||
.querySelector('div.module.change-log')
|
|
||||||
?.innerHtml
|
|
||||||
.trim()
|
|
||||||
.replaceAll("<br>", " \n");
|
|
||||||
return APKDetails(version, apkUrls, AppNames(author, appName),
|
|
||||||
releaseDate: topReleaseDate, changeLog: changeLog);
|
|
||||||
} else {
|
|
||||||
throw getObtainiumHttpError(res);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw NoAPKError();
|
throw NoAPKError();
|
||||||
|
@@ -14,7 +14,7 @@ class Aptoide extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
|
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -16,7 +16,7 @@ class Codeberg extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:obtainium/app_sources/html.dart';
|
import 'package:obtainium/app_sources/html.dart';
|
||||||
|
import 'package:obtainium/custom_errors.dart';
|
||||||
import 'package:obtainium/providers/source_provider.dart';
|
import 'package:obtainium/providers/source_provider.dart';
|
||||||
|
|
||||||
class DirectAPKLink extends AppSource {
|
class DirectAPKLink extends AppSource {
|
||||||
HTML html = HTML();
|
HTML html = HTML();
|
||||||
|
|
||||||
DirectAPKLink() {
|
DirectAPKLink() {
|
||||||
neverAutoSelect = true;
|
|
||||||
name = tr('directAPKLink');
|
name = tr('directAPKLink');
|
||||||
additionalSourceAppSpecificSettingFormItems = html
|
additionalSourceAppSpecificSettingFormItems = html
|
||||||
.additionalSourceAppSpecificSettingFormItems
|
.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
|
@override
|
||||||
Future<Map<String, String>?> getRequestHeaders(
|
Future<Map<String, String>?> getRequestHeaders(
|
||||||
Map<String, dynamic> additionalSettings,
|
Map<String, dynamic> additionalSettings,
|
||||||
|
@@ -38,7 +38,7 @@ class FDroid extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegExB = RegExp(
|
RegExp standardUrlRegExB = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+packages/+[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/+[^/]+/+packages/+[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -43,7 +43,7 @@ class FDroidRepo extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
var standardUri = Uri.parse(url);
|
var standardUri = Uri.parse(url);
|
||||||
var pathSegments = standardUri.pathSegments;
|
var pathSegments = standardUri.pathSegments;
|
||||||
if (pathSegments.isNotEmpty && pathSegments.last == 'index.xml') {
|
if (pathSegments.isNotEmpty && pathSegments.last == 'index.xml') {
|
||||||
|
@@ -81,6 +81,10 @@ class GitHub extends AppSource {
|
|||||||
[
|
[
|
||||||
GeneratedFormSwitch('useLatestAssetDateAsReleaseDate',
|
GeneratedFormSwitch('useLatestAssetDateAsReleaseDate',
|
||||||
label: tr('useLatestAssetDateAsReleaseDate'), defaultValue: false)
|
label: tr('useLatestAssetDateAsReleaseDate'), defaultValue: false)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('releaseTitleAsVersion',
|
||||||
|
label: tr('releaseTitleAsVersion'), defaultValue: false)
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -154,7 +158,7 @@ class GitHub extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
@@ -396,7 +400,9 @@ class GitHub extends AppSource {
|
|||||||
targetRelease = releases[i];
|
targetRelease = releases[i];
|
||||||
targetRelease['apkUrls'] = apkUrls;
|
targetRelease['apkUrls'] = apkUrls;
|
||||||
targetRelease['version'] =
|
targetRelease['version'] =
|
||||||
targetRelease['tag_name'] ?? targetRelease['name'];
|
additionalSettings['releaseTitleAsVersion'] == true
|
||||||
|
? nameToFilter
|
||||||
|
: targetRelease['tag_name'] ?? targetRelease['name'];
|
||||||
if (targetRelease['tarball_url'] != null) {
|
if (targetRelease['tarball_url'] != null) {
|
||||||
allAssetUrls.add(MapEntry(
|
allAssetUrls.add(MapEntry(
|
||||||
(targetRelease['version'] ?? 'source') + '.tar.gz',
|
(targetRelease['version'] ?? 'source') + '.tar.gz',
|
||||||
|
@@ -52,7 +52,7 @@ class GitLab extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -288,7 +288,7 @@ class HTML extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return url;
|
return url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -350,7 +350,8 @@ class HTML extends AppSource {
|
|||||||
? rel.hashCode.toString()
|
? rel.hashCode.toString()
|
||||||
: (await checkPartialDownloadHashDynamic(rel,
|
: (await checkPartialDownloadHashDynamic(rel,
|
||||||
headers: await getRequestHeaders(additionalSettings,
|
headers: await getRequestHeaders(additionalSettings,
|
||||||
forAPKDownload: true)))
|
forAPKDownload: true),
|
||||||
|
allowInsecure: additionalSettings['allowInsecure'] == true))
|
||||||
.toString();
|
.toString();
|
||||||
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(),
|
||||||
AppNames(uri.host, tr('app')));
|
AppNames(uri.host, tr('app')));
|
||||||
|
@@ -12,7 +12,7 @@ class HuaweiAppGallery extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}(/#)?/(app|appdl)/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}(/#)?/(app|appdl)/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -14,7 +14,7 @@ class IzzyOnDroid extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegExA = RegExp(
|
RegExp standardUrlRegExA = RegExp(
|
||||||
'^https?://android.${getSourceRegex(hosts)}/repo/apk/[^/]+',
|
'^https?://android.${getSourceRegex(hosts)}/repo/apk/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -10,7 +10,7 @@ class Mullvad extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -10,7 +10,7 @@ class NeutronCode extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/downloads/file/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/downloads/file/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -9,7 +9,7 @@ class Signal extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return 'https://${hosts[0]}';
|
return 'https://${hosts[0]}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -9,7 +9,7 @@ class SourceForge extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
var sourceRegex = getSourceRegex(hosts);
|
var sourceRegex = getSourceRegex(hosts);
|
||||||
RegExp standardUrlRegExC =
|
RegExp standardUrlRegExC =
|
||||||
RegExp('^https?://(www\\.)?$sourceRegex/p/.+', caseSensitive: false);
|
RegExp('^https?://(www\\.)?$sourceRegex/p/.+', caseSensitive: false);
|
||||||
|
@@ -20,7 +20,7 @@ class SourceHut extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
'^https?://(www\\.)?${getSourceRegex(hosts)}/[^/]+/[^/]+',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
@@ -60,8 +60,17 @@ class SourceHut extends AppSource {
|
|||||||
int ind = 0;
|
int ind = 0;
|
||||||
|
|
||||||
for (var entry in parsedHtml.querySelectorAll('item').sublist(0, 6)) {
|
for (var entry in parsedHtml.querySelectorAll('item').sublist(0, 6)) {
|
||||||
// Limit 5 for speed
|
ind++;
|
||||||
if (!fallbackToOlderReleases && ind > 0) {
|
String releasePage = // querySelector('link') fails for some reason
|
||||||
|
entry
|
||||||
|
.querySelector('guid') // Luckily guid is identical
|
||||||
|
?.innerHtml
|
||||||
|
.trim() ??
|
||||||
|
'';
|
||||||
|
if (!releasePage.startsWith('$standardUrl/refs')) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!fallbackToOlderReleases && ind > 1) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
String? version = entry.querySelector('title')?.text.trim();
|
String? version = entry.querySelector('title')?.text.trim();
|
||||||
@@ -69,7 +78,6 @@ class SourceHut extends AppSource {
|
|||||||
throw NoVersionError();
|
throw NoVersionError();
|
||||||
}
|
}
|
||||||
String? releaseDateString = entry.querySelector('pubDate')?.innerHtml;
|
String? releaseDateString = entry.querySelector('pubDate')?.innerHtml;
|
||||||
String releasePage = '$standardUrl/refs/$version';
|
|
||||||
DateTime? releaseDate;
|
DateTime? releaseDate;
|
||||||
try {
|
try {
|
||||||
releaseDate = releaseDateString != null
|
releaseDate = releaseDateString != null
|
||||||
@@ -98,7 +106,6 @@ class SourceHut extends AppSource {
|
|||||||
AppNames(entry.querySelector('author')?.innerHtml.trim() ?? appName,
|
AppNames(entry.querySelector('author')?.innerHtml.trim() ?? appName,
|
||||||
appName),
|
appName),
|
||||||
releaseDate: releaseDate));
|
releaseDate: releaseDate));
|
||||||
ind++;
|
|
||||||
}
|
}
|
||||||
if (apkDetailsList.isEmpty) {
|
if (apkDetailsList.isEmpty) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
|
@@ -20,7 +20,7 @@ class SteamMobile extends AppSource {
|
|||||||
final apks = {'steam': tr('steamMobile'), 'steam-chat-app': tr('steamChat')};
|
final apks = {'steam': tr('steamMobile'), 'steam-chat-app': tr('steamChat')};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return 'https://${hosts[0]}';
|
return 'https://${hosts[0]}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -11,7 +11,7 @@ class TelegramApp extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return 'https://${hosts[0]}';
|
return 'https://${hosts[0]}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
78
lib/app_sources/tencent.dart
Normal file
78
lib/app_sources/tencent.dart
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -14,7 +14,7 @@ class Uptodown extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
RegExp standardUrlRegEx = RegExp(
|
RegExp standardUrlRegEx = RegExp(
|
||||||
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
|
'^https?://([^\\.]+\\.){2,}${getSourceRegex(hosts)}',
|
||||||
caseSensitive: false);
|
caseSensitive: false);
|
||||||
|
@@ -21,7 +21,7 @@ class VLC extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return 'https://${hosts[0]}';
|
return 'https://${hosts[0]}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ class WhatsApp extends AppSource {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
return 'https://${hosts[0]}';
|
return 'https://${hosts[0]}';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -23,6 +23,7 @@ import 'package:easy_localization/src/localization.dart';
|
|||||||
List<MapEntry<Locale, String>> supportedLocales = const [
|
List<MapEntry<Locale, String>> supportedLocales = const [
|
||||||
MapEntry(Locale('en'), 'English'),
|
MapEntry(Locale('en'), 'English'),
|
||||||
MapEntry(Locale('zh'), '简体中文'),
|
MapEntry(Locale('zh'), '简体中文'),
|
||||||
|
MapEntry(Locale('zh_Hant_TW'), '臺灣話'),
|
||||||
MapEntry(Locale('it'), 'Italiano'),
|
MapEntry(Locale('it'), 'Italiano'),
|
||||||
MapEntry(Locale('ja'), '日本語'),
|
MapEntry(Locale('ja'), '日本語'),
|
||||||
MapEntry(Locale('hu'), 'Magyar'),
|
MapEntry(Locale('hu'), 'Magyar'),
|
||||||
@@ -41,6 +42,9 @@ List<MapEntry<Locale, String>> supportedLocales = const [
|
|||||||
MapEntry(Locale('tr'), 'Türkçe'),
|
MapEntry(Locale('tr'), 'Türkçe'),
|
||||||
MapEntry(Locale('uk'), 'Українська'),
|
MapEntry(Locale('uk'), 'Українська'),
|
||||||
MapEntry(Locale('da'), 'Dansk'),
|
MapEntry(Locale('da'), 'Dansk'),
|
||||||
|
MapEntry(Locale('en', 'EO'),
|
||||||
|
'Esperanto'), // https://github.com/aissat/easy_localization/issues/220#issuecomment-846035493
|
||||||
|
MapEntry(Locale('in'), 'Bahasa Indonesia')
|
||||||
];
|
];
|
||||||
const fallbackLocale = Locale('en');
|
const fallbackLocale = Locale('en');
|
||||||
const localeDir = 'assets/translations';
|
const localeDir = 'assets/translations';
|
||||||
@@ -245,15 +249,17 @@ class _ObtainiumState extends State<Obtainium> {
|
|||||||
colorScheme: settingsProvider.theme == ThemeSettings.dark
|
colorScheme: settingsProvider.theme == ThemeSettings.dark
|
||||||
? darkColorScheme
|
? darkColorScheme
|
||||||
: lightColorScheme,
|
: lightColorScheme,
|
||||||
fontFamily:
|
fontFamily: settingsProvider.useSystemFont
|
||||||
settingsProvider.useSystemFont ? 'SystemFont' : 'Wix-Madefor-Display'),
|
? 'SystemFont'
|
||||||
|
: 'Wix-Madefor-Display'),
|
||||||
darkTheme: ThemeData(
|
darkTheme: ThemeData(
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
colorScheme: settingsProvider.theme == ThemeSettings.light
|
colorScheme: settingsProvider.theme == ThemeSettings.light
|
||||||
? lightColorScheme
|
? lightColorScheme
|
||||||
: darkColorScheme,
|
: darkColorScheme,
|
||||||
fontFamily:
|
fontFamily: settingsProvider.useSystemFont
|
||||||
settingsProvider.useSystemFont ? 'SystemFont' : 'Wix-Madefor-Display'),
|
? 'SystemFont'
|
||||||
|
: 'Wix-Madefor-Display'),
|
||||||
home: Shortcuts(shortcuts: <LogicalKeySet, Intent>{
|
home: Shortcuts(shortcuts: <LogicalKeySet, Intent>{
|
||||||
LogicalKeySet(LogicalKeyboardKey.select): const ActivateIntent(),
|
LogicalKeySet(LogicalKeyboardKey.select): const ActivateIntent(),
|
||||||
}, child: const HomePage()));
|
}, child: const HomePage()));
|
||||||
|
@@ -30,6 +30,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
String userInput = '';
|
String userInput = '';
|
||||||
String searchQuery = '';
|
String searchQuery = '';
|
||||||
String? pickedSourceOverride;
|
String? pickedSourceOverride;
|
||||||
|
String? previousPickedSourceOverride;
|
||||||
AppSource? pickedSource;
|
AppSource? pickedSource;
|
||||||
Map<String, dynamic> additionalSettings = {};
|
Map<String, dynamic> additionalSettings = {};
|
||||||
bool additionalSettingsValid = true;
|
bool additionalSettingsValid = true;
|
||||||
@@ -58,6 +59,9 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
if (overrideSource != null) {
|
if (overrideSource != null) {
|
||||||
pickedSourceOverride = overrideSource;
|
pickedSourceOverride = overrideSource;
|
||||||
}
|
}
|
||||||
|
bool overrideChanged =
|
||||||
|
pickedSourceOverride != previousPickedSourceOverride;
|
||||||
|
previousPickedSourceOverride = pickedSourceOverride;
|
||||||
if (updateUrlInput) {
|
if (updateUrlInput) {
|
||||||
urlInputKey++;
|
urlInputKey++;
|
||||||
}
|
}
|
||||||
@@ -69,6 +73,7 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
overrideSource: pickedSourceOverride)
|
overrideSource: pickedSourceOverride)
|
||||||
: null;
|
: null;
|
||||||
if (pickedSource.runtimeType != source.runtimeType ||
|
if (pickedSource.runtimeType != source.runtimeType ||
|
||||||
|
overrideChanged ||
|
||||||
(prevHost != null && prevHost != source?.hosts[0])) {
|
(prevHost != null && prevHost != source?.hosts[0])) {
|
||||||
pickedSource = source;
|
pickedSource = source;
|
||||||
pickedSource?.runOnAddAppInputChange(userInput);
|
pickedSource?.runOnAddAppInputChange(userInput);
|
||||||
@@ -487,7 +492,8 @@ class AddAppPageState extends State<AddAppPage> {
|
|||||||
height: 16,
|
height: 16,
|
||||||
),
|
),
|
||||||
GeneratedForm(
|
GeneratedForm(
|
||||||
key: Key(pickedSource.runtimeType.toString()),
|
key: Key(
|
||||||
|
'${pickedSource.runtimeType.toString()}-${pickedSource?.hostChanged.toString()}-${pickedSource?.hostIdenticalDespiteAnyChange.toString()}'),
|
||||||
items: [
|
items: [
|
||||||
...pickedSource!.combinedAppSpecificSettingFormItems,
|
...pickedSource!.combinedAppSpecificSettingFormItems,
|
||||||
...(pickedSourceOverride != null
|
...(pickedSourceOverride != null
|
||||||
|
@@ -242,13 +242,14 @@ class _AppPageState extends State<AppPage> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
getFullInfoColumn() => Column(
|
getFullInfoColumn({bool small = false}) => Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 20),
|
SizedBox(height: small ? 5 : 20),
|
||||||
FutureBuilder(
|
FutureBuilder(
|
||||||
future: appsProvider.updateAppIcon(app?.app.id),
|
future:
|
||||||
|
appsProvider.updateAppIcon(app?.app.id, ignoreCache: true),
|
||||||
builder: (ctx, val) {
|
builder: (ctx, val) {
|
||||||
return app?.icon != null
|
return app?.icon != null
|
||||||
? Row(
|
? Row(
|
||||||
@@ -260,24 +261,28 @@ class _AppPageState extends State<AppPage> {
|
|||||||
: () => pm.openApp(app.app.id),
|
: () => pm.openApp(app.app.id),
|
||||||
child: Image.memory(
|
child: Image.memory(
|
||||||
app!.icon!,
|
app!.icon!,
|
||||||
height: 150,
|
height: small ? 70 : 150,
|
||||||
gaplessPlayback: true,
|
gaplessPlayback: true,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
])
|
])
|
||||||
: Container();
|
: Container();
|
||||||
}),
|
}),
|
||||||
const SizedBox(
|
SizedBox(
|
||||||
height: 25,
|
height: small ? 10 : 25,
|
||||||
),
|
),
|
||||||
Text(
|
Text(
|
||||||
app?.name ?? tr('app'),
|
app?.name ?? tr('app'),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.displayLarge,
|
style: small
|
||||||
|
? Theme.of(context).textTheme.displaySmall
|
||||||
|
: Theme.of(context).textTheme.displayLarge,
|
||||||
),
|
),
|
||||||
Text(tr('byX', args: [app?.app.author ?? tr('unknown')]),
|
Text(tr('byX', args: [app?.app.author ?? tr('unknown')]),
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
style: Theme.of(context).textTheme.headlineMedium),
|
style: small
|
||||||
|
? Theme.of(context).textTheme.headlineSmall
|
||||||
|
: Theme.of(context).textTheme.headlineMedium),
|
||||||
const SizedBox(
|
const SizedBox(
|
||||||
height: 24,
|
height: 24,
|
||||||
),
|
),
|
||||||
@@ -495,11 +500,8 @@ class _AppPageState extends State<AppPage> {
|
|||||||
builder: (BuildContext ctx) {
|
builder: (BuildContext ctx) {
|
||||||
return AlertDialog(
|
return AlertDialog(
|
||||||
scrollable: true,
|
scrollable: true,
|
||||||
content: getInfoColumn(),
|
content: getFullInfoColumn(small: true),
|
||||||
title: Text(
|
title: Text(app.name),
|
||||||
'${app.name} ${tr('byX', args: [
|
|
||||||
app.app.author
|
|
||||||
])}'),
|
|
||||||
actions: [
|
actions: [
|
||||||
TextButton(
|
TextButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@@ -416,6 +416,8 @@ class AppsPageState extends State<AppsPage> {
|
|||||||
? Image.memory(
|
? Image.memory(
|
||||||
listedApps[appIndex].icon!,
|
listedApps[appIndex].icon!,
|
||||||
gaplessPlayback: true,
|
gaplessPlayback: true,
|
||||||
|
opacity: AlwaysStoppedAnimation(
|
||||||
|
listedApps[appIndex].installedInfo == null ? 0.6 : 1),
|
||||||
)
|
)
|
||||||
: Row(
|
: Row(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
@@ -578,6 +578,22 @@ class _SettingsPageState extends State<SettingsPage> {
|
|||||||
})
|
})
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
height16,
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Flexible(
|
||||||
|
child: Text(
|
||||||
|
tr('shizukuPretendToBeGooglePlay'))),
|
||||||
|
Switch(
|
||||||
|
value: settingsProvider
|
||||||
|
.shizukuPretendToBeGooglePlay,
|
||||||
|
onChanged: (value) {
|
||||||
|
settingsProvider
|
||||||
|
.shizukuPretendToBeGooglePlay = value;
|
||||||
|
})
|
||||||
|
],
|
||||||
|
),
|
||||||
height32,
|
height32,
|
||||||
Text(
|
Text(
|
||||||
tr('sourceSpecific'),
|
tr('sourceSpecific'),
|
||||||
|
@@ -17,6 +17,7 @@ import 'package:device_info_plus/device_info_plus.dart';
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.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.dart';
|
||||||
import 'package:obtainium/components/generated_form_modal.dart';
|
import 'package:obtainium/components/generated_form_modal.dart';
|
||||||
import 'package:obtainium/custom_errors.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 fileNameHasExt, Function? onProgress, String destDir,
|
||||||
{bool useExisting = true,
|
{bool useExisting = true,
|
||||||
Map<String, String>? headers,
|
Map<String, String>? headers,
|
||||||
int retries = 3}) async {
|
int retries = 3,
|
||||||
|
bool allowInsecure = false}) async {
|
||||||
try {
|
try {
|
||||||
return await downloadFile(
|
return await downloadFile(
|
||||||
url, fileName, fileNameHasExt, onProgress, destDir,
|
url, fileName, fileNameHasExt, onProgress, destDir,
|
||||||
useExisting: useExisting, headers: headers);
|
useExisting: useExisting,
|
||||||
|
headers: headers,
|
||||||
|
allowInsecure: allowInsecure);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (retries > 0 && e is ClientException) {
|
if (retries > 0 && e is ClientException) {
|
||||||
await Future.delayed(const Duration(seconds: 5));
|
await Future.delayed(const Duration(seconds: 5));
|
||||||
return await downloadFileWithRetry(
|
return await downloadFileWithRetry(
|
||||||
url, fileName, fileNameHasExt, onProgress, destDir,
|
url, fileName, fileNameHasExt, onProgress, destDir,
|
||||||
useExisting: useExisting, headers: headers, retries: (retries - 1));
|
useExisting: useExisting,
|
||||||
|
headers: headers,
|
||||||
|
retries: (retries - 1),
|
||||||
|
allowInsecure: allowInsecure);
|
||||||
} else {
|
} else {
|
||||||
rethrow;
|
rethrow;
|
||||||
}
|
}
|
||||||
@@ -173,11 +180,14 @@ String hashListOfLists(List<List<int>> data) {
|
|||||||
Future<String> checkPartialDownloadHashDynamic(String url,
|
Future<String> checkPartialDownloadHashDynamic(String url,
|
||||||
{int startingSize = 1024,
|
{int startingSize = 1024,
|
||||||
int lowerLimit = 128,
|
int lowerLimit = 128,
|
||||||
Map<String, String>? headers}) async {
|
Map<String, String>? headers,
|
||||||
|
bool allowInsecure = false}) async {
|
||||||
for (int i = startingSize; i >= lowerLimit; i -= 256) {
|
for (int i = startingSize; i >= lowerLimit; i -= 256) {
|
||||||
List<String> ab = await Future.wait([
|
List<String> ab = await Future.wait([
|
||||||
checkPartialDownloadHash(url, i, headers: headers),
|
checkPartialDownloadHash(url, i,
|
||||||
checkPartialDownloadHash(url, i, headers: headers)
|
headers: headers, allowInsecure: allowInsecure),
|
||||||
|
checkPartialDownloadHash(url, i,
|
||||||
|
headers: headers, allowInsecure: allowInsecure)
|
||||||
]);
|
]);
|
||||||
if (ab[0] == ab[1]) {
|
if (ab[0] == ab[1]) {
|
||||||
return ab[0];
|
return ab[0];
|
||||||
@@ -187,13 +197,13 @@ Future<String> checkPartialDownloadHashDynamic(String url,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<String> checkPartialDownloadHash(String url, int bytesToGrab,
|
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));
|
var req = Request('GET', Uri.parse(url));
|
||||||
if (headers != null) {
|
if (headers != null) {
|
||||||
req.headers.addAll(headers);
|
req.headers.addAll(headers);
|
||||||
}
|
}
|
||||||
req.headers[HttpHeaders.rangeHeader] = 'bytes=0-$bytesToGrab';
|
req.headers[HttpHeaders.rangeHeader] = 'bytes=0-$bytesToGrab';
|
||||||
var client = http.Client();
|
var client = IOClient(createHttpClient(allowInsecure));
|
||||||
var response = await client.send(req);
|
var response = await client.send(req);
|
||||||
if (response.statusCode < 200 || response.statusCode > 299) {
|
if (response.statusCode < 200 || response.statusCode > 299) {
|
||||||
throw ObtainiumError(response.reasonPhrase ?? tr('unexpectedError'));
|
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,
|
Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
|
||||||
Function? onProgress, String destDir,
|
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
|
// Send the initial request but cancel it as soon as you have the headers
|
||||||
var reqHeaders = headers ?? {};
|
var reqHeaders = headers ?? {};
|
||||||
var req = Request('GET', Uri.parse(url));
|
var req = Request('GET', Uri.parse(url));
|
||||||
req.headers.addAll(reqHeaders);
|
req.headers.addAll(reqHeaders);
|
||||||
var client = http.Client();
|
var client = IOClient(createHttpClient(allowInsecure));
|
||||||
StreamedResponse response = await client.send(req);
|
StreamedResponse response = await client.send(req);
|
||||||
var resHeaders = response.headers;
|
var resHeaders = response.headers;
|
||||||
|
|
||||||
@@ -275,7 +287,7 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
|
|||||||
IOSink? sink;
|
IOSink? sink;
|
||||||
if (rangeFeatureEnabled && fullContentLength != null && rangeStart > 0) {
|
if (rangeFeatureEnabled && fullContentLength != null && rangeStart > 0) {
|
||||||
client.close();
|
client.close();
|
||||||
client = http.Client();
|
client = IOClient(createHttpClient(allowInsecure));
|
||||||
req = Request('GET', Uri.parse(url));
|
req = Request('GET', Uri.parse(url));
|
||||||
req.headers.addAll(reqHeaders);
|
req.headers.addAll(reqHeaders);
|
||||||
req.headers.addAll({'range': 'bytes=$rangeStart-${fullContentLength - 1}'});
|
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,
|
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));
|
var req = http.Request('GET', Uri.parse(url));
|
||||||
if (headers != null) {
|
if (headers != null) {
|
||||||
req.headers.addAll(headers);
|
req.headers.addAll(headers);
|
||||||
}
|
}
|
||||||
var client = http.Client();
|
var client = IOClient(createHttpClient(allowInsecure));
|
||||||
var response = await client.send(req);
|
var response = await client.send(req);
|
||||||
if (response.statusCode < 200 || response.statusCode > 299) {
|
if (response.statusCode < 200 || response.statusCode > 299) {
|
||||||
throw ObtainiumError(response.reasonPhrase ?? tr('unexpectedError'));
|
throw ObtainiumError(response.reasonPhrase ?? tr('unexpectedError'));
|
||||||
@@ -363,6 +375,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
late Stream<FGBGType>? foregroundStream;
|
late Stream<FGBGType>? foregroundStream;
|
||||||
late StreamSubscription<FGBGType>? foregroundSubscription;
|
late StreamSubscription<FGBGType>? foregroundSubscription;
|
||||||
late Directory APKDir;
|
late Directory APKDir;
|
||||||
|
late Directory iconsCacheDir;
|
||||||
late SettingsProvider settingsProvider = SettingsProvider();
|
late SettingsProvider settingsProvider = SettingsProvider();
|
||||||
|
|
||||||
Iterable<AppInMemory> getAppValues() => apps.values.map((a) => a.deepCopy());
|
Iterable<AppInMemory> getAppValues() => apps.values.map((a) => a.deepCopy());
|
||||||
@@ -381,12 +394,21 @@ class AppsProvider with ChangeNotifier {
|
|||||||
var cacheDirs = await getExternalCacheDirectories();
|
var cacheDirs = await getExternalCacheDirectories();
|
||||||
if (cacheDirs?.isNotEmpty ?? false) {
|
if (cacheDirs?.isNotEmpty ?? false) {
|
||||||
APKDir = cacheDirs!.first;
|
APKDir = cacheDirs!.first;
|
||||||
|
iconsCacheDir = Directory('${cacheDirs.first.path}/icons');
|
||||||
|
if (!iconsCacheDir.existsSync()) {
|
||||||
|
iconsCacheDir.createSync();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
APKDir =
|
APKDir =
|
||||||
Directory('${(await getExternalStorageDirectory())!.path}/apks');
|
Directory('${(await getExternalStorageDirectory())!.path}/apks');
|
||||||
if (!APKDir.existsSync()) {
|
if (!APKDir.existsSync()) {
|
||||||
APKDir.createSync();
|
APKDir.createSync();
|
||||||
}
|
}
|
||||||
|
iconsCacheDir =
|
||||||
|
Directory('${(await getExternalStorageDirectory())!.path}/icons');
|
||||||
|
if (!iconsCacheDir.existsSync()) {
|
||||||
|
iconsCacheDir.createSync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!isBg) {
|
if (!isBg) {
|
||||||
// Load Apps into memory (in background processes, this is done later instead of in the constructor)
|
// 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);
|
notificationsProvider?.notify(notif);
|
||||||
}
|
}
|
||||||
prevProg = prog;
|
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'
|
// Set to 90 for remaining steps, will make null in 'finally'
|
||||||
if (apps[app.id] != null) {
|
if (apps[app.id] != null) {
|
||||||
apps[app.id]!.downloadProgress = -1;
|
apps[app.id]!.downloadProgress = -1;
|
||||||
@@ -855,22 +879,20 @@ class AppsProvider with ChangeNotifier {
|
|||||||
apps[id]?.installedInfo == null ? context : null;
|
apps[id]?.installedInfo == null ? context : null;
|
||||||
bool needBGWorkaround =
|
bool needBGWorkaround =
|
||||||
willBeSilent && context == null && !settingsProvider.useShizuku;
|
willBeSilent && context == null && !settingsProvider.useShizuku;
|
||||||
|
bool shizukuPretendToBeGooglePlay = settingsProvider
|
||||||
|
.shizukuPretendToBeGooglePlay ||
|
||||||
|
apps[id]!.app.additionalSettings['shizukuPretendToBeGooglePlay'] ==
|
||||||
|
true;
|
||||||
if (downloadedFile != null) {
|
if (downloadedFile != null) {
|
||||||
if (needBGWorkaround) {
|
if (needBGWorkaround) {
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
installApk(downloadedFile, contextIfNewInstall,
|
installApk(downloadedFile, contextIfNewInstall,
|
||||||
needsBGWorkaround: true,
|
needsBGWorkaround: true,
|
||||||
shizukuPretendToBeGooglePlay: apps[id]!
|
shizukuPretendToBeGooglePlay: shizukuPretendToBeGooglePlay);
|
||||||
.app
|
|
||||||
.additionalSettings['shizukuPretendToBeGooglePlay'] ==
|
|
||||||
true);
|
|
||||||
} else {
|
} else {
|
||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
sayInstalled = await installApk(downloadedFile, contextIfNewInstall,
|
sayInstalled = await installApk(downloadedFile, contextIfNewInstall,
|
||||||
shizukuPretendToBeGooglePlay: apps[id]!
|
shizukuPretendToBeGooglePlay: shizukuPretendToBeGooglePlay);
|
||||||
.app
|
|
||||||
.additionalSettings['shizukuPretendToBeGooglePlay'] ==
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (needBGWorkaround) {
|
if (needBGWorkaround) {
|
||||||
@@ -881,10 +903,7 @@ class AppsProvider with ChangeNotifier {
|
|||||||
// ignore: use_build_context_synchronously
|
// ignore: use_build_context_synchronously
|
||||||
sayInstalled = await installXApkDir(
|
sayInstalled = await installXApkDir(
|
||||||
downloadedDir!, contextIfNewInstall,
|
downloadedDir!, contextIfNewInstall,
|
||||||
shizukuPretendToBeGooglePlay: apps[id]!
|
shizukuPretendToBeGooglePlay: shizukuPretendToBeGooglePlay);
|
||||||
.app
|
|
||||||
.additionalSettings['shizukuPretendToBeGooglePlay'] ==
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (willBeSilent && context == null) {
|
if (willBeSilent && context == null) {
|
||||||
@@ -967,11 +986,16 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
for (var res in downloadResults) {
|
for (var res in downloadResults) {
|
||||||
if (!errors.appIdNames.containsKey(res['id'])) {
|
if (!errors.appIdNames.containsKey(res['id'])) {
|
||||||
await installFn(
|
try {
|
||||||
res['id'] as String,
|
await installFn(
|
||||||
res['willBeSilent'] as bool,
|
res['id'] as String,
|
||||||
res['downloadedFile'] as DownloadedApk?,
|
res['willBeSilent'] as bool,
|
||||||
res['downloadedDir'] as DownloadedXApkDir?);
|
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 +1055,8 @@ class AppsProvider with ChangeNotifier {
|
|||||||
.getRequestHeaders(app.additionalSettings,
|
.getRequestHeaders(app.additionalSettings,
|
||||||
forAPKDownload:
|
forAPKDownload:
|
||||||
fileUrl.key.endsWith('.apk') ? true : false),
|
fileUrl.key.endsWith('.apk') ? true : false),
|
||||||
useExisting: false);
|
useExisting: false,
|
||||||
|
allowInsecure: app.additionalSettings['allowInsecure'] == true);
|
||||||
notificationsProvider
|
notificationsProvider
|
||||||
.notify(DownloadedNotification(fileUrl.key, fileUrl.value));
|
.notify(DownloadedNotification(fileUrl.key, fileUrl.value));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@@ -1277,10 +1302,16 @@ class AppsProvider with ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updateAppIcon(String? appId) async {
|
Future<void> updateAppIcon(String? appId, {bool ignoreCache = false}) async {
|
||||||
if (apps[appId]?.icon == null) {
|
if (apps[appId]?.icon == null) {
|
||||||
var icon =
|
var cachedIcon = File('${iconsCacheDir.path}/$appId.png');
|
||||||
(await apps[appId]?.installedInfo?.applicationInfo?.getAppIcon());
|
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) {
|
if (icon != null) {
|
||||||
apps.update(
|
apps.update(
|
||||||
apps[appId]!.app.id,
|
apps[appId]!.app.id,
|
||||||
@@ -1578,12 +1609,13 @@ class AppsProvider with ChangeNotifier {
|
|||||||
}
|
}
|
||||||
String? returnPath;
|
String? returnPath;
|
||||||
if (!pickOnly) {
|
if (!pickOnly) {
|
||||||
|
var encoder = const JsonEncoder.withIndent(" ");
|
||||||
Map<String, dynamic> finalExport = generateExportJSON();
|
Map<String, dynamic> finalExport = generateExportJSON();
|
||||||
var result = await saf.createFile(exportDir,
|
var result = await saf.createFile(exportDir,
|
||||||
displayName:
|
displayName:
|
||||||
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
|
'${tr('obtainiumExportHyphenatedLowercase')}-${DateTime.now().toIso8601String().replaceAll(':', '-')}${isAuto ? '-auto' : ''}.json',
|
||||||
mimeType: 'application/json',
|
mimeType: 'application/json',
|
||||||
bytes: Uint8List.fromList(utf8.encode(jsonEncode(finalExport))));
|
bytes: Uint8List.fromList(utf8.encode(encoder.convert(finalExport))));
|
||||||
if (result == null) {
|
if (result == null) {
|
||||||
throw ObtainiumError(tr('unexpectedError'));
|
throw ObtainiumError(tr('unexpectedError'));
|
||||||
}
|
}
|
||||||
|
@@ -48,7 +48,7 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get useShizuku{
|
bool get useShizuku {
|
||||||
return prefs?.getBool('useShizuku') ?? false;
|
return prefs?.getBool('useShizuku') ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,8 +69,7 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
|
|
||||||
Color get themeColor {
|
Color get themeColor {
|
||||||
int? colorCode = prefs?.getInt('themeColor');
|
int? colorCode = prefs?.getInt('themeColor');
|
||||||
return (colorCode != null) ?
|
return (colorCode != null) ? Color(colorCode) : obtainiumThemeColor;
|
||||||
Color(colorCode) : obtainiumThemeColor;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
set themeColor(Color themeColor) {
|
set themeColor(Color themeColor) {
|
||||||
@@ -469,4 +468,13 @@ class SettingsProvider with ChangeNotifier {
|
|||||||
prefs?.setBool('beforeNewInstallsShareToAppVerifier', val);
|
prefs?.setBool('beforeNewInstallsShareToAppVerifier', val);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool get shizukuPretendToBeGooglePlay {
|
||||||
|
return prefs?.getBool('shizukuPretendToBeGooglePlay') ?? false;
|
||||||
|
}
|
||||||
|
|
||||||
|
set shizukuPretendToBeGooglePlay(bool val) {
|
||||||
|
prefs?.setBool('shizukuPretendToBeGooglePlay', val);
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -2,11 +2,13 @@
|
|||||||
// AppSource is an abstract class with a concrete implementation for each source
|
// AppSource is an abstract class with a concrete implementation for each source
|
||||||
|
|
||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:device_info_plus/device_info_plus.dart';
|
import 'package:device_info_plus/device_info_plus.dart';
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:html/dom.dart';
|
import 'package:html/dom.dart';
|
||||||
import 'package:http/http.dart';
|
import 'package:http/http.dart';
|
||||||
|
import 'package:http/io_client.dart';
|
||||||
import 'package:obtainium/app_sources/apkmirror.dart';
|
import 'package:obtainium/app_sources/apkmirror.dart';
|
||||||
import 'package:obtainium/app_sources/apkpure.dart';
|
import 'package:obtainium/app_sources/apkpure.dart';
|
||||||
import 'package:obtainium/app_sources/aptoide.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/sourcehut.dart';
|
||||||
import 'package:obtainium/app_sources/steammobile.dart';
|
import 'package:obtainium/app_sources/steammobile.dart';
|
||||||
import 'package:obtainium/app_sources/telegramapp.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/uptodown.dart';
|
||||||
import 'package:obtainium/app_sources/vlc.dart';
|
import 'package:obtainium/app_sources/vlc.dart';
|
||||||
import 'package:obtainium/app_sources/whatsapp.dart';
|
import 'package:obtainium/app_sources/whatsapp.dart';
|
||||||
@@ -399,9 +402,19 @@ getSourceRegex(List<String> hosts) {
|
|||||||
return '(${hosts.join('|').replaceAll('.', '\\.')})';
|
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 {
|
abstract class AppSource {
|
||||||
List<String> hosts = [];
|
List<String> hosts = [];
|
||||||
bool hostChanged = false;
|
bool hostChanged = false;
|
||||||
|
bool hostIdenticalDespiteAnyChange = false;
|
||||||
late String name;
|
late String name;
|
||||||
bool enforceTrackOnly = false;
|
bool enforceTrackOnly = false;
|
||||||
bool changeLogIfAnyIsMarkDown = true;
|
bool changeLogIfAnyIsMarkDown = true;
|
||||||
@@ -454,17 +467,25 @@ abstract class AppSource {
|
|||||||
|
|
||||||
Future<Response> sourceRequest(
|
Future<Response> sourceRequest(
|
||||||
String url, Map<String, dynamic> additionalSettings,
|
String url, Map<String, dynamic> additionalSettings,
|
||||||
{bool followRedirects = true}) async {
|
{bool followRedirects = true, Object? postBody}) async {
|
||||||
var requestHeaders = await getRequestHeaders(additionalSettings);
|
var requestHeaders = await getRequestHeaders(additionalSettings);
|
||||||
if (requestHeaders != null || followRedirects == false) {
|
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;
|
req.followRedirects = followRedirects;
|
||||||
if (requestHeaders != null) {
|
if (requestHeaders != null) {
|
||||||
req.headers.addAll(requestHeaders);
|
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 {
|
} else {
|
||||||
return get(Uri.parse(url));
|
return postBody == null
|
||||||
|
? get(Uri.parse(url))
|
||||||
|
: post(Uri.parse(url), body: jsonEncode(postBody));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -472,7 +493,7 @@ abstract class AppSource {
|
|||||||
//
|
//
|
||||||
}
|
}
|
||||||
|
|
||||||
String sourceSpecificStandardizeURL(String url) {
|
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
|
||||||
throw NotImplementedError();
|
throw NotImplementedError();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -538,6 +559,10 @@ abstract class AppSource {
|
|||||||
GeneratedFormSwitch('shizukuPretendToBeGooglePlay',
|
GeneratedFormSwitch('shizukuPretendToBeGooglePlay',
|
||||||
label: tr('shizukuPretendToBeGooglePlay'), defaultValue: false)
|
label: tr('shizukuPretendToBeGooglePlay'), defaultValue: false)
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch('allowInsecure',
|
||||||
|
label: tr('allowInsecure'), defaultValue: false)
|
||||||
|
],
|
||||||
[
|
[
|
||||||
GeneratedFormSwitch('exemptFromBackgroundUpdates',
|
GeneratedFormSwitch('exemptFromBackgroundUpdates',
|
||||||
label: tr('exemptFromBackgroundUpdates'))
|
label: tr('exemptFromBackgroundUpdates'))
|
||||||
@@ -604,9 +629,10 @@ abstract class AppSource {
|
|||||||
SettingsProvider settingsProvider) async {
|
SettingsProvider settingsProvider) async {
|
||||||
Map<String, String> results = {};
|
Map<String, String> results = {};
|
||||||
for (var e in sourceConfigSettingFormItems) {
|
for (var e in sourceConfigSettingFormItems) {
|
||||||
var val = hostChanged
|
var val = hostChanged && !hostIdenticalDespiteAnyChange
|
||||||
? additionalSettings[e.key]
|
? additionalSettings[e.key]
|
||||||
: settingsProvider.getSettingString(e.key);
|
: additionalSettings[e.key] ??
|
||||||
|
settingsProvider.getSettingString(e.key);
|
||||||
if (val != null) {
|
if (val != null) {
|
||||||
results[e.key] = val;
|
results[e.key] = val;
|
||||||
}
|
}
|
||||||
@@ -765,6 +791,7 @@ class SourceProvider {
|
|||||||
Aptoide(),
|
Aptoide(),
|
||||||
Uptodown(),
|
Uptodown(),
|
||||||
HuaweiAppGallery(),
|
HuaweiAppGallery(),
|
||||||
|
Tencent(),
|
||||||
Jenkins(),
|
Jenkins(),
|
||||||
APKMirror(),
|
APKMirror(),
|
||||||
Signal(),
|
Signal(),
|
||||||
@@ -788,9 +815,14 @@ class SourceProvider {
|
|||||||
throw UnsupportedURLError();
|
throw UnsupportedURLError();
|
||||||
}
|
}
|
||||||
var res = srcs.first;
|
var res = srcs.first;
|
||||||
res.hosts = [Uri.parse(url).host];
|
var originalHosts = res.hosts;
|
||||||
|
var newHost = Uri.parse(url).host;
|
||||||
|
res.hosts = [newHost];
|
||||||
res.hostChanged = true;
|
res.hostChanged = true;
|
||||||
return srcs.first;
|
if (originalHosts.contains(newHost)) {
|
||||||
|
res.hostIdenticalDespiteAnyChange = true;
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
AppSource? source;
|
AppSource? source;
|
||||||
for (var s in sources.where((element) => element.hosts.isNotEmpty)) {
|
for (var s in sources.where((element) => element.hosts.isNotEmpty)) {
|
||||||
@@ -809,7 +841,7 @@ class SourceProvider {
|
|||||||
for (var s in sources.where(
|
for (var s in sources.where(
|
||||||
(element) => element.hosts.isEmpty && !element.neverAutoSelect)) {
|
(element) => element.hosts.isEmpty && !element.neverAutoSelect)) {
|
||||||
try {
|
try {
|
||||||
s.sourceSpecificStandardizeURL(url);
|
s.sourceSpecificStandardizeURL(url, forSelection: true);
|
||||||
source = s;
|
source = s;
|
||||||
break;
|
break;
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
100
pubspec.lock
100
pubspec.lock
@@ -47,10 +47,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: app_links
|
name: app_links
|
||||||
sha256: "4acba851087b25136e8f6e32a53bd4536eb3bec69947ddb66e7b9a5792ceb0c7"
|
sha256: ad1a6d598e7e39b46a34f746f9a8b011ee147e4c275d407fa457e7a62f84dd99
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.2.0"
|
version: "6.3.2"
|
||||||
app_links_linux:
|
app_links_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -103,10 +103,10 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: background_fetch
|
name: background_fetch
|
||||||
sha256: b5c298c911bc2ce41152668bc72eb0488f0665d75bc6d1e69e7d8367763eddcd
|
sha256: e9f26ae54d88310b7ac2a68f2f9fcee0081a4d5f11100f233a70702021e7ac4f
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.5"
|
version: "1.3.7"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -303,18 +303,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flex_color_picker
|
name: flex_color_picker
|
||||||
sha256: "809af4ec82ede3b140ed0219b97d548de99e47aa4b99b14a10f705a2dbbcba5e"
|
sha256: "12dc855ae8ef5491f529b1fc52c655f06dcdf4114f1f7fdecafa41eec2ec8d79"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.5.1"
|
version: "3.6.0"
|
||||||
flex_seed_scheme:
|
flex_seed_scheme:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flex_seed_scheme
|
name: flex_seed_scheme
|
||||||
sha256: cc08c81879ecfd2ab840664ce4770980da0b8a319e35f51bcf763849b7f7596b
|
sha256: "7639d2c86268eff84a909026eb169f008064af0fb3696a651b24b0fa24a40334"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.2"
|
version: "3.4.1"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -388,26 +388,26 @@ packages:
|
|||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_launcher_icons
|
name: flutter_launcher_icons
|
||||||
sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea"
|
sha256: "619817c4b65b322b5104b6bb6dfe6cda62d9729bd7ad4303ecc8b4e690a67a77"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.13.1"
|
version: "0.14.1"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
name: flutter_lints
|
name: flutter_lints
|
||||||
sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c"
|
sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.0"
|
version: "5.0.0"
|
||||||
flutter_local_notifications:
|
flutter_local_notifications:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_local_notifications
|
name: flutter_local_notifications
|
||||||
sha256: c500d5d9e7e553f06b61877ca6b9c8b92c570a4c8db371038702e8ce57f8a50f
|
sha256: "49eeef364fddb71515bc78d5a8c51435a68bccd6e4d68e25a942c5e47761ae71"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "17.2.2"
|
version: "17.2.3"
|
||||||
flutter_local_notifications_linux:
|
flutter_local_notifications_linux:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -433,18 +433,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_markdown
|
name: flutter_markdown
|
||||||
sha256: a23c41ee57573e62fc2190a1f36a0480c4d90bde3a8a8d7126e5d5992fb53fb7
|
sha256: e17575ca576a34b46c58c91f9948891117a1bd97815d2e661813c7f90c647a78
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.3+1"
|
version: "0.7.3+2"
|
||||||
flutter_plugin_android_lifecycle:
|
flutter_plugin_android_lifecycle:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_plugin_android_lifecycle
|
name: flutter_plugin_android_lifecycle
|
||||||
sha256: "9d98bd47ef9d34e803d438f17fd32b116d31009f534a6fa5ce3a1167f189a6de"
|
sha256: "9ee02950848f61c4129af3d6ec84a1cfc0e47931abc746b03e7a3bc3e8ff6eda"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.21"
|
version: "2.0.22"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
@@ -571,10 +571,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: lints
|
name: lints
|
||||||
sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235"
|
sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.0"
|
version: "5.0.0"
|
||||||
markdown:
|
markdown:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@@ -611,10 +611,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: mime
|
name: mime
|
||||||
sha256: "2e123074287cc9fd6c09de8336dae606d1ddb88d9ac47358826db698c176a1f2"
|
sha256: "801fd0b26f14a4a58ccb09d5892c3fbdeff209594300a542492cf13fba9d247a"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.5"
|
version: "1.0.6"
|
||||||
nested:
|
nested:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -715,18 +715,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_html
|
name: permission_handler_html
|
||||||
sha256: d220eb8476b466d58b161e10b3001d93999010a26228a3fb89c4280db1249546
|
sha256: af26edbbb1f2674af65a8f4b56e1a6f526156bc273d0e65dd8075fab51c78851
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.1.3+1"
|
version: "0.1.3+2"
|
||||||
permission_handler_platform_interface:
|
permission_handler_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: permission_handler_platform_interface
|
name: permission_handler_platform_interface
|
||||||
sha256: fe0ffe274d665be8e34f9c59705441a7d248edebbe5d9e3ec2665f88b79358ea
|
sha256: e9c8eadee926c4532d0305dff94b85bf961f16759c3af791486613152af4b4f9
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.2.2"
|
version: "4.2.3"
|
||||||
permission_handler_windows:
|
permission_handler_windows:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -827,10 +827,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: shared_preferences_android
|
name: shared_preferences_android
|
||||||
sha256: a7e8467e9181cef109f601e3f65765685786c1a738a83d7fbbde377589c0d974
|
sha256: "480ba4345773f56acda9abf5f50bd966f581dac5d514e5fc4a18c62976bbba7e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.1"
|
version: "2.3.2"
|
||||||
shared_preferences_foundation:
|
shared_preferences_foundation:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -913,18 +913,18 @@ packages:
|
|||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: sqflite
|
name: sqflite
|
||||||
sha256: a43e5a27235518c03ca238e7b4732cf35eabe863a369ceba6cbefa537a66f16d
|
sha256: ff5a2436ef8ebdfda748fbfe957f9981524cb5ff11e7bafa8c42771840e8a788
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.3.3+1"
|
version: "2.3.3+2"
|
||||||
sqflite_common:
|
sqflite_common:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: sqflite_common
|
name: sqflite_common
|
||||||
sha256: "7b41b6c3507854a159e24ae90a8e3e9cc01eb26a477c118d6dca065b5f55453e"
|
sha256: "2d8e607db72e9cb7748c9c6e739e2c9618320a5517de693d5a24609c4671b1a4"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.4+2"
|
version: "2.5.4+4"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -953,10 +953,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: synchronized
|
name: synchronized
|
||||||
sha256: a824e842b8a054f91a728b783c177c1e4731f6b124f9192468457a8913371255
|
sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.3.0+3"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1001,10 +1001,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_android
|
name: url_launcher_android
|
||||||
sha256: f0c73347dfcfa5b3db8bc06e1502668265d39c08f310c29bff4e28eea9699f79
|
sha256: e35a698ac302dd68e41f73250bd9517fe3ab5fa4f18fe4647a0872db61bacbab
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "6.3.9"
|
version: "6.3.10"
|
||||||
url_launcher_ios:
|
url_launcher_ios:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1025,10 +1025,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: url_launcher_macos
|
name: url_launcher_macos
|
||||||
sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de"
|
sha256: "769549c999acdb42b8bcfa7c43d72bf79a382ca7441ab18a808e101149daf672"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.2.0"
|
version: "3.2.1"
|
||||||
url_launcher_platform_interface:
|
url_launcher_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1057,10 +1057,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: uuid
|
name: uuid
|
||||||
sha256: "83d37c7ad7aaf9aa8e275490669535c8080377cfa7a7004c24dfac53afffaa90"
|
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.4.2"
|
version: "4.5.1"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1073,34 +1073,34 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: f652077d0bdf60abe4c1f6377448e8655008eef28f128bc023f7b5e8dfeb48fc
|
sha256: "5c5f338a667b4c644744b661f309fb8080bb94b18a7e91ef1dbd343bed00ed6d"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "14.2.4"
|
version: "14.2.5"
|
||||||
web:
|
web:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: web
|
name: web
|
||||||
sha256: d43c1d6b787bf0afad444700ae7f4db8827f701bc61c255ac8d328c6f4d52062
|
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.0"
|
version: "1.1.0"
|
||||||
webview_flutter:
|
webview_flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: webview_flutter
|
name: webview_flutter
|
||||||
sha256: "6869c8786d179f929144b4a1f86e09ac0eddfe475984951ea6c634774c16b522"
|
sha256: ec81f57aa1611f8ebecf1d2259da4ef052281cb5ad624131c93546c79ccc7736
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.8.0"
|
version: "4.9.0"
|
||||||
webview_flutter_android:
|
webview_flutter_android:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: webview_flutter_android
|
name: webview_flutter_android
|
||||||
sha256: c66651fba15f9d7ddd31daec42da8d6bce46c85610a7127e3ebcb39a4395c3c9
|
sha256: ed021f27ae621bc97a6019fb601ab16331a3db4bf8afa305e9f6689bdb3edced
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.16.6"
|
version: "3.16.8"
|
||||||
webview_flutter_platform_interface:
|
webview_flutter_platform_interface:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1129,10 +1129,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32_registry
|
name: win32_registry
|
||||||
sha256: "723b7f851e5724c55409bb3d5a32b203b3afe8587eaf5dafb93a5fed8ecda0d6"
|
sha256: "21ec76dfc731550fd3e2ce7a33a9ea90b828fdf19a5c3bcf556fa992cfa99852"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.4"
|
version: "1.1.5"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
@@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||||
# In Windows, build-name is used as the major, minor, and patch parts
|
# In Windows, build-name is used as the major, minor, and patch parts
|
||||||
# of the product and file versions while build-number is used as the build suffix.
|
# of the product and file versions while build-number is used as the build suffix.
|
||||||
version: 1.1.20+2277
|
version: 1.1.26+2283
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: '>=3.0.0 <4.0.0'
|
sdk: '>=3.0.0 <4.0.0'
|
||||||
@@ -84,14 +84,14 @@ dependencies:
|
|||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
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
|
# The "flutter_lints" package below contains a set of recommended lints to
|
||||||
# encourage good coding practices. The lint set provided by the package is
|
# 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
|
# activated in the `analysis_options.yaml` file located at the root of your
|
||||||
# package. See that file for information about deactivating specific lint
|
# package. See that file for information about deactivating specific lint
|
||||||
# rules and activating additional ones.
|
# rules and activating additional ones.
|
||||||
flutter_lints: ^4.0.0
|
flutter_lints: ^5.0.0
|
||||||
|
|
||||||
flutter_launcher_icons:
|
flutter_launcher_icons:
|
||||||
android: "ic_launcher"
|
android: "ic_launcher"
|
||||||
|
Reference in New Issue
Block a user