Compare commits

...

60 Commits

Author SHA1 Message Date
Imran
e8f9159571 Merge pull request #2455 from ImranR98/dev
Fix "Bad state" bug on mark as updated/installed (#2453)
2025-08-06 18:39:36 -04:00
Imran Remtulla
d8cd17c858 Increment version 2025-08-06 18:38:50 -04:00
Imran
01f423a741 Merge pull request #2447 from ar-lex/bugfix/rustore-charset
RuStore: fix charset detection (#2304)
2025-08-06 18:38:25 -04:00
Imran Remtulla
77e764e76a Fix "Bad state" but on mark as updated/installed (#2453) 2025-08-06 18:37:11 -04:00
Imran Remtulla
a37509c5a3 Merge remote-tracking branch 'origin/dev' 2025-08-04 15:24:00 -04:00
Imran Remtulla
cb9ac4cba0 Include launch.json in git 2025-08-04 15:23:44 -04:00
Alexey Arutyunov
9524148de7 RuStore: fix charset detection (#2304)
Decode whole response body in bytes and fallback to UTF-8 instead
of auto-decoding individual fields.
2025-08-03 01:45:55 +02:00
Imran
d6d3623c63 Merge pull request #2443 from summoner001/main
Translation: Update hu.json
2025-08-02 16:51:28 -04:00
Imran
58c1bdbd00 Merge pull request #2446 from ar-lex/bugfix/rustore-updatedat
Fix update date for RuStore (#2445)
2025-08-02 16:51:17 -04:00
Alexey Arutyunov
f2b7b196a8 Fix update date for RuStore (#2445) 2025-08-02 21:20:29 +02:00
summoner
73746bcb52 Translation: Update hu.json
Fixing autotranslated strings
2025-08-02 10:38:31 +00:00
Imran
7262750124 Merge pull request #2439 from ImranR98/dev
- Restore Oxford comma but only for English (#2245)
- Minor bug in F-Droid variant (#2373)
- Minor language-specific case tweaks (#2396)
- Add "de/select all" button to multi-select menus (#2401)
- Minor wording changes (#2402, #2406)
- Allow excluding secret values from export file (#2430)
- Added farsroid.com as a source (#2435)
- Don't init the foreground service unless it is needed (#2437)
- Fix occasional RangeError after importing apps (#2438)
2025-08-01 18:16:53 -04:00
Imran Remtulla
851c228e76 Merge remote-tracking branch 'origin/main' into dev 2025-08-01 18:13:06 -04:00
Imran
aa3b874733 Merge pull request #2431 from summoner001/main
Update hu.json
2025-08-01 18:12:02 -04:00
Imran
04c4f0c291 Merge pull request #2433 from Fjuro/patch-1
Update Czech translations
2025-08-01 18:11:51 -04:00
Imran
8eedafe4cf Merge branch 'main' into patch-1 2025-08-01 18:11:31 -04:00
Imran
6d136808e0 Merge pull request #2436 from shimeoki/fix/settings-slider-lowercase/main
Use lowercase in settings slider
2025-08-01 18:10:20 -04:00
Imran Remtulla
0f726889c8 Increment version, upgrade Flutter + packages 2025-08-01 18:09:23 -04:00
Imran Remtulla
3e73156f78 Minor language-specific case tweaks (#2396) 2025-08-01 17:59:15 -04:00
Imran Remtulla
89d853a948 Added farsroid.com as a source (#2435) 2025-08-01 17:50:16 -04:00
Imran Remtulla
8f9978aadd Fix occasional RangeError after importing apps (#2438) 2025-08-01 16:46:17 -04:00
Imran Remtulla
8204a16e90 Allow excluding secret values from export file (#2430) 2025-08-01 15:52:39 -04:00
Imran Remtulla
75430573f3 Add "de/select all" button to multi-select menus (#2401) 2025-08-01 14:52:54 -04:00
Imran Remtulla
f71e97f6e2 Minor wording changes (#2402, #2406) 2025-08-01 14:06:00 -04:00
Imran Remtulla
93380f4229 Minor bug in F-Droid variant (#2373) 2025-08-01 12:09:03 -04:00
Imran Remtulla
6495987248 Restore Oxford comma but only for English (#2245) 2025-08-01 11:57:50 -04:00
Imran Remtulla
69904265c9 Don't init the foreground service unless it is needed (#2437) 2025-08-01 11:56:53 -04:00
shimeoki
85e05b75ee fix: lowercase in vi.json 2025-07-30 13:32:20 +03:00
shimeoki
c5b077e395 fix: lowercase in tr.json 2025-07-30 13:31:24 +03:00
shimeoki
bafd27f1e5 fix: lowercase in sv.json 2025-07-30 13:30:16 +03:00
shimeoki
ae537758aa fix: lowercase in pt.json 2025-07-30 13:29:25 +03:00
shimeoki
6c995df40a fix: lowercase in fr.json 2025-07-30 13:28:11 +03:00
shimeoki
14d1c71d7e fix: lowercase in en-EO.json 2025-07-30 13:27:01 +03:00
shimeoki
e2e6038291 fix: lowercase in da.json 2025-07-30 13:25:18 +03:00
shimeoki
cb18cd360c fix: lowercase in cs.json 2025-07-30 13:24:29 +03:00
shimeoki
b203934f10 fix: lowercase in ca.json 2025-07-30 13:23:18 +03:00
shimeoki
64e49a1129 fix: lowercase in en.json 2025-07-30 13:21:48 +03:00
Fjuro
bc8f4bfe70 Update translations 2025-07-26 13:06:12 +02:00
summoner
4f3b517aaf Update hu.json
Fix writing and spelling (tároló) of the word repository in translation
2025-07-26 07:54:00 +00:00
Imran
71bf23a110 Merge pull request #2427 from ImranR98/dev
Stop accidentally sharing GitHub/GitLab PATs with Codeberg, Mullvad (#2423)
2025-07-25 09:51:56 -04:00
Imran
544a1d6711 Merge pull request #2397 from Nassau123/patch-1
Patch 1
2025-07-25 09:51:17 -04:00
Imran
d43370e7f5 Delete .devcontainer/devcontainer.json 2025-07-25 09:51:02 -04:00
Imran Remtulla
c3c0525ab6 Upgrade Flutter + packages, increment version 2025-07-25 09:45:19 -04:00
Imran Remtulla
4680401808 Stop accidentally sharing GitHub/GitLab PATs with Codeberg, Mullvad (#2423) 2025-07-25 09:37:43 -04:00
Imran Remtulla
48a8ebabbb Merge remote-tracking branch 'origin/main' into dev 2025-07-20 14:32:48 -04:00
Imran
a3f0805b8e Merge pull request #2413 from LilligantMatsuri/dev
feat(i18n): Update Simplified Chinese translation
2025-07-20 14:05:21 -04:00
Imran
cdca4f765c Merge pull request #2400 from summoner001/main
Update hu.json
2025-07-20 14:05:13 -04:00
Imran
84a1ec492c Merge pull request #2394 from Cambrells/main
Update ca.json
2025-07-20 14:05:06 -04:00
Imran
ae69931896 Merge pull request #2391 from solokot/main
Update ru.json
2025-07-20 14:04:59 -04:00
Imran
a6f348c334 Merge pull request #2389 from DwainZwerg/main
Update de.json
2025-07-20 14:04:51 -04:00
Imran
f17d729a2a Merge pull request #2388 from bluefly000/japanese-translation
Update ja.json
2025-07-20 14:04:05 -04:00
Matsuri
dcdf7046a6 feat(i18n): Update Simplified Chinese translation
- Translate new strings
- Correct inaccurate translations
- Other trivial improvements

Signed-off-by: Matsuri <matsuri@vmoe.info>
2025-07-19 12:00:00 +08:00
summoner
9ebbb43dc0 Update hu.json
Fix translation of new strings.
Correct a few mistakes, and sentence rewording/retranslating
2025-07-11 11:42:54 +00:00
Nassau123
58c24ec6de Create devcontainer.json 2025-07-09 04:59:29 +03:00
Cambrells
3636e287fd Update ca.json 2025-07-05 13:53:20 +02:00
solokot
f2c80e38dc Update ru.json 2025-07-03 19:21:06 +03:00
DwainZwerg
4490da37c9 Update de.json
more fixes
2025-07-03 16:50:43 +02:00
bluefly000
e9a24a46c7 Update ja.json 2025-07-03 19:06:08 +09:00
bluefly000
660fc2b9fe Merge branch 'ImranR98:main' into japanese-translation 2025-07-03 18:50:43 +09:00
bluefly000
6e631684fb Update ja.json 2025-04-27 14:22:03 +09:00
51 changed files with 653 additions and 396 deletions

5
.gitignore vendored
View File

@@ -11,7 +11,8 @@
.svn/ .svn/
.swiftpm/ .swiftpm/
migrate_working_dir/ migrate_working_dir/
.vscode/ .vscode/*
!.vscode/launch.json
# IntelliJ related # IntelliJ related
*.iml *.iml
@@ -46,6 +47,8 @@ app.*.map.json
/android/app/profile /android/app/profile
/android/app/release /android/app/release
/android/app/.cxx /android/app/.cxx
/android/build/reports
/android/.kotlin
# Custom # Custom
TODO.txt TODO.txt

28
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,28 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Obtainium",
"request": "launch",
"type": "dart",
"args":[ "--flavor", "normal" ]
},
{
"name": "Obtainium (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile",
"args":[ "--flavor", "normal" ]
},
{
"name": "Obtainium (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release",
"args":[ "--flavor", "normal" ]
}
]
}

View File

@@ -33,6 +33,7 @@ Currently supported App sources:
- [CoolApk](https://coolapk.com/) - [CoolApk](https://coolapk.com/)
- [vivo App Store (CN)](https://h5.appstore.vivo.com.cn/) - [vivo App Store (CN)](https://h5.appstore.vivo.com.cn/)
- [RuStore](https://rustore.ru/) - [RuStore](https://rustore.ru/)
- [Farsroid](https://www.farsroid.com)
- Jenkins Jobs - Jenkins Jobs
- [APKMirror](https://apkmirror.com/) (Track-Only) - [APKMirror](https://apkmirror.com/) (Track-Only)
- Other - App-Specific: - Other - App-Specific:

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "تعطيل تصحيح الإصدار (يبدو أن الملحق لا يعمل)", "versionCorrectionDisabled": "تعطيل تصحيح الإصدار (يبدو أن الملحق لا يعمل)",
"unknown": "غير معروف", "unknown": "غير معروف",
"none": "لا شيء", "none": "لا شيء",
"all": "الكل",
"never": "أبدًا", "never": "أبدًا",
"latestVersionX": "الأحدث: {}", "latestVersionX": "الأحدث: {}",
"installedVersionX": "المثبت: {}", "installedVersionX": "المثبت: {}",
@@ -333,6 +334,7 @@
"foregroundService": "الحصول على خدمة الحصول على خدمة المقدمة", "foregroundService": "الحصول على خدمة الحصول على خدمة المقدمة",
"foregroundServiceExplanation": "استخدام خدمة مقدمة للتحقق من التحديثات (أكثر موثوقية وتستهلك طاقة أكبر)", "foregroundServiceExplanation": "استخدام خدمة مقدمة للتحقق من التحديثات (أكثر موثوقية وتستهلك طاقة أكبر)",
"fgServiceNotice": "هذا الإشعار مطلوب للتحقق من التحديث في الخلفية (يمكن إخفاؤه في إعدادات نظام التشغيل)", "fgServiceNotice": "هذا الإشعار مطلوب للتحقق من التحديث في الخلفية (يمكن إخفاؤه في إعدادات نظام التشغيل)",
"excludeSecrets": "استبعاد الأسرار",
"removeAppQuestion": { "removeAppQuestion": {
"one": "إزالة التطبيق؟", "one": "إزالة التطبيق؟",
"other": "إزالة التطبيقات؟" "other": "إزالة التطبيقات؟"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Ispravka verzije je onemogućena (izgleda da plugin ne radi)", "versionCorrectionDisabled": "Ispravka verzije je onemogućena (izgleda da plugin ne radi)",
"unknown": "Nepoznato", "unknown": "Nepoznato",
"none": "Ništa", "none": "Ništa",
"all": "All",
"never": "Nikad", "never": "Nikad",
"latestVersionX": "Najnovija verzija: {}", "latestVersionX": "Najnovija verzija: {}",
"installedVersionX": "Instalirana verzija: {}", "installedVersionX": "Instalirana verzija: {}",
@@ -327,12 +328,13 @@
"smartname": "Name (Smart)", "smartname": "Name (Smart)",
"sortMethod": "Sort Method", "sortMethod": "Sort Method",
"welcome": "Welcome", "welcome": "Welcome",
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Želite li ukloniti aplikaciju?", "one": "Želite li ukloniti aplikaciju?",
"other": "Želite li ukloniti aplikacije?" "other": "Želite li ukloniti aplikacije?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Correcció de versions desactivada (el plugin sembla que no funciona)", "versionCorrectionDisabled": "Correcció de versions desactivada (el plugin sembla que no funciona)",
"unknown": "Desconegut", "unknown": "Desconegut",
"none": "Cap", "none": "Cap",
"all": "All",
"never": "Mai", "never": "Mai",
"latestVersionX": "Última versió: {}", "latestVersionX": "Última versió: {}",
"installedVersionX": "Versió instal·lada: {}", "installedVersionX": "Versió instal·lada: {}",
@@ -318,11 +319,11 @@
"crowdsourcedConfigsShort": "Configuració de les aplicacions crowdsourcing", "crowdsourcedConfigsShort": "Configuració de les aplicacions crowdsourcing",
"allowInsecure": "Permet les sol·licituds HTTP insegures", "allowInsecure": "Permet les sol·licituds HTTP insegures",
"stayOneVersionBehind": "Roman a la versió anterior a l'última", "stayOneVersionBehind": "Roman a la versió anterior a l'última",
"useFirstApkOfVersion": "Auto-select first of multiple APKs", "useFirstApkOfVersion": "Tria automàticament la primera aplicació entre moltes",
"refreshBeforeDownload": "Actualitza les dades de l'aplicació abans de descarregar-la", "refreshBeforeDownload": "Actualitza les dades de l'aplicació abans de descarregar-la",
"tencentAppStore": "Tencent App Store", "tencentAppStore": "Tencent App Store",
"coolApk": "CoolApk", "coolApk": "CoolApk",
"vivoAppStore": "vivo App Store (CN)", "vivoAppStore": "Vivo App Store (CN)",
"name": "Nom", "name": "Nom",
"smartname": "Nom (smart)", "smartname": "Nom (smart)",
"sortMethod": "Mètode d'ordenació", "sortMethod": "Mètode d'ordenació",
@@ -330,9 +331,10 @@
"documentationLinksNote": "La pàgina GitHub d'Obtainium enllaçada a sota conté enllaços a vídeos, articles, debats i altres recursos que t'ajudaran a entendre com usar l'aplicació.", "documentationLinksNote": "La pàgina GitHub d'Obtainium enllaçada a sota conté enllaços a vídeos, articles, debats i altres recursos que t'ajudaran a entendre com usar l'aplicació.",
"batteryOptimizationNote": "Tingues present que les descàrregues en segon pla funcionaran millor si inhabilites l'optimització de bateria per a Obtainium.", "batteryOptimizationNote": "Tingues present que les descàrregues en segon pla funcionaran millor si inhabilites l'optimització de bateria per a Obtainium.",
"fileDeletionError": "No s'ha pogut suprimir el fitxer (intenta suprimir-lo manualment i torna-ho a provar): \"{}\"", "fileDeletionError": "No s'ha pogut suprimir el fitxer (intenta suprimir-lo manualment i torna-ho a provar): \"{}\"",
"foregroundService": "Obtainium foreground service", "foregroundService": "Servei d'Obtainium en primer pla",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Usa el servei d'Obtainium en primer pla per comprovar les actualitzacions (és més fiable però consumeix més bateria)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "Aquesta notificació és necessària per comprovar les actualitzacions en segon pla (la pots ocultar als paràmetres del Sistema Operatiu)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "¿Suprimeixo l'aplicació?", "one": "¿Suprimeixo l'aplicació?",
"other": "¿Suprimeixo les aplicacions?" "other": "¿Suprimeixo les aplicacions?"
@@ -358,16 +360,16 @@
"other": "{} URLs" "other": "{} URLs"
}, },
"minute": { "minute": {
"one": "{} Minut", "one": "{} minut",
"other": "{} Minuts" "other": "{} minuts"
}, },
"hour": { "hour": {
"one": "{} Hora", "one": "{} hora",
"other": "{} Hores" "other": "{} hores"
}, },
"day": { "day": {
"one": "{} Dia", "one": "{} dia",
"other": "{} Dies" "other": "{} dies"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Suprimit {n} registre (anterior a = {before}, posterior a = {after})", "one": "Suprimit {n} registre (anterior a = {before}, posterior a = {after})",

View File

@@ -1,5 +1,5 @@
{ {
"invalidURLForSource": "Žádná platná {} adresa URL aplikace", "invalidURLForSource": "Žádná platná adresa URL aplikace {}",
"noReleaseFound": "Nebyla nalezena odpovídající verze", "noReleaseFound": "Nebyla nalezena odpovídající verze",
"noVersionFound": "Nelze určit verzi vydání", "noVersionFound": "Nelze určit verzi vydání",
"urlMatchesNoSource": "URL neodpovídá žádnému známému zdroji", "urlMatchesNoSource": "URL neodpovídá žádnému známému zdroji",
@@ -7,33 +7,33 @@
"appIdMismatch": "ID staženého balíčku neodpovídá ID existující aplikace", "appIdMismatch": "ID staženého balíčku neodpovídá ID existující aplikace",
"functionNotImplemented": "Tato třída nemá implementovánu tuto funkci", "functionNotImplemented": "Tato třída nemá implementovánu tuto funkci",
"placeholder": "Zástupce", "placeholder": "Zástupce",
"someErrors": "Vyskytly se nějaké chyby", "someErrors": "Došlo k chybám",
"unexpectedError": "Neočekávaná chyba", "unexpectedError": "Neočekávaná chyba",
"ok": "Ok", "ok": "OK",
"and": "a", "and": "a",
"githubPATLabel": "GitHub Personal Access Token (zvyšuje limit rychlosti)", "githubPATLabel": "Osobní přístupový token GitHub (zvyšuje limit požadavků)",
"includePrereleases": "Zahrnout předběžné verze", "includePrereleases": "Zahrnout předběžná vydání",
"fallbackToOlderReleases": "Přechod na starší verze", "fallbackToOlderReleases": "Přechod na starší verze",
"filterReleaseTitlesByRegEx": "Filtrovat názvy verzí podle regulárního výrazu", "filterReleaseTitlesByRegEx": "Filtrovat názvy verzí podle regulárního výrazu",
"invalidRegEx": "Neplatný regulární výraz", "invalidRegEx": "Neplatný regulární výraz",
"noDescription": "Žádný popis", "noDescription": "Žádný popis",
"cancel": "Zrušit", "cancel": "Zrušit",
"continue": "Pokračovat", "continue": "Pokračovat",
"requiredInBrackets": "(Požadované)", "requiredInBrackets": "(vyžadováno)",
"dropdownNoOptsError": "ERROR: DROPDOWN MUSÍ MÍT AŽ JEDNU MOŽNOST", "dropdownNoOptsError": "CHYBA: ROZBALOVACÍ NABÍDKA MUSÍ MÍT ALESPOŇ JEDNU MOŽNOST",
"colour": "Barva", "colour": "Barvu",
"standard": "Standardní", "standard": "Standardní",
"custom": "Vlastní", "custom": "Vlastní",
"useMaterialYou": "Použijte materiál, který jste", "useMaterialYou": "Použít Material You",
"githubStarredRepos": "GitHub označená hvězdičkou", "githubStarredRepos": "Repozitáře na GitHubu označené hvězdičkou",
"uname": "Uživatelské jméno", "uname": "Uživatelské jméno",
"wrongArgNum": "Nesprávný počet zadaných argumentů", "wrongArgNum": "Nesprávný počet zadaných argumentů",
"xIsTrackOnly": "{} je určeno pouze pro sledování", "xIsTrackOnly": "{} je určeno pouze pro sledování",
"source": "Zdroj", "source": "Zdroj",
"app": "Aplikace", "app": "Aplikace",
"appsFromSourceAreTrackOnly": "Aplikace z tohoto zdroje jsou Jen sledovány.", "appsFromSourceAreTrackOnly": "Aplikace z tohoto zdroje jsou „pouze pro sledování“.",
"youPickedTrackOnly": "Vybrali jste možnost Jen sledovat.", "youPickedTrackOnly": "Vybrali jste možnost „pouze sledovat.",
"trackOnlyAppDescription": "Aplikace je sledována kvůli aktualizacím, ale Obtainium ji nebude stahovat ani instalovat.", "trackOnlyAppDescription": "Aplikace bude sledována kvůli aktualizacím, ale Obtainium ji nebude stahovat ani instalovat.",
"cancelled": "Zrušeno", "cancelled": "Zrušeno",
"appAlreadyAdded": "Aplikace již přidána", "appAlreadyAdded": "Aplikace již přidána",
"alreadyUpToDateQuestion": "Aplikace je již aktualizovaná?", "alreadyUpToDateQuestion": "Aplikace je již aktualizovaná?",
@@ -45,9 +45,9 @@
"search": "Hledat", "search": "Hledat",
"additionalOptsFor": "Další možnosti pro {}", "additionalOptsFor": "Další možnosti pro {}",
"supportedSources": "Podporované zdroje", "supportedSources": "Podporované zdroje",
"trackOnlyInBrackets": "(Pouze stopy)", "trackOnlyInBrackets": "(pouze sledování)",
"searchableInBrackets": "(s možností vyhledávání)", "searchableInBrackets": "(s možností vyhledávání)",
"appsString": "Apky", "appsString": "Aplikace",
"noApps": "Žádné aplikace", "noApps": "Žádné aplikace",
"noAppsForFilter": "Žádné aplikace pro vybraný filtr", "noAppsForFilter": "Žádné aplikace pro vybraný filtr",
"byX": "Od {}", "byX": "Od {}",
@@ -57,73 +57,73 @@
"notInstalled": "Není nainstalováno", "notInstalled": "Není nainstalováno",
"pseudoVersion": "pseudoverze", "pseudoVersion": "pseudoverze",
"selectAll": "Vybrat vše", "selectAll": "Vybrat vše",
"deselectX": "{} deselected", "deselectX": "Zrušit výběr {}",
"xWillBeRemovedButRemainInstalled": "{} bude odstraněn z Obtainium, ale zůstane nainstalován v zařízení.", "xWillBeRemovedButRemainInstalled": "Aplikace {} bude odstraněna z aplikace Obtainium, ale zůstane nainstalována v zařízení.",
"removeSelectedAppsQuestion": "Odebrat vybrané aplikace?", "removeSelectedAppsQuestion": "Odstranit vybrané aplikace?",
"removeSelectedApps": "Odebrat vybrané aplikace", "removeSelectedApps": "Odstranit vybrané aplikace",
"updateX": "Aktualizovat {}", "updateX": "Aktualizovat {}",
"installX": "Instalovat {}", "installX": "Instalovat {}",
"markXTrackOnlyAsUpdated": "Označit {}\n(Jen sledované)\njako aktualizované", "markXTrackOnlyAsUpdated": "Označit aplikaci {}\n(pouze sledování)\njako aktualizovanou",
"changeX": "Změnit {}", "changeX": "Změnit {}",
"installUpdateApps": "Instalovat/aktualizovat aplikace", "installUpdateApps": "Instalovat/aktualizovat aplikace",
"installUpdateSelectedApps": "Instalovat/aktualizovat vybrané aplikace", "installUpdateSelectedApps": "Instalovat/aktualizovat vybrané aplikace",
"markXSelectedAppsAsUpdated": "Označit {} vybrané aplikace jako aktuální?", "markXSelectedAppsAsUpdated": "Označit {} vybraných aplikací jako aktuální?",
"no": "Ne", "no": "Ne",
"yes": "Ano", "yes": "Ano",
"markSelectedAppsUpdated": "Označit vybrané aplikace jako aktuální", "markSelectedAppsUpdated": "Označit vybrané aplikace jako aktuální",
"pinToTop": "Připnout nahoru", "pinToTop": "Připnout nahoru",
"unpinFromTop": "Odepnout shora", "unpinFromTop": "Odepnout shora",
"resetInstallStatusForSelectedAppsQuestion": "Obnovit stav instalace vybraných aplikací?", "resetInstallStatusForSelectedAppsQuestion": "Obnovit stav instalace vybraných aplikací?",
"installStatusOfXWillBeResetExplanation": "Stav instalace vybraných aplikací bude resetován. To může být užitečné, pokud je verze aplikace zobrazená v Obtainium nesprávná z důvodu neúspěšných aktualizací nebo jiných problémů.", "installStatusOfXWillBeResetExplanation": "Stav instalace vybraných aplikací bude resetován.\n\nTo může být užitečné, pokud je verze aplikace zobrazená v aplikaci Obtainium nesprávná z důvodu neúspěšných aktualizací nebo jiných problémů.",
"customLinkMessage": "Tyto odkazy fungují na zařízeních s nainstalovaným Obtainium", "customLinkMessage": "Tyto odkazy fungují na zařízeních s nainstalovaným Obtainium",
"shareAppConfigLinks": "Sdílet konfiguraci aplikace jako odkaz HTML", "shareAppConfigLinks": "Sdílet konfiguraci aplikace jako odkaz HTML",
"shareSelectedAppURLs": "Sdílet adresy URL vybraných aplikací", "shareSelectedAppURLs": "Sdílet adresy URL vybraných aplikací",
"resetInstallStatus": "Obnovit stav instalace", "resetInstallStatus": "Obnovit stav instalace",
"more": "Více", "more": "Více",
"removeOutdatedFilter": "Odstranit filtr Neaktuální", "removeOutdatedFilter": "Odstranit filtr neaktuálních aplikací",
"showOutdatedOnly": "Zobrazovat pouze zastaralé aplikace", "showOutdatedOnly": "Zobrazovat pouze zastaralé aplikace",
"filter": "Filtr", "filter": "Filtr",
"filterApps": "Filtrovat aplikace", "filterApps": "Filtrovat aplikace",
"appName": "Název aplikace", "appName": "Název aplikace",
"author": "Autor", "author": "Autor",
"upToDateApps": "Aktuální apky", "upToDateApps": "Aktuální aplikace",
"nonInstalledApps": "Neinstalované apky", "nonInstalledApps": "Nenainstalované aplikace",
"importExport": "Import Export", "importExport": "Import/export",
"settings": "Nastavení", "settings": "Nastavení",
"exportedTo": "Exportováno do {}", "exportedTo": "Exportováno do {}",
"obtainiumExport": "Export obtainia", "obtainiumExport": "Export aplikace Obtainium",
"invalidInput": "Neplatný vstup", "invalidInput": "Neplatný vstup",
"importedX": "Importováno {}", "importedX": "Importováno {}",
"obtainiumImport": "Dovoz obtainia", "obtainiumImport": "Import aplikace Obtainium",
"importFromURLList": "Import ze seznamu URL", "importFromURLList": "Importovat ze seznamu adres",
"searchQuery": "Vyhledávací dotaz", "searchQuery": "Vyhledávací dotaz",
"appURLList": "Seznam adres aplikací", "appURLList": "Seznam adres aplikací",
"line": "Linka", "line": "Linka",
"searchX": "Vyhledávání {}", "searchX": "Vyhledávání {}",
"noResults": "Nebyly nalezeny žádné výsledky", "noResults": "Nebyly nalezeny žádné výsledky",
"importX": "Import {}", "importX": "Importovat {}",
"importedAppsIdDisclaimer": "Importované aplikace mohou být nesprávně zobrazeny jako \"Neinstalovány\". Chcete-li to opravit, nainstalujte je znovu prostřednictvím Obtainium. To nemá vliv na data aplikací. Ovlivňuje pouze metody importu URL a třetích stran.", "importedAppsIdDisclaimer": "Importované aplikace mohou být nesprávně zobrazeny jako „nenainstalované“.\nChcete-li to opravit, nainstalujte je znovu prostřednictvím aplikace Obtainium.\nNemá vliv na data aplikací.\n\nOvlivňuje pouze způsoby importu URL a třetích stran.",
"importErrors": "Chyba importu", "importErrors": "Chyba importu",
"importedXOfYApps": "{}importováno z {} aplikací.", "importedXOfYApps": "Importováno {} z {} aplikací.",
"followingURLsHadErrors": "U následujících adres došlo k chybám:", "followingURLsHadErrors": "U následujících adres došlo k chybám:",
"selectURL": "Vybrat adresu", "selectURL": "Vybrat adresu",
"selectURLs": "Select adresy", "selectURLs": "Select adresy",
"pick": "Vybrat", "pick": "Vybrat",
"theme": "Téma", "theme": "Motiv",
"dark": "Tmavé", "dark": "Tmavé",
"light": "Světlé", "light": "Světlé",
"followSystem": "Jako systém", "followSystem": "Podle systému",
"followSystemThemeExplanation": "Sledování motivu systému je možné pouze pomocí aplikací třetích stran.", "followSystemThemeExplanation": "Používání motivu systému je možné pouze pomocí aplikací třetích stran",
"useBlackTheme": "Použít čistě černé tmavé téma", "useBlackTheme": "Použít čistě černý tmavý motiv",
"appSortBy": "Seřadit podle", "appSortBy": "Seřadit podle",
"authorName": "Autor/Jméno", "authorName": "Autor/jméno",
"nameAuthor": "Jméno/Autor", "nameAuthor": "Jméno/autor",
"asAdded": "Přidáno", "asAdded": "Přidáno",
"appSortOrder": "Seřadit", "appSortOrder": "Seřadit",
"ascending": "Vzestupně", "ascending": "Vzestupně",
"descending": "Sestupně", "descending": "Sestupně",
"bgUpdateCheckInterval": "Interval kontroly aktualizace na pozadí", "bgUpdateCheckInterval": "Interval kontroly aktualizace na pozadí",
"neverManualOnly": "Nikdy - pouze ručně", "neverManualOnly": "Nikdy pouze ručně",
"appearance": "Vzhled", "appearance": "Vzhled",
"showWebInAppView": "Zobrazit zdrojové webové stránky v zobrazení aplikace", "showWebInAppView": "Zobrazit zdrojové webové stránky v zobrazení aplikace",
"pinUpdates": "Připnout aplikace s aktualizacemi nahoru", "pinUpdates": "Připnout aplikace s aktualizacemi nahoru",
@@ -131,7 +131,7 @@
"sourceSpecific": "Specifické pro zdroj", "sourceSpecific": "Specifické pro zdroj",
"appSource": "Zdroj aplikace", "appSource": "Zdroj aplikace",
"noLogs": "Žádné protokoly", "noLogs": "Žádné protokoly",
"appLogs": "Záznamy apky", "appLogs": "Protokoly aplikace",
"close": "Zavřít", "close": "Zavřít",
"share": "Sdílet", "share": "Sdílet",
"appNotFound": "Aplikace nenalezena", "appNotFound": "Aplikace nenalezena",
@@ -141,7 +141,7 @@
"deviceSupportsXArch": "Vaše zařízení podporuje architekturu CPU {}.", "deviceSupportsXArch": "Vaše zařízení podporuje architekturu CPU {}.",
"deviceSupportsFollowingArchs": "Vaše zařízení podporuje následující architektury CPU:", "deviceSupportsFollowingArchs": "Vaše zařízení podporuje následující architektury CPU:",
"warning": "Varování", "warning": "Varování",
"sourceIsXButPackageFromYPrompt": "Zdroj aplikace je '{}', ale balíček pro vydání je z '{}'. Pokračovat?", "sourceIsXButPackageFromYPrompt": "Zdroj aplikace je {}, ale balíček pro vydání pochází z {}. Pokračovat?",
"updatesAvailable": "Dostupné aktualizace", "updatesAvailable": "Dostupné aktualizace",
"updatesAvailableNotifDescription": "Upozorňuje uživatele, že jsou k dispozici aktualizace pro jednu nebo více aplikací sledovaných Obtainium", "updatesAvailableNotifDescription": "Upozorňuje uživatele, že jsou k dispozici aktualizace pro jednu nebo více aplikací sledovaných Obtainium",
"noNewUpdates": "Žádné nové aktualizace.", "noNewUpdates": "Žádné nové aktualizace.",
@@ -149,7 +149,7 @@
"appsUpdated": "Aplikace aktualizovány", "appsUpdated": "Aplikace aktualizovány",
"appsNotUpdated": "Nepodařilo se aktualizovat aplikace", "appsNotUpdated": "Nepodařilo se aktualizovat aplikace",
"appsUpdatedNotifDescription": "Upozornit, že byly provedeny aktualizace jedné nebo více aplikací na pozadí", "appsUpdatedNotifDescription": "Upozornit, že byly provedeny aktualizace jedné nebo více aplikací na pozadí",
"xWasUpdatedToY": "{} byla aktualizována na {}", "xWasUpdatedToY": "Aplikace {} byla aktualizována na {}.",
"xWasNotUpdatedToY": "Nepodařilo se aktualizovat {} na {}.", "xWasNotUpdatedToY": "Nepodařilo se aktualizovat {} na {}.",
"errorCheckingUpdates": "Chyba kontroly aktualizací", "errorCheckingUpdates": "Chyba kontroly aktualizací",
"errorCheckingUpdatesNotifDescription": "Zobrazit oznámení při neúspěšné kontrole aktualizací na pozadí", "errorCheckingUpdatesNotifDescription": "Zobrazit oznámení při neúspěšné kontrole aktualizací na pozadí",
@@ -161,25 +161,26 @@
"completeAppInstallationNotifDescription": "Vyzvat k návratu do Obtainium pro dokončení instalace aplikací", "completeAppInstallationNotifDescription": "Vyzvat k návratu do Obtainium pro dokončení instalace aplikací",
"checkingForUpdates": "Zkontrolovat aktualizace", "checkingForUpdates": "Zkontrolovat aktualizace",
"checkingForUpdatesNotifDescription": "Dočasné oznámení zobrazené při kontrole aktualizací", "checkingForUpdatesNotifDescription": "Dočasné oznámení zobrazené při kontrole aktualizací",
"pleaseAllowInstallPerm": "Povolte prosím Obtainium instalovat aplikace", "pleaseAllowInstallPerm": "Povolte prosím aplikaci Obtainium instalovat aplikace",
"trackOnly": "Jen sledovat", "trackOnly": "Pouze sledovat",
"errorWithHttpStatusCode": "Chyba {}", "errorWithHttpStatusCode": "Chyba {}",
"versionCorrectionDisabled": "Oprava verze zakázána (zásuvný modul zřejmě nefunguje)", "versionCorrectionDisabled": "Oprava verze zakázána (zásuvný modul zřejmě nefunguje)",
"unknown": "Neznám", "unknown": "Neznám",
"none": "Žádný", "none": "Žádný",
"all": "Všechny",
"never": "Nikdy", "never": "Nikdy",
"latestVersionX": "Nejnovější verze: {}", "latestVersionX": "Nejnovější verze: {}",
"installedVersionX": "Nainstalovaná verze: {}", "installedVersionX": "Nainstalovaná verze: {}",
"lastUpdateCheckX": "Poslední kontrola aktualizace: {}", "lastUpdateCheckX": "Poslední kontrola aktualizací: {}",
"remove": "Odebrat", "remove": "Odebrat",
"yesMarkUpdated": "Ano, označit jako aktualizované", "yesMarkUpdated": "Ano, označit jako aktualizované",
"fdroid": "Oficiální repozitář F-Droid", "fdroid": "Oficiální repozitář F-Droid",
"appIdOrName": "ID nebo název apky", "appIdOrName": "ID nebo název aplikace",
"appId": "ID aplikace", "appId": "ID aplikace",
"appWithIdOrNameNotFound": "Žádná aplikace s tímto ID nebo názvem nebyla nalezena", "appWithIdOrNameNotFound": "Žádná aplikace s tímto ID nebo názvem nebyla nalezena",
"reposHaveMultipleApps": "Repozitáře mohou obsahovat více aplikací", "reposHaveMultipleApps": "Repozitáře mohou obsahovat více aplikací",
"fdroidThirdPartyRepo": "F-Droid repozitář třetí strany", "fdroidThirdPartyRepo": "F-Droid repozitář třetí strany",
"install": "Nainstalujte", "install": "Instalovat",
"markInstalled": "Označit jako nainstalovaný", "markInstalled": "Označit jako nainstalovaný",
"update": "Aktualizovat", "update": "Aktualizovat",
"markUpdated": "Označit jako aktuální", "markUpdated": "Označit jako aktuální",
@@ -189,7 +190,7 @@
"downloadingX": "Stáhnout {}", "downloadingX": "Stáhnout {}",
"downloadX": "Stáhnout {}", "downloadX": "Stáhnout {}",
"downloadedX": "Staženo {}", "downloadedX": "Staženo {}",
"releaseAsset": "Vydání aktiva", "releaseAsset": "Soubor vydání",
"downloadNotifDescription": "Informuje uživatele o průběhu stahování aplikace", "downloadNotifDescription": "Informuje uživatele o průběhu stahování aplikace",
"noAPKFound": "Žádná APK nebyla nalezena", "noAPKFound": "Žádná APK nebyla nalezena",
"noVersionDetection": "Žádná detekce verze", "noVersionDetection": "Žádná detekce verze",
@@ -201,17 +202,17 @@
"deleteCategoriesQuestion": "Smazat kategorie?", "deleteCategoriesQuestion": "Smazat kategorie?",
"categoryDeleteWarning": "Všechny aplikace v odstraněných kategoriích budou nastaveny na nekategorizované.", "categoryDeleteWarning": "Všechny aplikace v odstraněných kategoriích budou nastaveny na nekategorizované.",
"addCategory": "Přidat kategorii", "addCategory": "Přidat kategorii",
"label": "Štítek", "label": "Popisek",
"language": "Jazyk", "language": "Jazyk",
"copiedToClipboard": "Zkopírováno do schránky", "copiedToClipboard": "Zkopírováno do schránky",
"storagePermissionDenied": "Oprávnění k ukládání odepřeno", "storagePermissionDenied": "Oprávnění k ukládání odepřeno",
"selectedCategorizeWarning": "Toto nahradí všechna stávající nastavení kategorií pro vybrané aplikace.", "selectedCategorizeWarning": "Toto nahradí všechna stávající nastavení kategorií pro vybrané aplikace.",
"filterAPKsByRegEx": "Filtrovat APK podle regulárního výrazu", "filterAPKsByRegEx": "Filtrovat APK podle regulárního výrazu",
"removeFromObtainium": "Odebrat z Obtainium", "removeFromObtainium": "Odebrat z Obtainia",
"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", "releaseTitleAsVersion": "Použít název vydání 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í",
@@ -221,16 +222,16 @@
"standardVersionDetection": "Standardní detekce verze", "standardVersionDetection": "Standardní detekce verze",
"groupByCategory": "Seskupit podle kategorie", "groupByCategory": "Seskupit podle kategorie",
"autoApkFilterByArch": "Pokud je to možné, pokuste se filtrovat soubory APK podle architektury procesoru", "autoApkFilterByArch": "Pokud je to možné, pokuste se filtrovat soubory APK podle architektury procesoru",
"autoLinkFilterByArch": "Pokus o filtrování odkazů podle architektury procesoru, pokud je to možné.", "autoLinkFilterByArch": "Pokusit se filtrovat odkazy podle architektury procesoru, pokud je to možné",
"overrideSource": "Přepsat zdroj", "overrideSource": "Přepsat zdroj",
"dontShowAgain": "Nezobrazovat znovu", "dontShowAgain": "Nezobrazovat znovu",
"dontShowTrackOnlyWarnings": "Nezobrazovat varování pro 'Jen sledované'", "dontShowTrackOnlyWarnings": "Nezobrazovat varování pro „pouze sledované",
"dontShowAPKOriginWarnings": "Nezobrazovat varování pro původ APK", "dontShowAPKOriginWarnings": "Nezobrazovat varování o původu APK",
"moveNonInstalledAppsToBottom": "Přesunout nenainstalované aplikace na konec zobrazení Aplikace", "moveNonInstalledAppsToBottom": "Přesunout nenainstalované aplikace na konec zobrazení Aplikace",
"gitlabPATLabel": "Osobní přístupový token GitLab", "gitlabPATLabel": "Osobní přístupový token GitLab",
"about": "O", "about": "Informace",
"requiresCredentialsInSettings": "{}: Vyžaduje další pověření (v nastavení)", "requiresCredentialsInSettings": "{} vyžaduje další pověření (v nastavení)",
"checkOnStart": "Zkontrolovat jednou při spuštění", "checkOnStart": "Zkontrolovat aktualizace při spuštění",
"tryInferAppIdFromCode": "Pokusit se určit ID aplikace ze zdrojového kódu", "tryInferAppIdFromCode": "Pokusit se určit ID aplikace ze zdrojového kódu",
"removeOnExternalUninstall": "Automaticky odstranit externě odinstalované aplikace", "removeOnExternalUninstall": "Automaticky odstranit externě odinstalované aplikace",
"pickHighestVersionCode": "Automaticky vybrat nejvyšší verzi APK", "pickHighestVersionCode": "Automaticky vybrat nejvyšší verzi APK",
@@ -240,28 +241,28 @@
"minStarCount": "Minimální počet hvězdiček", "minStarCount": "Minimální počet hvězdiček",
"addInfoBelow": "Přidat tuto informaci na konec stránky.", "addInfoBelow": "Přidat tuto informaci na konec stránky.",
"addInfoInSettings": "Přidat tuto informaci do nastavení.", "addInfoInSettings": "Přidat tuto informaci do nastavení.",
"githubSourceNote": "Omezení rychlosti GitHub lze obejít pomocí klíče API.", "githubSourceNote": "Limit požadavků služby GitHub lze obejít pomocí klíče API.",
"sortByLastLinkSegment": "Seřadit pouze podle poslední části odkazu", "sortByLastLinkSegment": "Seřadit pouze podle poslední části odkazu",
"filterReleaseNotesByRegEx": "Filtrovat poznámky k vydání podle regulárního výrazu", "filterReleaseNotesByRegEx": "Filtrovat seznam změn podle regulárního výrazu",
"customLinkFilterRegex": "Vlastní filtr odkazů APK podle regulárního výrazu (výchozí '.apk$')", "customLinkFilterRegex": "Vlastní filtr odkazů APK podle regulárního výrazu (výchozí: „.apk$)",
"appsPossiblyUpdated": "Byly provedeny pokusy o aktualizaci aplikací", "appsPossiblyUpdated": "Byly provedeny pokusy o aktualizaci aplikací",
"appsPossiblyUpdatedNotifDescription": "Upozorňuje uživatele, že na pozadí mohly být provedeny aktualizace jedné nebo více aplikací", "appsPossiblyUpdatedNotifDescription": "Upozorňuje uživatele, že na pozadí mohly být provedeny aktualizace jedné nebo více aplikací",
"xWasPossiblyUpdatedToY": "{} mohlo být aktualizováno na {}.", "xWasPossiblyUpdatedToY": "{} mohlo být aktualizováno na {}.",
"enableBackgroundUpdates": "Povolit aktualizace na pozadí", "enableBackgroundUpdates": "Povolit aktualizace na pozadí",
"backgroundUpdateReqsExplanation": "Aktualizace na pozadí nemusí být možná pro všechny aplikace.", "backgroundUpdateReqsExplanation": "Aktualizace na pozadí nemusí být možná pro všechny aplikace.",
"backgroundUpdateLimitsExplanation": "Úspěšnost instalace na pozadí lze určit pouze v případě, že je otevřeno Obtainium.", "backgroundUpdateLimitsExplanation": "Úspěšnost instalace na pozadí lze určit pouze v případě, že je otevřeno Obtainium.",
"verifyLatestTag": "Zkontrolovat značku latest", "verifyLatestTag": "Ověřit značku latest",
"intermediateLinkRegex": "Filtrovat mezipropojení, které by mělo být navštíveno jako první", "intermediateLinkRegex": "Filtr pro návštěvu „prostředního“ odkazu",
"filterByLinkText": "Filtrovat odkazy podle textu odkazu", "filterByLinkText": "Filtrovat odkazy podle textu odkazu",
"intermediateLinkNotFound": "Připojený odkaz nenalezen", "intermediateLinkNotFound": "Připojený odkaz nenalezen",
"intermediateLink": "Připojený odkaz", "intermediateLink": "Připojený odkaz",
"exemptFromBackgroundUpdates": "Vyloučit z aktualizací na pozadí (je-li povoleno)", "exemptFromBackgroundUpdates": "Vyloučit z aktualizací na pozadí (je-li povoleno)",
"bgUpdatesOnWiFiOnly": "Deaktivovat aktualizace na pozadí, pokud není k dispozici Wi-Fi", "bgUpdatesOnWiFiOnly": "Zakázat aktualizace na pozadí, pokud není k dispozici Wi-Fi",
"bgUpdatesWhileChargingOnly": "Zakázat aktualizace na pozadí, když se nenabíjí", "bgUpdatesWhileChargingOnly": "Zakázat aktualizace na pozadí, pokud se zařízení nenabíjí",
"autoSelectHighestVersionCode": "Automaticky vybrat nejvyšší verzi APK", "autoSelectHighestVersionCode": "Automaticky vybrat APK s nejvyšším kódem verze",
"versionExtractionRegEx": "Extrakce verze pomocí RegEx", "versionExtractionRegEx": "Extrakce verze pomocí RegEx",
"trimVersionString": "Oříznutí řetězce verze pomocí příkazu RegEx", "trimVersionString": "Oříznutí řetězce verze pomocí RegEx",
"matchGroupToUseForX": "Skupina shody, která se použije pro \"{}\"", "matchGroupToUseForX": "Shoda se skupinou k použi pro „{}“",
"matchGroupToUse": "Odpovídá použité skupině", "matchGroupToUse": "Odpovídá použité skupině",
"highlightTouchTargets": "Zvýraznit méně zjevné cíle dotyku", "highlightTouchTargets": "Zvýraznit méně zjevné cíle dotyku",
"pickExportDir": "Vybrat adresář pro export", "pickExportDir": "Vybrat adresář pro export",
@@ -280,114 +281,128 @@
"installing": "Instaluji", "installing": "Instaluji",
"skipUpdateNotifications": "Neposkytovat oznámení o aktualizaci", "skipUpdateNotifications": "Neposkytovat oznámení o aktualizaci",
"updatesAvailableNotifChannel": "Dostupné aktualizace", "updatesAvailableNotifChannel": "Dostupné aktualizace",
"appsUpdatedNotifChannel": "Apky aktualizovány", "appsUpdatedNotifChannel": "Aplikace aktualizovány",
"appsPossiblyUpdatedNotifChannel": "Byly provedeny pokusy o aktualizace aplikací", "appsPossiblyUpdatedNotifChannel": "Byly provedeny pokusy o aktualizace aplikací",
"errorCheckingUpdatesNotifChannel": "Chyba při kontrole aktualizací", "errorCheckingUpdatesNotifChannel": "Chyba při kontrole aktualizací",
"appsRemovedNotifChannel": "Odstraněné apky", "appsRemovedNotifChannel": "Aplikace odstraněny",
"downloadingXNotifChannel": "Stáhnout {}", "downloadingXNotifChannel": "Stáhnout {}",
"completeAppInstallationNotifChannel": "Dokončit instalaci aplikace", "completeAppInstallationNotifChannel": "Dokončit instalaci aplikace",
"checkingForUpdatesNotifChannel": "Zkontrolovat aktualizace", "checkingForUpdatesNotifChannel": "Zkontrolovat aktualizace",
"onlyCheckInstalledOrTrackOnlyApps": "Na aktualizace kontrolovat pouze nainstalované aplikace a aplikace označené Track only", "onlyCheckInstalledOrTrackOnlyApps": "Aktualizace kontrolovat pouze u nainstalovaných a sledovaných aplikací",
"supportFixedAPKURL": "Odhadnout novější verzi na základě prvních třiceti číslic kontrolního součtu adresy URL APK, pokud není podporována jinak", "supportFixedAPKURL": "Odhadnout novější verzi na základě prvních třiceti číslic kontrolního součtu adresy URL APK, pokud není podporována jinak",
"selectX": "Vybrat {}", "selectX": "Vybrat {}",
"parallelDownloads": "Povolit souběžné stahování", "parallelDownloads": "Povolit souběžné stahování",
"useShizuku": "K instalaci použijte Shizuku nebo Sui", "useShizuku": "K instalaci použít Shizuku nebo Sui",
"shizukuBinderNotFound": "Shizuku neběží", "shizukuBinderNotFound": "Shizuku neběží",
"shizukuOld": "Stará verze Shizuku (<11) - aktualizujte ji", "shizukuOld": "Stará verze Shizuku (<11) - aktualizujte ji",
"shizukuOldAndroidWithADB": "Shizuku běží na Androidu < 8.1 s ADB - aktualizujte Android nebo místo toho použijte Sui", "shizukuOldAndroidWithADB": "Shizuku běží na Androidu < 8.1 s ADB - aktualizujte Android nebo místo toho použijte Sui",
"shizukuPretendToBeGooglePlay": "Nastavení Google Play jako zdroje instalace (pokud se používá Shizuku)", "shizukuPretendToBeGooglePlay": "Nastavit Google Play jako zdroj instalace (pokud se používá Shizuku)",
"useSystemFont": "Použít systémové písmo", "useSystemFont": "Použít systémové písmo",
"useVersionCodeAsOSVersion": "Použít kód verze aplikace jako verzi zjištěnou OS", "useVersionCodeAsOSVersion": "Použít kód verze aplikace jako verzi zjištěnou OS",
"requestHeader": "Hlavička požadavku", "requestHeader": "Hlavička požadavku",
"useLatestAssetDateAsReleaseDate": "Použít poslední nahrané dílo jako datum vydání", "useLatestAssetDateAsReleaseDate": "Použít poslední nahraný soubor jako datum vydání",
"defaultPseudoVersioningMethod": "Výchozí metoda pseudoverze", "defaultPseudoVersioningMethod": "Výchozí metoda pseudoverze",
"partialAPKHash": "Částečný hash APK", "partialAPKHash": "Částečný hash APK",
"APKLinkHash": "Odkaz APK Hash", "APKLinkHash": "Odkaz APK Hash",
"directAPKLink": "Přímý odkaz APK", "directAPKLink": "Přímý odkaz APK",
"pseudoVersionInUse": "Pseudoverze se používá", "pseudoVersionInUse": "Pseudoverze se používá",
"installed": "Instalováno", "installed": "Nainstalováno",
"latest": "Nejnovější", "latest": "Nejnovější",
"invertRegEx": "Invertovat regulární výraz", "invertRegEx": "Invertovat regulární výraz",
"note": "Poznámka", "note": "Poznámka",
"selfHostedNote": "Rozbalovací seznam \"{}\" lze použít k dosažení vlastních/obvyklých instancí libovolného zdroje.", "selfHostedNote": "Rozbalovací seznam „{}“ lze použít pro přístup k vlastním instancím libovolného zdroje.",
"badDownload": "APK nelze analyzovat (nekompatibilní nebo částečné stažení)", "badDownload": "APK nelze analyzovat (nekompatibilní nebo částečné stažení)",
"beforeNewInstallsShareToAppVerifier": "Sdíle nových aplikací s aplikací AppVerifier (pokud je k dispozici)", "beforeNewInstallsShareToAppVerifier": "Sdílet nové aplikace s aplikací AppVerifier (pokud je k dispozici)",
"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": "Komunitní konfigurace aplikací (použití na vlastní nebezpečí)",
"crowdsourcedConfigsShort": "Konfigurace aplikací s využitím crowdsourcingu", "crowdsourcedConfigsShort": "Konfigurace aplikací s využitím crowdsourcingu",
"allowInsecure": "Povolení nezabezpečených požadavků HTTP", "allowInsecure": "Povolit nezabezpečené požadavků HTTP",
"stayOneVersionBehind": "Zůstaňte o jednu verzi pozadu za nejnovější", "stayOneVersionBehind": "Zůstaňte o jednu verzi pozadu za nejnovější",
"useFirstApkOfVersion": "Automatický výběr prvního z více souborů APK", "useFirstApkOfVersion": "Automatický výběr prvního z více souborů APK",
"refreshBeforeDownload": "Obnovení údajů o aplikaci před stažením", "refreshBeforeDownload": "Obnovit údaje o aplikaci před stažením",
"tencentAppStore": "Tencent App Store", "tencentAppStore": "Tencent App Store",
"coolApk": "CoolApk", "coolApk": "CoolApk",
"vivoAppStore": "vivo App Store (CN)", "vivoAppStore": "vivo App Store (CN)",
"name": "Název", "name": "Název",
"smartname": "Název (Smart)", "smartname": "Název (chytrý)",
"sortMethod": "Metoda třídění", "sortMethod": "Metoda třídění",
"welcome": "Vítejte na", "welcome": "Vítejte na",
"documentationLinksNote": "Níže odkazovaná stránka Obtainium GitHub obsahuje odkazy na videa, články, diskuse a další zdroje, které vám pomohou pochopit, jak aplikaci používat.", "documentationLinksNote": "Níže odkazovaná stránka Obtainium GitHub obsahuje odkazy na videa, články, diskuse a další zdroje, které vám pomohou pochopit, jak aplikaci používat.",
"batteryOptimizationNote": "Všimněte si, že stahování na pozadí může fungovat spolehlivěji, pokud vypnete optimalizaci baterie operačního systému pro Obtainium.", "batteryOptimizationNote": "Upozorňujeme, že stahování na pozadí může fungovat spolehlivěji, pokud v nastavení aplikace Obtainium přepnete na „službu v popředí“ a/nebo v nastavení operačního systému pro Obtainium vypnete optimalizaci baterie.",
"fileDeletionError": "Soubor se nepodařilo odstranit (zkuste jej odstranit ručně a pak to zkuste znovu): \"{}\"", "fileDeletionError": "Soubor se nepodařilo odstranit (zkuste jej odstranit ručně a akci opakujte): „{}“",
"foregroundService": "Služba Obtainium na popředí", "foregroundService": "Služba Obtainium na popředí",
"foregroundServiceExplanation": "Použití služby v popředí pro kontrolu aktualizací (spolehlivější, spotřebovává více energie).", "foregroundServiceExplanation": "Použít službu v popředí pro kontrolu aktualizací (spolehlivější, spotřebovává více energie)",
"fgServiceNotice": "Toto oznámení je nutné pro kontrolu aktualizací na pozadí (lze jej skrýt v nastavení operačního systému).", "fgServiceNotice": "Toto oznámení je nutné pro kontrolu aktualizací na pozadí (lze jej skrýt v nastavení systému)",
"excludeSecrets": "Vyloučit tajemství",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Odstranit Apku?", "one": "Odstranit aplikaci?",
"other": "Odstranit Apky?" "other": "Odstranit aplikace?"
}, },
"tooManyRequestsTryAgainInMinutes": { "tooManyRequestsTryAgainInMinutes": {
"one": "Příliš mnoho požadavků (omezená rychlost) - zkuste to znovu za {} minutu", "one": "Příliš mnoho požadavků (limit požadavků) - zkuste to znovu za {} minutu",
"other": "Příliš mnoho požadavků (omezená rychlost) - zkuste to znovu za {} minut" "few": "Příliš mnoho požadavků (limit požadavků) - zkuste to znovu za {} minuty",
"other": "Příliš mnoho požadavků (limit požadavků) - zkuste to znovu za {} minut"
}, },
"bgUpdateGotErrorRetryInMinutes": { "bgUpdateGotErrorRetryInMinutes": {
"one": "Při kontrole aktualizace na pozadí byla zjištěna chyba {}, opakování bude naplánováno za {} minut", "one": "Při kontrole aktualizací na pozadí byla zjištěna {}, opakování bude naplánováno za {} minutu",
"other": "Při kontrole aktualizací na pozadí byla zjištěna chyba {}, opakování bude naplánováno za {} minut" "few": "Při kontrole aktualizací na pozadí byla zjištěna {}, opakování bude naplánováno za {} minuty",
"other": "Při kontrole aktualizací na pozadí byla zjištěna {}, opakování bude naplánováno za {} minut"
}, },
"bgCheckFoundUpdatesWillNotifyIfNeeded": { "bgCheckFoundUpdatesWillNotifyIfNeeded": {
"one": "Při kontrole aktualizací na pozadí nalezena {}aktualizace - v případě potřeby upozorní uživatele", "one": "Při kontrole aktualizací na pozadí nalezena {} aktualizace v případě potřeby bude upozorněn uživatel",
"other": "Kontrola aktualizací na pozadí nalezla {} aktualizací - v případě potřeby upozorní uživatele" "few": "Při kontrole aktualizací na pozadí nalezeny {} aktualizace v případě potřeby bude upozorněn uživatel",
"other": "Při kontrole aktualizací na pozadí nalezeno {} aktualizací v případě potřeby bude upozorněn uživatel"
}, },
"apps": { "apps": {
"one": "{} Apka", "one": "{} aplikace",
"other": "{} Apky" "few": "{} aplikace",
"other": "{} aplikací"
}, },
"url": { "url": {
"one": "{} Adresa", "one": "{} adresa",
"other": "{} Adres" "few": "{} adresy",
"other": "{} adres"
}, },
"minute": { "minute": {
"one": "{} Minuta", "one": "{} minuta",
"other": "{} Minut" "few": "{} minuty",
"other": "{} minut"
}, },
"hour": { "hour": {
"one": "{} Hodina", "one": "{} hodina",
"other": "{} Hodin" "few": "{} hodiny",
"other": "{} hodin"
}, },
"day": { "day": {
"one": "{} Den", "one": "{} den",
"other": "{} Dnů" "few": "{} dny",
"other": "{} dní"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "{n} Záznam vymazán (před = {before}, po = {after})", "one": "Vymazán {n} záznam (před = {before}, po = {after})",
"other": "{n} Záznamů vymazáno (před = {before}, po = {after})" "few": "Vymazány {n} záznamy (před = {before}, po = {after})",
"other": "Vymazáno {n} záznamů (před = {before}, po = {after})"
}, },
"xAndNMoreUpdatesAvailable": { "xAndNMoreUpdatesAvailable": {
"one": "{} a 1 další aplikace mají aktualizace.", "one": "{} a 1 další aplikace mají aktualizace.",
"other": "{} a {} další aplikace mají aktualizace." "few": "{} a {} další aplikace mají aktualizace.",
"other": "{} a {} dalších aplikací má aktualizace."
}, },
"xAndNMoreUpdatesInstalled": { "xAndNMoreUpdatesInstalled": {
"one": "{} a 1 další aplikace mají aktualizace.", "one": "{} a 1 další aplikace byly aktualizovány.",
"other": "{} a {} další aplikace byly aktualizovány." "few": "{} a {} další aplikace byly aktualizovány.",
"other": "{} a {} dalších aplikací bylo aktualizováno."
}, },
"xAndNMoreUpdatesFailed": { "xAndNMoreUpdatesFailed": {
"one": "Nepodařilo se aktualizovat {} a 1 další aplikaci.", "one": "Nepodařilo se aktualizovat {} a 1 další aplikaci.",
"other": "Nepodařilo se aktualizovat {} a {} další aplikace." "few": "Nepodařilo se aktualizovat {} a {} další aplikace.",
"other": "Nepodařilo se aktualizovat {} a {} dalších aplikací."
}, },
"xAndNMoreUpdatesPossiblyInstalled": { "xAndNMoreUpdatesPossiblyInstalled": {
"one": "{} a 1 další aplikace možno aktualizovat", "one": "{} a 1 další aplikace možná byly aktualizovány.",
"other": "{} a {} další aplikace mohou být aktualizovány." "few": "{} a {} další aplikace možná byly aktualizovány.",
"other": "{} a {} dalších aplikací možná bylo aktualizováno."
}, },
"apk": { "apk": {
"one": "{} APK", "one": "{} APK",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Versionskorrektion deaktiveret (plugin ser ikke ud til at virke)", "versionCorrectionDisabled": "Versionskorrektion deaktiveret (plugin ser ikke ud til at virke)",
"unknown": "Ukendt", "unknown": "Ukendt",
"none": "Ingen", "none": "Ingen",
"all": "Alle",
"never": "Aldrig", "never": "Aldrig",
"latestVersionX": "Seneste: {}", "latestVersionX": "Seneste: {}",
"installedVersionX": "Installeret: {}", "installedVersionX": "Installeret: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium forgrundstjeneste", "foregroundService": "Obtainium forgrundstjeneste",
"foregroundServiceExplanation": "Brug en forgrundstjeneste til opdateringskontrol (mere pålidelig, bruger mere strøm)", "foregroundServiceExplanation": "Brug en forgrundstjeneste til opdateringskontrol (mere pålidelig, bruger mere strøm)",
"fgServiceNotice": "Denne meddelelse er nødvendig for baggrundsopdateringskontrol (den kan skjules i OS-indstillingerne).", "fgServiceNotice": "Denne meddelelse er nødvendig for baggrundsopdateringskontrol (den kan skjules i OS-indstillingerne).",
"excludeSecrets": "Udeluk hemmeligheder",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Fjern app?", "one": "Fjern app?",
"other": "Fjern apps?" "other": "Fjern apps?"
@@ -358,16 +360,16 @@
"other": "{} URL'er" "other": "{} URL'er"
}, },
"minute": { "minute": {
"one": "{} Minut", "one": "{} minut",
"other": "{} Minutter" "other": "{} minutter"
}, },
"hour": { "hour": {
"one": "{} Time", "one": "{} time",
"other": "{} Timer" "other": "{} timer"
}, },
"day": { "day": {
"one": "{} Dag", "one": "{} dag",
"other": "{} Dage" "other": "{} dage"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Ryddet {n} log (før = {before}, efter = {after})", "one": "Ryddet {n} log (før = {before}, efter = {after})",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Versionskorrektur deaktiviert (Plugin scheint nicht zu funktionieren)", "versionCorrectionDisabled": "Versionskorrektur deaktiviert (Plugin scheint nicht zu funktionieren)",
"unknown": "Unbekannt", "unknown": "Unbekannt",
"none": "Keine", "none": "Keine",
"all": "Alle",
"never": "Nie", "never": "Nie",
"latestVersionX": "Neueste Version: {}", "latestVersionX": "Neueste Version: {}",
"installedVersionX": "Installierte Version: {}", "installedVersionX": "Installierte Version: {}",
@@ -232,7 +233,7 @@
"requiresCredentialsInSettings": "{}: Benötigt zusätzliche Anmeldedaten (in den Einstellungen)", "requiresCredentialsInSettings": "{}: Benötigt zusätzliche Anmeldedaten (in den Einstellungen)",
"checkOnStart": "Einmalig beim Start auf Aktualisierungen prüfen", "checkOnStart": "Einmalig beim Start auf Aktualisierungen prüfen",
"tryInferAppIdFromCode": "Versuchen, die App-ID aus dem Quellcode zu ermitteln", "tryInferAppIdFromCode": "Versuchen, die App-ID aus dem Quellcode zu ermitteln",
"removeOnExternalUninstall": "Extern deinstallierte Apps automatische entfernen", "removeOnExternalUninstall": "Extern deinstallierte Apps automatisch entfernen",
"pickHighestVersionCode": "Automatische Auswahl des APK mit höchstem Versionscode", "pickHighestVersionCode": "Automatische Auswahl des APK mit höchstem Versionscode",
"checkUpdateOnDetailPage": "Nach Aktualisierungen suchen, wenn eine App-Detailseite geöffnet wird", "checkUpdateOnDetailPage": "Nach Aktualisierungen suchen, wenn eine App-Detailseite geöffnet wird",
"disablePageTransitions": "Animationen für Seitenübergänge deaktivieren", "disablePageTransitions": "Animationen für Seitenübergänge deaktivieren",
@@ -314,8 +315,8 @@
"beforeNewInstallsShareToAppVerifier": "Neue Apps mit AppVerifier teilen (falls verfügbar)", "beforeNewInstallsShareToAppVerifier": "Neue Apps mit AppVerifier teilen (falls verfügbar)",
"appVerifierInstructionToast": "Teile die Daten mit AppVerifier und kehre im Anschluss hierher zurück.", "appVerifierInstructionToast": "Teile die Daten mit AppVerifier und kehre im Anschluss hierher zurück.",
"wiki": "Hilfe/Wiki", "wiki": "Hilfe/Wiki",
"crowdsourcedConfigsLabel": "Crowdsourced App-Konfigurationen (Verwendung auf eigene Gefahr)", "crowdsourcedConfigsLabel": "Komplexe Appkonfigurationen (Verwendung auf eigene Gefahr)",
"crowdsourcedConfigsShort": "Crowdsourced App-Konfigurationen", "crowdsourcedConfigsShort": "Komplexe Appkonfigurationen",
"allowInsecure": "Unsichere HTTP-Anfragen zulassen", "allowInsecure": "Unsichere HTTP-Anfragen zulassen",
"stayOneVersionBehind": "Eine Version hinter der neuesten Version bleiben", "stayOneVersionBehind": "Eine Version hinter der neuesten Version bleiben",
"useFirstApkOfVersion": "Automatische Auswahl der ersten von mehreren APKs", "useFirstApkOfVersion": "Automatische Auswahl der ersten von mehreren APKs",
@@ -331,8 +332,9 @@
"batteryOptimizationNote": "Beachten Sie, dass Downloads im Hintergrund möglicherweise zuverlässiger funktionieren, wenn Sie die Batterieoptimierung des Betriebssystems für Obtainium deaktivieren.", "batteryOptimizationNote": "Beachten Sie, dass Downloads im Hintergrund möglicherweise zuverlässiger funktionieren, wenn Sie die Batterieoptimierung des Betriebssystems für Obtainium deaktivieren.",
"fileDeletionError": "Die Datei konnte nicht gelöscht werden (versuchen Sie, sie manuell zu löschen und versuchen Sie es dann erneut): \"{}\"", "fileDeletionError": "Die Datei konnte nicht gelöscht werden (versuchen Sie, sie manuell zu löschen und versuchen Sie es dann erneut): \"{}\"",
"foregroundService": "Obtainium-Vordergrunddienst", "foregroundService": "Obtainium-Vordergrunddienst",
"foregroundServiceExplanation": "Verwendung eines Dienstes im Vordergrund für die Aktualisierungsprüfung (zuverlässiger, verbraucht mehr Strom)", "foregroundServiceExplanation": "Aktualisierungsprüfung im Vordergrund durchführen (zuverlässiger, verbraucht mehr Strom)",
"fgServiceNotice": "Diese Benachrichtigung ist für die Prüfung von Updates im Hintergrund erforderlich (sie kann in den Betriebssystemeinstellungen ausgeblendet werden)", "fgServiceNotice": "Diese Benachrichtigung ist für die Prüfung von Updates im Hintergrund erforderlich (sie kann in den Betriebssystemeinstellungen ausgeblendet werden)",
"excludeSecrets": "Geheimnisse ausschließen",
"removeAppQuestion": { "removeAppQuestion": {
"one": "App entfernen?", "one": "App entfernen?",
"other": "Apps entfernen?" "other": "Apps entfernen?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Versiokorekto malaktivigita (ŝajnas, ke la kromaĵo ne funkcias)", "versionCorrectionDisabled": "Versiokorekto malaktivigita (ŝajnas, ke la kromaĵo ne funkcias)",
"unknown": "Nekonata", "unknown": "Nekonata",
"none": "Nenio", "none": "Nenio",
"all": "All",
"never": "Neniam", "never": "Neniam",
"latestVersionX": "Lasta versio: {}", "latestVersionX": "Lasta versio: {}",
"installedVersionX": "Instalita versio: {}", "installedVersionX": "Instalita versio: {}",
@@ -327,12 +328,13 @@
"smartname": "Name (Smart)", "smartname": "Name (Smart)",
"sortMethod": "Sort Method", "sortMethod": "Sort Method",
"welcome": "Welcome", "welcome": "Welcome",
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Forigi la aplikaĵon?", "one": "Forigi la aplikaĵon?",
"other": "Forigi la aplikaĵojn?" "other": "Forigi la aplikaĵojn?"
@@ -358,16 +360,16 @@
"other": "{} URLj" "other": "{} URLj"
}, },
"minute": { "minute": {
"one": "{} Minuto", "one": "{} minuto",
"other": "{} Minutoj" "other": "{} minutoj"
}, },
"hour": { "hour": {
"one": "{} Horo", "one": "{} horo",
"other": "{} Horoj" "other": "{} horoj"
}, },
"day": { "day": {
"one": "{} Tago", "one": "{} tago",
"other": "{} Tagoj" "other": "{} tagoj"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Purigis {n} protokolon (antaŭe = {before}, malantaŭe = {after})", "one": "Purigis {n} protokolon (antaŭe = {before}, malantaŭe = {after})",

View File

@@ -25,7 +25,7 @@
"standard": "Standard", "standard": "Standard",
"custom": "Custom", "custom": "Custom",
"useMaterialYou": "Use Material You", "useMaterialYou": "Use Material You",
"githubStarredRepos": "GitHub starred repos", "githubStarredRepos": "GitHub starred repositories",
"uname": "Username", "uname": "Username",
"wrongArgNum": "Wrong number of arguments provided", "wrongArgNum": "Wrong number of arguments provided",
"xIsTrackOnly": "{} is track-only", "xIsTrackOnly": "{} is track-only",
@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)", "versionCorrectionDisabled": "Version correction disabled (plugin doesn't seem to work)",
"unknown": "Unknown", "unknown": "Unknown",
"none": "None", "none": "None",
"all": "All",
"never": "Never", "never": "Never",
"latestVersionX": "Latest: {}", "latestVersionX": "Latest: {}",
"installedVersionX": "Installed: {}", "installedVersionX": "Installed: {}",
@@ -313,7 +314,7 @@
"badDownload": "The APK could not be parsed (incompatible or partial download)", "badDownload": "The APK could not be parsed (incompatible or partial download)",
"beforeNewInstallsShareToAppVerifier": "Share new apps with AppVerifier (if available)", "beforeNewInstallsShareToAppVerifier": "Share new apps with AppVerifier (if available)",
"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)",
"crowdsourcedConfigsShort": "Crowdsourced app configurations", "crowdsourcedConfigsShort": "Crowdsourced app configurations",
"allowInsecure": "Allow insecure HTTP requests", "allowInsecure": "Allow insecure HTTP requests",
@@ -327,12 +328,13 @@
"smartname": "Name (smart)", "smartname": "Name (smart)",
"sortMethod": "Sort method", "sortMethod": "Sort method",
"welcome": "Welcome", "welcome": "Welcome",
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
"batteryOptimizationNote": "Note that background downloads may work more reliably if you switch to the \"foreground service\" in the Obtainium settings and/or disable battery optimization for Obtainium in your OS settings.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you switch to the \"foreground service\" in the Obtainium settings and/or disable battery optimization for Obtainium in your OS settings.",
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remove app?", "one": "Remove app?",
"other": "Remove apps?" "other": "Remove apps?"
@@ -358,16 +360,16 @@
"other": "{} URLs" "other": "{} URLs"
}, },
"minute": { "minute": {
"one": "{} Minute", "one": "{} minute",
"other": "{} Minutes" "other": "{} minutes"
}, },
"hour": { "hour": {
"one": "{} Hour", "one": "{} hour",
"other": "{} Hours" "other": "{} hours"
}, },
"day": { "day": {
"one": "{} Day", "one": "{} day",
"other": "{} Days" "other": "{} days"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Cleared {n} log (before = {before}, after = {after})", "one": "Cleared {n} log (before = {before}, after = {after})",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Corrección de versiones desactivada (el plugin parece no funcionar)", "versionCorrectionDisabled": "Corrección de versiones desactivada (el plugin parece no funcionar)",
"unknown": "Desconocido", "unknown": "Desconocido",
"none": "Ninguno", "none": "Ninguno",
"all": "Todos",
"never": "Nunca", "never": "Nunca",
"latestVersionX": "Última versión: {}", "latestVersionX": "Última versión: {}",
"installedVersionX": "Versión instalada: {}", "installedVersionX": "Versión instalada: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium servicio en primer plano", "foregroundService": "Obtainium servicio en primer plano",
"foregroundServiceExplanation": "Utilizar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).", "foregroundServiceExplanation": "Utilizar un servicio en primer plano para comprobar las actualizaciones (más fiable, consume más energía).",
"fgServiceNotice": "Esta notificación es necesaria para la comprobación de actualizaciones en segundo plano (puede ocultarse en la configuración del sistema operativo).", "fgServiceNotice": "Esta notificación es necesaria para la comprobación de actualizaciones en segundo plano (puede ocultarse en la configuración del sistema operativo).",
"excludeSecrets": "Excluir secretos",
"removeAppQuestion": { "removeAppQuestion": {
"one": "¿Eliminar aplicación?", "one": "¿Eliminar aplicación?",
"other": "¿Eliminar aplicaciones?" "other": "¿Eliminar aplicaciones?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "تصحیح نسخه غیرفعال شد (به نظر می رسد افزونه کار نمی کند)", "versionCorrectionDisabled": "تصحیح نسخه غیرفعال شد (به نظر می رسد افزونه کار نمی کند)",
"unknown": "ناشناخته", "unknown": "ناشناخته",
"none": "هیچ", "none": "هیچ",
"all": "All",
"never": "هرگز", "never": "هرگز",
"latestVersionX": "آخرین نسخه: {}", "latestVersionX": "آخرین نسخه: {}",
"installedVersionX": "نسخه نصب شده: {}", "installedVersionX": "نسخه نصب شده: {}",
@@ -327,12 +328,13 @@
"smartname": "Name (Smart)", "smartname": "Name (Smart)",
"sortMethod": "Sort Method", "sortMethod": "Sort Method",
"welcome": "Welcome", "welcome": "Welcome",
"documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions and other resources that will help you understand how to use the app.", "documentationLinksNote": "The Obtainium GitHub page linked below contains links to videos, articles, discussions, and other resources that will help you understand how to use the app.",
"batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.", "batteryOptimizationNote": "Note that background downloads may work more reliably if you disable OS battery optimizations for Obtainium.",
"fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"", "fileDeletionError": "Failed to delete file (try deleting it manually then try again): \"{}\"",
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "برنامه حذف شود؟", "one": "برنامه حذف شود؟",
"other": "برنامه ها حذف شوند؟" "other": "برنامه ها حذف شوند؟"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Correction de version désactivée (le plugin ne semble pas fonctionner)", "versionCorrectionDisabled": "Correction de version désactivée (le plugin ne semble pas fonctionner)",
"unknown": "Inconnu", "unknown": "Inconnu",
"none": "Aucun", "none": "Aucun",
"all": "Tous",
"never": "Jamais", "never": "Jamais",
"latestVersionX": "Dernière version : {}", "latestVersionX": "Dernière version : {}",
"installedVersionX": "Version installée : {}", "installedVersionX": "Version installée : {}",
@@ -333,6 +334,7 @@
"foregroundService": "Service d'avant-plan Obtainium", "foregroundService": "Service d'avant-plan Obtainium",
"foregroundServiceExplanation": "Utiliser un service de premier plan pour la vérification des mises à jour (plus fiable, consomme plus d'énergie)", "foregroundServiceExplanation": "Utiliser un service de premier plan pour la vérification des mises à jour (plus fiable, consomme plus d'énergie)",
"fgServiceNotice": "Cette notification est nécessaire pour la vérification des mises à jour en arrière-plan (elle peut être masquée dans les paramètres du système d'exploitation).", "fgServiceNotice": "Cette notification est nécessaire pour la vérification des mises à jour en arrière-plan (elle peut être masquée dans les paramètres du système d'exploitation).",
"excludeSecrets": "Exclure les secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Supprimer l'application ?", "one": "Supprimer l'application ?",
"other": "Supprimer les applications ?" "other": "Supprimer les applications ?"
@@ -358,16 +360,16 @@
"other": "{} URLs" "other": "{} URLs"
}, },
"minute": { "minute": {
"one": "{} Minute", "one": "{} minute",
"other": "{} Minutes" "other": "{} minutes"
}, },
"hour": { "hour": {
"one": "{} Heure", "one": "{} heure",
"other": "{} Heures" "other": "{} heures"
}, },
"day": { "day": {
"one": "{} Jour", "one": "{} jour",
"other": "{} Jours" "other": "{} jours"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Nettoyage du journal {n} (avant = {before}, après = {after})", "one": "Nettoyage du journal {n} (avant = {before}, après = {after})",

View File

@@ -20,19 +20,19 @@
"cancel": "Mégse", "cancel": "Mégse",
"continue": "Folytatás", "continue": "Folytatás",
"requiredInBrackets": "(Szükséges)", "requiredInBrackets": "(Szükséges)",
"dropdownNoOptsError": "HIBA: A LEGÖRDÜLŐ LISTÁNAK LEGALÁBB EGY OPCIÓVAL KELL RENDELKEZNIE", "dropdownNoOptsError": "HIBA: A LEGÖRDÜLŐ LISTÁNAK LEGALÁBB EGY KIVÁLASZTHATÓ BEÁLLÍTÁSSAL KELL RENDELKEZNIE",
"colour": "Szín", "colour": "Szín",
"standard": "Általános", "standard": "Általános",
"custom": "Egyéni", "custom": "Egyéni",
"useMaterialYou": "Material You használata", "useMaterialYou": "Material You használata",
"githubStarredRepos": "Csillagozott GitHub tárolók", "githubStarredRepos": "Csillagozott GitHub-tárolók",
"uname": "Felhasználónév", "uname": "Felhasználónév",
"wrongArgNum": "A megadott argumentumok száma nem megfelelő", "wrongArgNum": "A megadott argumentumok száma nem megfelelő",
"xIsTrackOnly": "A(z) {} csak nyomon követhető", "xIsTrackOnly": "A(z) {} csak nyomon kö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ők”.", "appsFromSourceAreTrackOnly": "Az ebből a forrásból származó alkalmazások „csak nyomon követhetők”.",
"youPickedTrackOnly": "„Csak nyomon követés” opciót választotta.", "youPickedTrackOnly": "„Csak nyomon követés” beállítást 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": "Visszavonva", "cancelled": "Visszavonva",
"appAlreadyAdded": "Az alkalmazás már hozzá van adva", "appAlreadyAdded": "Az alkalmazás már hozzá van adva",
@@ -114,7 +114,7 @@
"light": "Világos", "light": "Világos",
"followSystem": "Rendszerbeállítás használata", "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": "Teljesen fekete sötét téma használata",
"appSortBy": "Rendezési szempont", "appSortBy": "Rendezési szempont",
"authorName": "Szerző/Név", "authorName": "Szerző/Név",
"nameAuthor": "Név/Szerző", "nameAuthor": "Név/Szerző",
@@ -136,12 +136,12 @@
"share": "Megosztás", "share": "Megosztás",
"appNotFound": "Az alkalmazás nem található", "appNotFound": "Az alkalmazás nem található",
"obtainiumExportHyphenatedLowercase": "obtainium-adat", "obtainiumExportHyphenatedLowercase": "obtainium-adat",
"pickAnAPK": "Válasszon egy APK-t", "pickAnAPK": "Válasszon ki egy APK-t",
"appHasMoreThanOnePackage": "A(z) {} egynél több csomaggal rendelkezik:", "appHasMoreThanOnePackage": "A(z) {} egynél több csomaggal rendelkezik:",
"deviceSupportsXArch": "Ez az eszköz támogatja a(z) {} CPU architektúrát.", "deviceSupportsXArch": "Ez az eszköz támogatja a(z) {} CPU-architektúrát.",
"deviceSupportsFollowingArchs": "Ez az eszköz a következő CPU architektúrákat támogatja:", "deviceSupportsFollowingArchs": "Ez az eszköz a következő CPU-architektúrákat támogatja:",
"warning": "Figyelem", "warning": "Figyelem",
"sourceIsXButPackageFromYPrompt": "Az alkalmazás forrása a(z) „{}tároló, 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 egy vagy több, az Obtainium által nyomon követett alkalmazáshoz frissítések állnak rendelkezésre", "updatesAvailableNotifDescription": "Értesíti a felhasználót, hogy egy vagy több, az Obtainium által nyomon követett alkalmazáshoz frissítések állnak rendelkezésre",
"noNewUpdates": "Nincsenek új frissítések.", "noNewUpdates": "Nincsenek új frissítések.",
@@ -164,9 +164,10 @@
"pleaseAllowInstallPerm": "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 nyomon követés", "trackOnly": "Csak nyomon követés",
"errorWithHttpStatusCode": "Hiba {}", "errorWithHttpStatusCode": "Hiba {}",
"versionCorrectionDisabled": "Verzió-korrekció letiltva (úgy tűnik, hogy a bővítmény 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": "Semmi", "none": "Semmi",
"all": "Összes",
"never": "Soha", "never": "Soha",
"latestVersionX": "Legújabb verzió: {}", "latestVersionX": "Legújabb verzió: {}",
"installedVersionX": "Telepített verzió: {}", "installedVersionX": "Telepített verzió: {}",
@@ -174,25 +175,25 @@
"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": "Az alkalmazás-azonosító vagy név", "appIdOrName": "Alkalmazás-azonosító vagy név",
"appId": "Alkalmazás-azonosító", "appId": "Alkalmazás-azonosító",
"appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel", "appWithIdOrNameNotFound": "Nem található alkalmazás ezzel az azonosítóval vagy névvel",
"reposHaveMultipleApps": "A tárolók több alkalmazást is tartalmazhatnak", "reposHaveMultipleApps": "Egyes tárolók több alkalmazást is tartalmazhatnak",
"fdroidThirdPartyRepo": "F-Droid harmadik féltől származó tároló", "fdroidThirdPartyRepo": "F-Droid-tároló (harmadik fél)",
"install": "Telepítés", "install": "Telepítés",
"markInstalled": "Telepítettnek jelölés", "markInstalled": "Telepítettnek jelölés",
"update": "Frissítés", "update": "Frissítés",
"markUpdated": "Frissítettnek jelölés", "markUpdated": "Frissítettnek jelölés",
"additionalOptions": "További beállítások", "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ése", "downloadingX": "{} letöltése",
"downloadX": "{} letöltése", "downloadX": "{} letöltése",
"downloadedX": "{} letöltve", "downloadedX": "{} letöltve",
"releaseAsset": "Kiadási csomag", "releaseAsset": "Kiadási csomag",
"downloadNotifDescription": "Értesíti a felhasználót az alkalmazás 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",
@@ -206,34 +207,34 @@
"copiedToClipboard": "Másolva a vágólapra", "copiedToClipboard": "Másolva a vágólapra",
"storagePermissionDenied": "Tárhely engedély megtagadva", "storagePermissionDenied": "Tárhely engedély megtagadva",
"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": "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 az eszközrő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 verzió-karakterláncként", "releaseDateAsVersion": "Kiadás dátumának használata verzió-karakterláncként",
"releaseTitleAsVersion": "Használja a kiadás címét verzió-karakterláncként", "releaseTitleAsVersion": "Kiadás címének használata verzió-karakterláncként",
"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.", "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áslista", "changes": "Változáslista",
"releaseDate": "Kiadás dátuma", "releaseDate": "Kiadás dátuma",
"importFromURLsInFile": "Importálás fájlban található webcímből (pl. OPML)", "importFromURLsInFile": "Importálás fájlban található webcímből (például: OPML)",
"versionDetectionExplanation": "A verzió-karakterlánc egyeztetése az rendszer által érzékelt verzióval", "versionDetectionExplanation": "A verzió-karakterlánc egyeztetése az rendszer által érzékelt verzióval",
"versionDetection": "Verzió-érzékelés", "versionDetection": "Verzióérzékelés",
"standardVersionDetection": "Alapértelmezett 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 meg az APK-kat CPU-architektúra szerint szűrni", "autoApkFilterByArch": "APK-k CPU-architektúra szerinti szűrése, ha lehetséges",
"autoLinkFilterByArch": "Ha lehetséges, próbálja meg a hivatkozásokat CPU-architektúra szerint szűrni", "autoLinkFilterByArch": "Hivatkozások CPU-architektúra szerinti szűrése, ha lehetséges",
"overrideSource": "Forrás felülírása", "overrideSource": "Forrás felülírása",
"dontShowAgain": "Ne jelenítse meg ezt többé", "dontShowAgain": "Ne jelenítse meg ezt többé",
"dontShowTrackOnlyWarnings": "Ne jelenítse meg a „Csak nyomon követés” figyelmeztetést", "dontShowTrackOnlyWarnings": "„Csak nyomon követés” figyelmeztetés elrejtése",
"dontShowAPKOriginWarnings": "Ne jelenítse meg az APK eredetére vonatkozó figyelmeztetéseket", "dontShowAPKOriginWarnings": "APK eredetére vonatkozó figyelmeztetések elrejtése",
"moveNonInstalledAppsToBottom": "Helyezze át a nem telepített alkalmazásokat az alkalmazásnézet aljára", "moveNonInstalledAppsToBottom": "Nem telepített alkalmazások áthelyezése 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": "Névjegy", "about": "Névjegy",
"requiresCredentialsInSettings": "A(z) {} alkalmazásnak további hitelesítő adatokra van szüksége (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": "Frissítések ellenőrzése az alkalmazás megnyitásakor", "checkOnStart": "Frissítések ellenőrzése az alkalmazás megnyitásakor",
"tryInferAppIdFromCode": "Próbálja meg kikövetkeztetni az alkalmazás azonosítóját a forráskódból", "tryInferAppIdFromCode": "Alkalmazás azonosítójának kikövetkeztetése a forráskódból, ha lehetséges",
"removeOnExternalUninstall": "A külsőleg eltávolított alkalmazások automatikus eltávolítása", "removeOnExternalUninstall": "Külsőleg eltávolított alkalmazások automatikus eltávolítása",
"pickHighestVersionCode": "A legmagasabb verziószámú APK automatikus kiválasztása", "pickHighestVersionCode": "Legmagasabb verziókódú APK automatikus kiválasztása",
"checkUpdateOnDetailPage": "Frissítések ellenőrzése az alkalmazás részleteit tartalmazó oldal megnyitásakor", "checkUpdateOnDetailPage": "Frissítések ellenőrzé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",
@@ -258,18 +259,18 @@
"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": "Háttérfrissítések letiltása, amikor az eszköz nem csatlakozik a Wi-Fi-hez", "bgUpdatesOnWiFiOnly": "Háttérfrissítések letiltása, amikor az eszköz nem csatlakozik a Wi-Fi-hez",
"bgUpdatesWhileChargingOnly": "Háttérfrissítések letiltása, amikor az eszköz nincs a töltőn", "bgUpdatesWhileChargingOnly": "Háttérfrissítések letiltása, amikor az eszköz nincs a töltőn",
"autoSelectHighestVersionCode": "A legmagasabb verziókódú APK automatikus kiválasztása", "autoSelectHighestVersionCode": "Legmagasabb verziókódú APK automatikus kiválasztása",
"versionExtractionRegEx": "Verzió-karakterlánc kivonatolása reguláris kifejezéssel", "versionExtractionRegEx": "Verzió-karakterlánc kivonatolása reguláris kifejezéssel",
"trimVersionString": "Verzió-karakterlánc levágása reguláris kifejezéssel", "trimVersionString": "Verzió-karakterlánc levágása reguláris kifejezéssel",
"matchGroupToUseForX": "A(z) „{}” esetén használandó csoport egyeztetése", "matchGroupToUseForX": "A(z) „{}” esetén használandó csoport egyeztetése",
"matchGroupToUse": "A verzió-karakterlánc kivonatolásához használandó csoport reguláris kifejezéssel való egyeztetése", "matchGroupToUse": "Verzió-karakterlánc kivonatolásához használandó csoport reguláris kifejezéssel való egyeztetése",
"highlightTouchTargets": "A kevésbé nyilvánvaló érintési pontok kiemelése", "highlightTouchTargets": "Kevésbé nyilvánvaló érintési pontok kiemelése",
"pickExportDir": "Válassza ki a könyvtárat, ahová exportálni szeretne", "pickExportDir": "Válassza ki a könyvtárat, ahová exportálni szeretne",
"autoExportOnChanges": "Automatikus exportálás a változtatások után", "autoExportOnChanges": "Automatikus exportálás a változtatá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 kiválasztani a „Javasolt” verziókódú APK-t", "trySelectingSuggestedVersionCode": "Próbálja kiválasztani a „Javasolt” verziókódú APK-t",
"dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése", "dontSortReleasesList": "API-ból származó kiadási sorrend megőrzése",
"reverseSort": "Fordított rendezés", "reverseSort": "Fordított rendezés",
"takeFirstLink": "Vegye az első hivatkozást", "takeFirstLink": "Vegye az első hivatkozást",
"skipSort": "Rendezés kihagyása", "skipSort": "Rendezés kihagyása",
@@ -278,7 +279,7 @@
"runBgCheckNow": "Frissítések ellenőrzése a háttérben most", "runBgCheckNow": "Frissítések ellenőrzése a háttérben most",
"versionExtractWholePage": "„Verzió-karakterlánc kivonatolása reguláris kifejezéssel” alkalmazása 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": "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": "Megkísérelt alkalmazás-frissítések", "appsPossiblyUpdatedNotifChannel": "Megkísérelt alkalmazás-frissítések",
@@ -288,22 +289,22 @@
"completeAppInstallationNotifChannel": "Teljes alkalmazás telepítés", "completeAppInstallationNotifChannel": "Teljes alkalmazás telepítés",
"checkingForUpdatesNotifChannel": "Frissítések ellenőrzése", "checkingForUpdatesNotifChannel": "Frissítések ellenőrzése",
"onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak nyomon követhető alkalmazások frissítéseinek ellenőrzése", "onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak nyomon követhető alkalmazások frissítéseinek ellenőrzése",
"supportFixedAPKURL": "Támogatja a rögzített APK webcímeket", "supportFixedAPKURL": "Támogatja a rögzített APK-webcímeket",
"selectX": "{} kiválasztása", "selectX": "{} kiválasztása",
"parallelDownloads": "Párhuzamos letöltések engedélyezése", "parallelDownloads": "Párhuzamos letöltések engedélyezése",
"useShizuku": "Shizuku vagy Sui használata a telepítéshez", "useShizuku": "Shizuku vagy Sui használata a telepítéshez",
"shizukuBinderNotFound": "A Shizuku szolgáltatás nem fut", "shizukuBinderNotFound": "A Shizuku szolgáltatás nem fut",
"shizukuOld": "Régi Shizuku verzió (<11) - frissítse", "shizukuOld": "Régi Shizuku verzió (<11) - frissítse",
"shizukuOldAndroidWithADB": "A Shizuku csak Android < 8.1 ADB-vel fut - frissítse az Androidot vagy használja a Sui-t helyette", "shizukuOldAndroidWithADB": "A Shizuku csak Android < 8.1 ADB-vel fut - frissítse az Androidot vagy használja a Suit helyette",
"shizukuPretendToBeGooglePlay": "A Google Play beállítása telepítési forrásként (ha Shizukut használ)", "shizukuPretendToBeGooglePlay": "Google Play beállítása telepítési forrásként (ha Shizukut használ)",
"useSystemFont": "A rendszer betűtípusának használata", "useSystemFont": "Rendszer betűtípusának használata",
"useVersionCodeAsOSVersion": "Az alkalmazás verziókódjának használata a rendszer által érzékelt verzióként", "useVersionCodeAsOSVersion": "Alkalmazás verziókódjának használata a rendszer által érzékelt verzióként",
"requestHeader": "Kérelemfejléc", "requestHeader": "Kérelemfejléc",
"useLatestAssetDateAsReleaseDate": "A kiadás dátumaként használja a legutóbbi csomagfeltöltést", "useLatestAssetDateAsReleaseDate": "Legutóbbi csomagfeltöltés használata a kiadás dátumaként",
"defaultPseudoVersioningMethod": "Alapértelmezett pszeudoverziós módszer", "defaultPseudoVersioningMethod": "Alapértelmezett pszeudoverziós módszer",
"partialAPKHash": "Részleges APK hasító értéke", "partialAPKHash": "Részleges APK-hasítóérték",
"APKLinkHash": "APK hivatkozás hasító értéke", "APKLinkHash": "APK-hivatkozás-hasítóérték",
"directAPKLink": "Közvetlen APK hivatkozás", "directAPKLink": "Közvetlen APK-hivatkozás",
"pseudoVersionInUse": "Egy pszeudoverzió van használatban", "pseudoVersionInUse": "Egy pszeudoverzió van használatban",
"installed": "Telepített", "installed": "Telepített",
"latest": "Legújabb", "latest": "Legújabb",
@@ -318,11 +319,11 @@
"crowdsourcedConfigsShort": "Alkalmazáslista", "crowdsourcedConfigsShort": "Alkalmazáslista",
"allowInsecure": "Nem biztonságos HTTP-kérések engedélyezése", "allowInsecure": "Nem biztonságos HTTP-kérések engedélyezése",
"stayOneVersionBehind": "Maradjon egy verzióval a legújabb mögött", "stayOneVersionBehind": "Maradjon egy verzióval a legújabb mögött",
"useFirstApkOfVersion": "A legelső APK automatikus kiválasztása, ha több APK is található", "useFirstApkOfVersion": "Legelső APK automatikus kiválasztása, ha több APK is található",
"refreshBeforeDownload": "Az alkalmazás adatainak frissítése a letöltés előtt", "refreshBeforeDownload": "Alkalmazás adatainak frissítése a letöltés előtt",
"tencentAppStore": "Tencent Appstore", "tencentAppStore": "Tencent Appstore",
"coolApk": "CoolApk", "coolApk": "CoolApk",
"vivoAppStore": "vivo App Store (CN)", "vivoAppStore": "Vivo App Store (CN)",
"name": "Név", "name": "Név",
"smartname": "Név (Okos)", "smartname": "Név (Okos)",
"sortMethod": "Rendezési eljárás", "sortMethod": "Rendezési eljárás",
@@ -330,9 +331,10 @@
"documentationLinksNote": "Az alábbi hivatkozás az Obtainium GitHub oldalára vezet, amely további videók, cikkek, beszélgetések és egyéb források hivatkozásait tartalmazza, amelyek segítenek megérteni az alkalmazás használatát.", "documentationLinksNote": "Az alábbi hivatkozás az Obtainium GitHub oldalára vezet, amely további videók, cikkek, beszélgetések és egyéb források hivatkozásait tartalmazza, amelyek segítenek megérteni az alkalmazás használatát.",
"batteryOptimizationNote": "Megjegyzés: A háttérfrissítések megbízhatóbban működhetnek, ha kikapcsolja a rendszer akkumulátor-optimalizálását az Obtainium számára.", "batteryOptimizationNote": "Megjegyzés: A háttérfrissítések megbízhatóbban működhetnek, ha kikapcsolja a rendszer akkumulátor-optimalizálását az Obtainium számára.",
"fileDeletionError": "Nem sikerült törölni a fájlt (próbálja meg kézzel törölni, majd próbálja meg újra): \"{}\"", "fileDeletionError": "Nem sikerült törölni a fájlt (próbálja meg kézzel törölni, majd próbálja meg újra): \"{}\"",
"foregroundService": "Obtainium új szolgáltatás", "foregroundService": "Obtainium előtér-szolgáltatás",
"foregroundServiceExplanation": "Frissítésellenőrzéshez előtérben lévő szolgáltatás használata (megbízhatóbb, de több energiát fogyaszt)", "foregroundServiceExplanation": "Előtér-szolgáltatás használata a frissítések ellenőrzéséhez (megbízhatóbb, de több energiát fogyaszt)",
"fgServiceNotice": "Ez az értesítés a háttérben történő frissítésellenőrzéshez szükséges (az operációs rendszer beállításaiban elrejthető).", "fgServiceNotice": "Ez az értesítés a háttérben történő frissítésellenőrzéshez szükséges (a rendszer beállításaiban elrejthető).",
"excludeSecrets": "Érzékeny adatok (például: személyes hozzáférési tokenek) kihagyása",
"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?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Koreksi versi dinonaktifkan (sepertinya plugin tidak berfungsi)", "versionCorrectionDisabled": "Koreksi versi dinonaktifkan (sepertinya plugin tidak berfungsi)",
"unknown": "Tidak diketahui", "unknown": "Tidak diketahui",
"none": "Tidak ada", "none": "Tidak ada",
"all": "Semua",
"never": "Tidak pernah", "never": "Tidak pernah",
"latestVersionX": "Terbaru: {}", "latestVersionX": "Terbaru: {}",
"installedVersionX": "Terpasang: {}", "installedVersionX": "Terpasang: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Layanan latar depan Obtainium", "foregroundService": "Layanan latar depan Obtainium",
"foregroundServiceExplanation": "Gunakan layanan latar depan untuk pemeriksaan pembaruan (lebih dapat diandalkan, menghabiskan lebih banyak daya)", "foregroundServiceExplanation": "Gunakan layanan latar depan untuk pemeriksaan pembaruan (lebih dapat diandalkan, menghabiskan lebih banyak daya)",
"fgServiceNotice": "Pemberitahuan ini diperlukan untuk pemeriksaan pembaruan latar belakang (dapat disembunyikan dalam pengaturan OS)", "fgServiceNotice": "Pemberitahuan ini diperlukan untuk pemeriksaan pembaruan latar belakang (dapat disembunyikan dalam pengaturan OS)",
"excludeSecrets": "Mengecualikan rahasia",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Hapus aplikasi?", "one": "Hapus aplikasi?",
"other": "Hapus aplikasi?" "other": "Hapus aplikasi?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Correzione della versione disattivata (il plugin sembra non funzionare)", "versionCorrectionDisabled": "Correzione della versione disattivata (il plugin sembra non funzionare)",
"unknown": "Sconosciuto", "unknown": "Sconosciuto",
"none": "Nessuno", "none": "Nessuno",
"all": "Tutti",
"never": "Mai", "never": "Mai",
"latestVersionX": "Ultima versione: {}", "latestVersionX": "Ultima versione: {}",
"installedVersionX": "Versione installata: {}", "installedVersionX": "Versione installata: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Servizio Obtainium in primo piano", "foregroundService": "Servizio Obtainium in primo piano",
"foregroundServiceExplanation": "Utilizzare un servizio in primo piano per il controllo degli aggiornamenti (più affidabile, consuma più energia)", "foregroundServiceExplanation": "Utilizzare un servizio in primo piano per il controllo degli aggiornamenti (più affidabile, consuma più energia)",
"fgServiceNotice": "Questa notifica è necessaria per il controllo degli aggiornamenti in background (può essere nascosta nelle impostazioni del sistema operativo).", "fgServiceNotice": "Questa notifica è necessaria per il controllo degli aggiornamenti in background (può essere nascosta nelle impostazioni del sistema operativo).",
"excludeSecrets": "Escludere i segreti",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Rimuovere l'app?", "one": "Rimuovere l'app?",
"other": "Rimuovere le app?" "other": "Rimuovere le app?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "バージョン補正無効 (プラグインが動作していません)", "versionCorrectionDisabled": "バージョン補正無効 (プラグインが動作していません)",
"unknown": "不明", "unknown": "不明",
"none": "なし", "none": "なし",
"all": "すべて",
"never": "しない", "never": "しない",
"latestVersionX": "最新のバージョン: {}", "latestVersionX": "最新のバージョン: {}",
"installedVersionX": "インストールされたバージョン: {}", "installedVersionX": "インストールされたバージョン: {}",
@@ -221,7 +222,7 @@
"standardVersionDetection": "標準のバージョン検出", "standardVersionDetection": "標準のバージョン検出",
"groupByCategory": "カテゴリ別にグループ化する", "groupByCategory": "カテゴリ別にグループ化する",
"autoApkFilterByArch": "可能であれば、CPUアーキテクチャによるAPKのフィルタリングを試みる", "autoApkFilterByArch": "可能であれば、CPUアーキテクチャによるAPKのフィルタリングを試みる",
"autoLinkFilterByArch": "可能であれば、CPUアーキテクチャによるリンクのフィルタリングを試みる", "autoLinkFilterByArch": "可能であれば、CPUアーキテクチャによるリンクのフィルタリングを試みる",
"overrideSource": "ソースの上書き", "overrideSource": "ソースの上書き",
"dontShowAgain": "二度と表示しない", "dontShowAgain": "二度と表示しない",
"dontShowTrackOnlyWarnings": "「追跡のみ」の警告を表示しない", "dontShowTrackOnlyWarnings": "「追跡のみ」の警告を表示しない",
@@ -321,18 +322,19 @@
"useFirstApkOfVersion": "複数のAPKから最初のAPKを自動選択する", "useFirstApkOfVersion": "複数のAPKから最初のAPKを自動選択する",
"refreshBeforeDownload": "ダウンロード前にアプリの詳細を更新する", "refreshBeforeDownload": "ダウンロード前にアプリの詳細を更新する",
"tencentAppStore": "Tencent App Store", "tencentAppStore": "Tencent App Store",
"coolApk": "クールApk", "coolApk": "Cool Apk",
"vivoAppStore": "vivo App Store (CN)", "vivoAppStore": "vivo App Store (CN)",
"name": "名", "name": "アプリ名",
"smartname": "名(スマート)", "smartname": "アプリ名(スマート)",
"sortMethod": "ソート方法", "sortMethod": "ソート方法",
"welcome": "ようこそ", "welcome": "ようこそ",
"documentationLinksNote": "以下のリンクにあるObtainium GitHubページには、ビデオ、記事、ディスカッション、その他のリソースへのリンクがあり、アプリの使い方を理解するのに役立ちます。", "documentationLinksNote": "以下のリンクにあるObtainium GitHubページには、ビデオ、記事、ディスカッション、その他のリソースへのリンクがあり、アプリの使い方を理解するのに役立ちます。",
"batteryOptimizationNote": "ObtainiumのOSバッテリー最適化を無効にすると、バックグラウンドダウンロードがより確実に動作するようになります。", "batteryOptimizationNote": "ObtainiumのOSバッテリー最適化を無効にすると、バックグラウンドダウンロードがより確実に動作するようになります。",
"fileDeletionError": "ファイルの削除に失敗しました(手動で削除してから再試行してください):\"{}\"", "fileDeletionError": "ファイルの削除に失敗しました(手動で削除してから再試行してください):\"{}\"",
"foregroundService": "フォアグラウンドサービス", "foregroundService": "Obtainium フォアグラウンドサービス",
"foregroundServiceExplanation": "更新チェックにフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)", "foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)",
"fgServiceNotice": "この通知は、バックグラウンドでアップデートをチェックするために必要ですOSの設定で非表示にできます。", "fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要ですOSの設定で非表示にできます。",
"excludeSecrets": "秘密を除く",
"removeAppQuestion": { "removeAppQuestion": {
"one": "アプリを削除しますか?", "one": "アプリを削除しますか?",
"other": "アプリを削除しますか?" "other": "アプリを削除しますか?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "버전 수정 비활성화됨 (플러그인이 작동하지 않는 것 같습니다)", "versionCorrectionDisabled": "버전 수정 비활성화됨 (플러그인이 작동하지 않는 것 같습니다)",
"unknown": "알 수 없음", "unknown": "알 수 없음",
"none": "없음", "none": "없음",
"all": "모두",
"never": "절대", "never": "절대",
"latestVersionX": "최신: {}", "latestVersionX": "최신: {}",
"installedVersionX": "설치됨: {}", "installedVersionX": "설치됨: {}",
@@ -333,6 +334,7 @@
"foregroundService": "오베티움 포그라운드 서비스", "foregroundService": "오베티움 포그라운드 서비스",
"foregroundServiceExplanation": "업데이트 확인을 위해 포그라운드 서비스 사용(안정성 향상, 전력 소비량 증가)", "foregroundServiceExplanation": "업데이트 확인을 위해 포그라운드 서비스 사용(안정성 향상, 전력 소비량 증가)",
"fgServiceNotice": "이 알림은 백그라운드 업데이트 확인에 필요합니다(OS 설정에서 숨길 수 있음).", "fgServiceNotice": "이 알림은 백그라운드 업데이트 확인에 필요합니다(OS 설정에서 숨길 수 있음).",
"excludeSecrets": "비밀 제외",
"removeAppQuestion": { "removeAppQuestion": {
"one": "앱을 제거하시겠습니까?", "one": "앱을 제거하시겠습니까?",
"other": "앱을 제거하시겠습니까?" "other": "앱을 제거하시겠습니까?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "പതിപ്പ് തിരുത്തൽ പ്രവർത്തനരഹിതമാക്കി (പ്ലഗിൻ പ്രവർത്തിക്കുന്നതായി തോന്നുന്നില്ല)", "versionCorrectionDisabled": "പതിപ്പ് തിരുത്തൽ പ്രവർത്തനരഹിതമാക്കി (പ്ലഗിൻ പ്രവർത്തിക്കുന്നതായി തോന്നുന്നില്ല)",
"unknown": "അജ്ഞാതം", "unknown": "അജ്ഞാതം",
"none": "ഒന്നുമില്ല", "none": "ഒന്നുമില്ല",
"all": "All",
"never": "ഒരിക്കലുമില്ല", "never": "ഒരിക്കലുമില്ല",
"latestVersionX": "ഏറ്റവും പുതിയത്: {}", "latestVersionX": "ഏറ്റവും പുതിയത്: {}",
"installedVersionX": "ഇൻസ്റ്റാൾ ചെയ്തത്: {}", "installedVersionX": "ഇൻസ്റ്റാൾ ചെയ്തത്: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "ആപ്പ് നീക്കം ചെയ്യണോ?", "one": "ആപ്പ് നീക്കം ചെയ്യണോ?",
"other": "ആപ്പുകൾ നീക്കം ചെയ്യണോ?" "other": "ആപ്പുകൾ നീക്കം ചെയ്യണോ?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Versiecorrectie uitgeschakeld (de plug-in lijkt niet te werken)", "versionCorrectionDisabled": "Versiecorrectie uitgeschakeld (de plug-in lijkt niet te werken)",
"unknown": "Onbekend", "unknown": "Onbekend",
"none": "Geen", "none": "Geen",
"all": "Alle",
"never": "Nooit", "never": "Nooit",
"latestVersionX": "Laatste versie: {}", "latestVersionX": "Laatste versie: {}",
"installedVersionX": "Geïnstalleerde versie: {}", "installedVersionX": "Geïnstalleerde versie: {}",
@@ -313,7 +314,7 @@
"badDownload": "De APK kon niet worden verwerkt (incompatibele of gedeeltelijke download)", "badDownload": "De APK kon niet worden verwerkt (incompatibele of gedeeltelijke download)",
"beforeNewInstallsShareToAppVerifier": "Nieuwe Apps delen met AppVerifier (indien beschikbaar)", "beforeNewInstallsShareToAppVerifier": "Nieuwe Apps delen met AppVerifier (indien beschikbaar)",
"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)",
"crowdsourcedConfigsShort": "App-configuraties door menigte", "crowdsourcedConfigsShort": "App-configuraties door menigte",
"allowInsecure": "Onveilige HTTP-verzoeken toestaan", "allowInsecure": "Onveilige HTTP-verzoeken toestaan",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Gebruik een voorgronddienst voor het controleren van updates (betrouwbaarder, verbruikt meer stroom)", "foregroundServiceExplanation": "Gebruik een voorgronddienst voor het controleren van updates (betrouwbaarder, verbruikt meer stroom)",
"fgServiceNotice": "Deze melding is nodig voor het controleren van updates op de achtergrond (kan worden verborgen in de OS-instellingen)", "fgServiceNotice": "Deze melding is nodig voor het controleren van updates op de achtergrond (kan worden verborgen in de OS-instellingen)",
"excludeSecrets": "Geheimen uitsluiten",
"removeAppQuestion": { "removeAppQuestion": {
"one": "App verwijderen?", "one": "App verwijderen?",
"other": "Apps verwijderen?" "other": "Apps verwijderen?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Korekta wersji wyłączona (wtyczka wydaje się nie działać)", "versionCorrectionDisabled": "Korekta wersji wyłączona (wtyczka wydaje się nie działać)",
"unknown": "Nieznane", "unknown": "Nieznane",
"none": "Brak", "none": "Brak",
"all": "Wszystkie",
"never": "Nigdy", "never": "Nigdy",
"latestVersionX": "Najnowsza wersja: {}", "latestVersionX": "Najnowsza wersja: {}",
"installedVersionX": "Zainstalowana wersja: {}", "installedVersionX": "Zainstalowana wersja: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Usługa nowej generacji Obtainium", "foregroundService": "Usługa nowej generacji Obtainium",
"foregroundServiceExplanation": "Używanie usługi pierwszoplanowej do sprawdzania aktualizacji (bardziej niezawodne, zużywa więcej energii)", "foregroundServiceExplanation": "Używanie usługi pierwszoplanowej do sprawdzania aktualizacji (bardziej niezawodne, zużywa więcej energii)",
"fgServiceNotice": "To powiadomienie jest wymagane do sprawdzania aktualizacji w tle (można je ukryć w ustawieniach systemu operacyjnego).", "fgServiceNotice": "To powiadomienie jest wymagane do sprawdzania aktualizacji w tle (można je ukryć w ustawieniach systemu operacyjnego).",
"excludeSecrets": "Wyklucz sekrety",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Usunąć aplikację?", "one": "Usunąć aplikację?",
"few": "Usunąć aplikacje?", "few": "Usunąć aplikacje?",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Correção de versão desativada (o plugin parece não funcionar)", "versionCorrectionDisabled": "Correção de versão desativada (o plugin parece não funcionar)",
"unknown": "Desconhecido", "unknown": "Desconhecido",
"none": "Nenhum", "none": "Nenhum",
"all": "Todos",
"never": "Nunca", "never": "Nunca",
"latestVersionX": "Mais recente: {}", "latestVersionX": "Mais recente: {}",
"installedVersionX": "Instalado: {}", "installedVersionX": "Instalado: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Serviço de primeiro plano do Obtainium", "foregroundService": "Serviço de primeiro plano do Obtainium",
"foregroundServiceExplanation": "Usar um serviço em primeiro plano para verificação de atualizações (mais confiável, consome mais energia)", "foregroundServiceExplanation": "Usar um serviço em primeiro plano para verificação de atualizações (mais confiável, consome mais energia)",
"fgServiceNotice": "Essa notificação é necessária para a verificação de atualizações em segundo plano (ela pode ser ocultada nas configurações do sistema operacional)", "fgServiceNotice": "Essa notificação é necessária para a verificação de atualizações em segundo plano (ela pode ser ocultada nas configurações do sistema operacional)",
"excludeSecrets": "Excluir segredos",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remover app?", "one": "Remover app?",
"other": "Remover apps?" "other": "Remover apps?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Correção de versão desativada (plugin parece não funcionar)", "versionCorrectionDisabled": "Correção de versão desativada (plugin parece não funcionar)",
"unknown": "Desconhecido", "unknown": "Desconhecido",
"none": "Nenhum", "none": "Nenhum",
"all": "Todos",
"never": "Nunca", "never": "Nunca",
"latestVersionX": "Última versão: {}", "latestVersionX": "Última versão: {}",
"installedVersionX": "Versão instalada: {}", "installedVersionX": "Versão instalada: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Serviço de primeiro plano Obtainium", "foregroundService": "Serviço de primeiro plano Obtainium",
"foregroundServiceExplanation": "Utilizar um serviço em primeiro plano para verificação de actualizações (mais fiável, consome mais energia)", "foregroundServiceExplanation": "Utilizar um serviço em primeiro plano para verificação de actualizações (mais fiável, consome mais energia)",
"fgServiceNotice": "Esta notificação é necessária para a verificação de actualizações em segundo plano (pode ser ocultada nas definições do SO)", "fgServiceNotice": "Esta notificação é necessária para a verificação de actualizações em segundo plano (pode ser ocultada nas definições do SO)",
"excludeSecrets": "Excluir segredos",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Remover aplicativo?", "one": "Remover aplicativo?",
"other": "Remover aplicativos?" "other": "Remover aplicativos?"
@@ -358,16 +360,16 @@
"other": "{} URLs" "other": "{} URLs"
}, },
"minute": { "minute": {
"one": "{} Minuto", "one": "{} minuto",
"other": "{} Minutos" "other": "{} minutos"
}, },
"hour": { "hour": {
"one": "{} Hora", "one": "{} hora",
"other": "{} Horas" "other": "{} horas"
}, },
"day": { "day": {
"one": "{} Dia", "one": "{} dia",
"other": "{} Dias" "other": "{} dias"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Foi limpo {n} log (antes = {antes}, depois = {depois})", "one": "Foi limpo {n} log (antes = {antes}, depois = {depois})",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Коррекция версий отключена (плагин, кажется, не работает)", "versionCorrectionDisabled": "Коррекция версий отключена (плагин, кажется, не работает)",
"unknown": "Неизвестно", "unknown": "Неизвестно",
"none": "Отсутствует", "none": "Отсутствует",
"all": "Все",
"never": "Никогда", "never": "Никогда",
"latestVersionX": "Последняя версия: {}", "latestVersionX": "Последняя версия: {}",
"installedVersionX": "Установленная версия: {}", "installedVersionX": "Установленная версия: {}",
@@ -292,7 +293,7 @@
"selectX": "Выбрать {}", "selectX": "Выбрать {}",
"parallelDownloads": "Использовать параллельные загрузки", "parallelDownloads": "Использовать параллельные загрузки",
"useShizuku": "Использовать Shizuku или Sui для установки", "useShizuku": "Использовать Shizuku или Sui для установки",
"shizukuBinderNotFound": "Совместимый сервис Shizuku не найден, возможно он не запущен", "shizukuBinderNotFound": "Совместимая служба Shizuku не найдена, возможно, она не запущена",
"shizukuOld": "Устаревшая версия Shizuku (<11), обновите", "shizukuOld": "Устаревшая версия Shizuku (<11), обновите",
"shizukuOldAndroidWithADB": "Shizuku работает на Android < 8.1 с ADB, обновите Android или используйте Sui", "shizukuOldAndroidWithADB": "Shizuku работает на Android < 8.1 с ADB, обновите Android или используйте Sui",
"shizukuPretendToBeGooglePlay": "Указывать Google Play как источник установки (если используется Shizuku)", "shizukuPretendToBeGooglePlay": "Указывать Google Play как источник установки (если используется Shizuku)",
@@ -330,9 +331,10 @@
"documentationLinksNote": "На странице Obtainium в GitHub, ссылка на которую приведена ниже, содержатся ссылки на видео, статьи, обсуждения и другие ресурсы, которые помогут вам понять, как пользоваться приложением.", "documentationLinksNote": "На странице Obtainium в GitHub, ссылка на которую приведена ниже, содержатся ссылки на видео, статьи, обсуждения и другие ресурсы, которые помогут вам понять, как пользоваться приложением.",
"batteryOptimizationNote": "Обратите внимание, что фоновая загрузка может работать более надёжно, если отключить оптимизацию батареи ОС для Obtainium.", "batteryOptimizationNote": "Обратите внимание, что фоновая загрузка может работать более надёжно, если отключить оптимизацию батареи ОС для Obtainium.",
"fileDeletionError": "Не удалось удалить файл (попробуйте удалить его вручную, а затем повторите попытку): «{}»", "fileDeletionError": "Не удалось удалить файл (попробуйте удалить его вручную, а затем повторите попытку): «{}»",
"foregroundService": ередний план службы Obtainium", "foregroundService": риоритетная служба Obtainium",
"foregroundServiceExplanation": "Используйте службу переднего плана для проверки обновлений (более надежно, потребляет больше энергии).", "foregroundServiceExplanation": "Использовать приоритетную службу для проверки обновлений (надёжнее, энергозатратнее)",
"fgServiceNotice": "Это уведомление необходимо для фоновой проверки обновлений (его можно скрыть в настройках ОС)", "fgServiceNotice": "Это уведомление необходимо для фоновой проверки обновлений (оно может быть скрыто в настройках ОС)",
"excludeSecrets": "Исключить секреты",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Удалить приложение?", "one": "Удалить приложение?",
"other": "Удалить приложения?" "other": "Удалить приложения?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Versionskorrigering inaktiverat (plugin verkar inte fungera)", "versionCorrectionDisabled": "Versionskorrigering inaktiverat (plugin verkar inte fungera)",
"unknown": "Okänd", "unknown": "Okänd",
"none": "Ingen", "none": "Ingen",
"all": "Alla",
"never": "Aldrig", "never": "Aldrig",
"latestVersionX": "Senaste Version: {}", "latestVersionX": "Senaste Version: {}",
"installedVersionX": "Installerad Version: {}", "installedVersionX": "Installerad Version: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium förgrundstjänst", "foregroundService": "Obtainium förgrundstjänst",
"foregroundServiceExplanation": "Använd en förgrundstjänst för uppdateringskontroll (mer tillförlitlig, förbrukar mer ström)", "foregroundServiceExplanation": "Använd en förgrundstjänst för uppdateringskontroll (mer tillförlitlig, förbrukar mer ström)",
"fgServiceNotice": "Detta meddelande krävs för bakgrundsuppdateringskontroll (det kan döljas i OS-inställningarna)", "fgServiceNotice": "Detta meddelande krävs för bakgrundsuppdateringskontroll (det kan döljas i OS-inställningarna)",
"excludeSecrets": "Utesluta hemligheter",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Ta Bort App?", "one": "Ta Bort App?",
"other": "Ta Bort Appar?" "other": "Ta Bort Appar?"
@@ -358,16 +360,16 @@
"other": "{} URL:er" "other": "{} URL:er"
}, },
"minute": { "minute": {
"one": "{} Minut", "one": "{} minut",
"other": "{} Minuter" "other": "{} minuter"
}, },
"hour": { "hour": {
"one": "{} Timme", "one": "{} timme",
"other": "{} Timmar" "other": "{} timmar"
}, },
"day": { "day": {
"one": "{} Dag", "one": "{} dag",
"other": "{} Dagar" "other": "{} dagar"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "Rensade {n} logg (före = {before}, efter = {after})", "one": "Rensade {n} logg (före = {before}, efter = {after})",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Sürüm düzeltme devre dışı bırakıldı (eklenti çalışmıyor gibi görünüyor)", "versionCorrectionDisabled": "Sürüm düzeltme devre dışı bırakıldı (eklenti çalışmıyor gibi görünüyor)",
"unknown": "Bilinmiyor", "unknown": "Bilinmiyor",
"none": "Hiçbiri", "none": "Hiçbiri",
"all": "Tümü",
"never": "Asla", "never": "Asla",
"latestVersionX": "En Son Sürüm: {}", "latestVersionX": "En Son Sürüm: {}",
"installedVersionX": "Yüklenen Sürüm: {}", "installedVersionX": "Yüklenen Sürüm: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium ön plan hizmeti", "foregroundService": "Obtainium ön plan hizmeti",
"foregroundServiceExplanation": "Güncelleme denetimi için bir ön plan hizmeti kullanın (daha güvenilir, daha fazla güç tüketir)", "foregroundServiceExplanation": "Güncelleme denetimi için bir ön plan hizmeti kullanın (daha güvenilir, daha fazla güç tüketir)",
"fgServiceNotice": "Bu bildirim arka planda güncelleme kontrolü için gereklidir (işletim sistemi ayarlarından gizlenebilir)", "fgServiceNotice": "Bu bildirim arka planda güncelleme kontrolü için gereklidir (işletim sistemi ayarlarından gizlenebilir)",
"excludeSecrets": "Sırları hariç tut",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Uygulamayı Kaldır?", "one": "Uygulamayı Kaldır?",
"other": "Uygulamaları Kaldır?" "other": "Uygulamaları Kaldır?"
@@ -358,16 +360,16 @@
"other": "{} URL" "other": "{} URL"
}, },
"minute": { "minute": {
"one": "{} Dakika", "one": "{} dakika",
"other": "{} Dakika" "other": "{} dakika"
}, },
"hour": { "hour": {
"one": "{} Saat", "one": "{} saat",
"other": "{} Saat" "other": "{} saat"
}, },
"day": { "day": {
"one": "{} Gün", "one": "{} gün",
"other": "{} Gün" "other": "{} gün"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "{n} log temizlendi (önce = {before}, sonra = {after})", "one": "{n} log temizlendi (önce = {before}, sonra = {after})",

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Виправлення версії вимкнено (здається, плагін не працює)", "versionCorrectionDisabled": "Виправлення версії вимкнено (здається, плагін не працює)",
"unknown": "Невідомо", "unknown": "Невідомо",
"none": "Нічого", "none": "Нічого",
"all": "Усе.",
"never": "Ніколи", "never": "Ніколи",
"latestVersionX": "Остання версія: {}", "latestVersionX": "Остання версія: {}",
"installedVersionX": "Встановлено: {}", "installedVersionX": "Встановлено: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Обслуговування переднього плану Obtainium", "foregroundService": "Обслуговування переднього плану Obtainium",
"foregroundServiceExplanation": "Використовуйте службу переднього плану для перевірки оновлень (надійніша, споживає більше енергії)", "foregroundServiceExplanation": "Використовуйте службу переднього плану для перевірки оновлень (надійніша, споживає більше енергії)",
"fgServiceNotice": "Це сповіщення необхідне для фонової перевірки оновлень (його можна приховати в налаштуваннях ОС)", "fgServiceNotice": "Це сповіщення необхідне для фонової перевірки оновлень (його можна приховати в налаштуваннях ОС)",
"excludeSecrets": "Виключити секрети",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Видалити застосунок?", "one": "Видалити застосунок?",
"other": "Видалити застосунки?" "other": "Видалити застосунки?"

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "Tính năng sửa phiên bản bị vô hiệu hóa (plugin dường như không hoạt động)", "versionCorrectionDisabled": "Tính năng sửa phiên bản bị vô hiệu hóa (plugin dường như không hoạt động)",
"unknown": "Không xác định", "unknown": "Không xác định",
"none": "Không", "none": "Không",
"all": "Tất cả",
"never": "Không bao giờ", "never": "Không bao giờ",
"latestVersionX": "Phiên bản mới nhất: {}", "latestVersionX": "Phiên bản mới nhất: {}",
"installedVersionX": "Phiên bản đã cài đặt: {}", "installedVersionX": "Phiên bản đã cài đặt: {}",
@@ -333,6 +334,7 @@
"foregroundService": "Dịch vụ nền Obtainium", "foregroundService": "Dịch vụ nền Obtainium",
"foregroundServiceExplanation": "Sử dụng dịch vụ nền trước để kiểm tra cập nhật (đáng tin cậy hơn, tiêu tốn nhiều pin hơn)", "foregroundServiceExplanation": "Sử dụng dịch vụ nền trước để kiểm tra cập nhật (đáng tin cậy hơn, tiêu tốn nhiều pin hơn)",
"fgServiceNotice": "Thông báo này là bắt buộc để kiểm tra cập nhật nền (có thể ẩn trong cài đặt hệ điều hành).", "fgServiceNotice": "Thông báo này là bắt buộc để kiểm tra cập nhật nền (có thể ẩn trong cài đặt hệ điều hành).",
"excludeSecrets": "Loại trừ thông tin bí mật",
"removeAppQuestion": { "removeAppQuestion": {
"one": "Gỡ ứng dụng?", "one": "Gỡ ứng dụng?",
"other": "Gỡ ứng dụng?" "other": "Gỡ ứng dụng?"
@@ -358,15 +360,15 @@
"other": "{} URL" "other": "{} URL"
}, },
"minute": { "minute": {
"one": "{} Phút", "one": "{} phút",
"other": "{} Phút" "other": "{} phút"
}, },
"hour": { "hour": {
"one": "{} Giờ", "one": "{} giờ",
"other": "{} Giờ" "other": "{} giờ"
}, },
"day": { "day": {
"one": "{} Ngày", "one": "{} ngày",
"other": "{} ngày" "other": "{} ngày"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {

View File

@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "版本校正已停用(外掛程式似乎無法正常工作)", "versionCorrectionDisabled": "版本校正已停用(外掛程式似乎無法正常工作)",
"unknown": "未知", "unknown": "未知",
"none": "無", "none": "無",
"all": "All",
"never": "從不", "never": "從不",
"latestVersionX": "最新版本:{}", "latestVersionX": "最新版本:{}",
"installedVersionX": "已安裝版本:{}", "installedVersionX": "已安裝版本:{}",
@@ -333,6 +334,7 @@
"foregroundService": "Obtainium foreground service", "foregroundService": "Obtainium foreground service",
"foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)", "foregroundServiceExplanation": "Use a foreground service for update checking (more reliable, consumes more power)",
"fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)", "fgServiceNotice": "This notification is required for background update checking (it can be hidden in the OS settings)",
"excludeSecrets": "Exclude secrets",
"removeAppQuestion": { "removeAppQuestion": {
"one": "移除應用程式?", "one": "移除應用程式?",
"other": "移除應用程式?" "other": "移除應用程式?"

View File

@@ -23,7 +23,7 @@
"dropdownNoOptsError": "错误:下拉菜单必须包含至少一个选项", "dropdownNoOptsError": "错误:下拉菜单必须包含至少一个选项",
"colour": "配色", "colour": "配色",
"standard": "标准", "standard": "标准",
"custom": "定制", "custom": "自定义",
"useMaterialYou": "使用 Material You", "useMaterialYou": "使用 Material You",
"githubStarredRepos": "已星标的 GitHub 仓库", "githubStarredRepos": "已星标的 GitHub 仓库",
"uname": "用户名", "uname": "用户名",
@@ -50,7 +50,7 @@
"appsString": "应用列表", "appsString": "应用列表",
"noApps": "无应用", "noApps": "无应用",
"noAppsForFilter": "没有符合条件的应用", "noAppsForFilter": "没有符合条件的应用",
"byX": "者:{}", "byX": "开发者:{}",
"percentProgress": "进度:{}%", "percentProgress": "进度:{}%",
"pleaseWait": "请稍候", "pleaseWait": "请稍候",
"updateAvailable": "更新可用", "updateAvailable": "更新可用",
@@ -157,8 +157,8 @@
"appsRemovedNotifDescription": "当应用因加载出错而被删除时发送通知", "appsRemovedNotifDescription": "当应用因加载出错而被删除时发送通知",
"xWasRemovedDueToErrorY": "“{}”由于以下错误被删除:{}", "xWasRemovedDueToErrorY": "“{}”由于以下错误被删除:{}",
"completeAppInstallation": "完成应用安装", "completeAppInstallation": "完成应用安装",
"obtainiumMustBeOpenToInstallApps": "必须启 Obtainium 才能安装应用", "obtainiumMustBeOpenToInstallApps": "必须启 Obtainium 才能安装应用",
"completeAppInstallationNotifDescription": "提示返回 Obtainium 以完成应用安装", "completeAppInstallationNotifDescription": "提示返回 Obtainium 以完成应用安装",
"checkingForUpdates": "正在检查更新", "checkingForUpdates": "正在检查更新",
"checkingForUpdatesNotifDescription": "检查更新时短暂显示的通知", "checkingForUpdatesNotifDescription": "检查更新时短暂显示的通知",
"pleaseAllowInstallPerm": "请授予 Obtainium 安装应用的权限", "pleaseAllowInstallPerm": "请授予 Obtainium 安装应用的权限",
@@ -167,6 +167,7 @@
"versionCorrectionDisabled": "禁用版本号更正(插件似乎未起作用)", "versionCorrectionDisabled": "禁用版本号更正(插件似乎未起作用)",
"unknown": "未知", "unknown": "未知",
"none": "无", "none": "无",
"all": "全部",
"never": "从未", "never": "从未",
"latestVersionX": "最新版本:{}", "latestVersionX": "最新版本:{}",
"installedVersionX": "当前版本:{}", "installedVersionX": "当前版本:{}",
@@ -199,7 +200,7 @@
"noCategory": "无类别", "noCategory": "无类别",
"noCategories": "无类别", "noCategories": "无类别",
"deleteCategoriesQuestion": "是否删除选中的类别?", "deleteCategoriesQuestion": "是否删除选中的类别?",
"categoryDeleteWarning": "被删除类别的应用将恢复为未分类状态。", "categoryDeleteWarning": "被删除类别的应用将恢复为未分类状态。",
"addCategory": "添加类别", "addCategory": "添加类别",
"label": "标签", "label": "标签",
"language": "语言", "language": "语言",
@@ -211,7 +212,7 @@
"uninstallFromDevice": "从设备中卸载", "uninstallFromDevice": "从设备中卸载",
"onlyWorksWithNonVersionDetectApps": "仅适用于禁用版本检测的应用。", "onlyWorksWithNonVersionDetectApps": "仅适用于禁用版本检测的应用。",
"releaseDateAsVersion": "将发行日期作为版本号", "releaseDateAsVersion": "将发行日期作为版本号",
"releaseTitleAsVersion": "使用版本标题作为版本字符串", "releaseTitleAsVersion": "将发行标题作为版本字符串",
"releaseDateAsVersionExplanation": "此选项应该仅用于无法进行版本检测但能够获取发行日期的应用。", "releaseDateAsVersionExplanation": "此选项应该仅用于无法进行版本检测但能够获取发行日期的应用。",
"changes": "更新日志", "changes": "更新日志",
"releaseDate": "发行日期", "releaseDate": "发行日期",
@@ -220,8 +221,8 @@
"versionDetection": "版本检测", "versionDetection": "版本检测",
"standardVersionDetection": "常规版本检测", "standardVersionDetection": "常规版本检测",
"groupByCategory": "按类别分组显示", "groupByCategory": "按类别分组显示",
"autoApkFilterByArch": "如果可能,尝试按设备支持的 CPU 架构筛选 APK 文件", "autoApkFilterByArch": "尽可能按设备支持的 CPU 架构筛选 APK 文件",
"autoLinkFilterByArch": "尽可能按 CPU 架构过滤链接", "autoLinkFilterByArch": "尽可能按设备支持的 CPU 架构筛选链接",
"overrideSource": "覆盖来源", "overrideSource": "覆盖来源",
"dontShowAgain": "不再显示", "dontShowAgain": "不再显示",
"dontShowTrackOnlyWarnings": "忽略“仅追踪”模式警告", "dontShowTrackOnlyWarnings": "忽略“仅追踪”模式警告",
@@ -249,7 +250,7 @@
"xWasPossiblyUpdatedToY": "已尝试将“{}”更新至 {}。", "xWasPossiblyUpdatedToY": "已尝试将“{}”更新至 {}。",
"enableBackgroundUpdates": "启用全局后台更新", "enableBackgroundUpdates": "启用全局后台更新",
"backgroundUpdateReqsExplanation": "后台更新未必适用于所有的应用。", "backgroundUpdateReqsExplanation": "后台更新未必适用于所有的应用。",
"backgroundUpdateLimitsExplanation": "只有在启 Obtainium 时才能确认安装是否成功。", "backgroundUpdateLimitsExplanation": "只有在启 Obtainium 时才能确认是否安装成功。",
"verifyLatestTag": "验证“Latest”标签", "verifyLatestTag": "验证“Latest”标签",
"intermediateLinkRegex": "筛选中转链接的正则表达式", "intermediateLinkRegex": "筛选中转链接的正则表达式",
"filterByLinkText": "根据链接文本进行筛选", "filterByLinkText": "根据链接文本进行筛选",
@@ -257,12 +258,12 @@
"intermediateLink": "中转链接", "intermediateLink": "中转链接",
"exemptFromBackgroundUpdates": "禁用后台更新(仅此应用生效,即使已启用全局后台更新)", "exemptFromBackgroundUpdates": "禁用后台更新(仅此应用生效,即使已启用全局后台更新)",
"bgUpdatesOnWiFiOnly": "未连接 Wi-Fi 时禁用后台更新", "bgUpdatesOnWiFiOnly": "未连接 Wi-Fi 时禁用后台更新",
"bgUpdatesWhileChargingOnly": "充电时禁用后台更新", "bgUpdatesWhileChargingOnly": "充电时禁用后台更新",
"autoSelectHighestVersionCode": "自动选择内部版本号最高的 APK 文件", "autoSelectHighestVersionCode": "自动选择内部版本号最高的 APK 文件",
"versionExtractionRegEx": "提取版本号的正则表达式", "versionExtractionRegEx": "提取版本号的正则表达式",
"trimVersionString": "使用 RegEx 修剪版本字符串", "trimVersionString": "修剪版本字符串的正则表达式",
"matchGroupToUseForX": "用于\"{}\"的匹配组", "matchGroupToUseForX": "“{}”中引用的捕获组",
"matchGroupToUse": "从上述匹配结果中引用的捕获组", "matchGroupToUse": "“提取版本字符串的正则表达式”中引用的捕获组",
"highlightTouchTargets": "突出展示不明显的可交互区域", "highlightTouchTargets": "突出展示不明显的可交互区域",
"pickExportDir": "选择导出文件夹", "pickExportDir": "选择导出文件夹",
"autoExportOnChanges": "数据变更时自动导出", "autoExportOnChanges": "数据变更时自动导出",
@@ -314,32 +315,33 @@
"beforeNewInstallsShareToAppVerifier": "通过 AppVerifier 校验新应用(如果可用)", "beforeNewInstallsShareToAppVerifier": "通过 AppVerifier 校验新应用(如果可用)",
"appVerifierInstructionToast": "分享至 AppVerifier完成后返回此处。", "appVerifierInstructionToast": "分享至 AppVerifier完成后返回此处。",
"wiki": "帮助/Wiki", "wiki": "帮助/Wiki",
"crowdsourcedConfigsLabel": "众包应用程序配置(使用风险自负", "crowdsourcedConfigsLabel": "来自社区的应用配置(谨慎使用",
"crowdsourcedConfigsShort": "众包应用程序配置", "crowdsourcedConfigsShort": "来自社区的应用配置",
"allowInsecure": "允许不安全的 HTTP 请求", "allowInsecure": "允许不安全的 HTTP 请求",
"stayOneVersionBehind": "比最新版本晚一个版本", "stayOneVersionBehind": "始终延后一个版本进行更新",
"useFirstApkOfVersion": "多个 APK 自动选择第一个", "useFirstApkOfVersion": "存在多个 APK 文件时自动选择第一个",
"refreshBeforeDownload": "下载前刷新应用程序详细信息", "refreshBeforeDownload": "下载前刷新应用详情",
"tencentAppStore": "腾讯应用宝", "tencentAppStore": "腾讯应用宝",
"coolApk": "酷安", "coolApk": "酷安",
"vivoAppStore": "vivo 应用商店(中国)", "vivoAppStore": "(中国)vivo应用商店",
"name": "名称", "name": "发行名称",
"smartname": "姓名(智能)", "smartname": "发行名称(智能)",
"sortMethod": "排序方法", "sortMethod": "排序方法",
"welcome": "欢迎光临", "welcome": "欢迎",
"documentationLinksNote": "下链接的 Obtainium GitHub 页面包含视频、文章、讨论其他资源的链接,可帮助您了解如何使用该应用程序。", "documentationLinksNote": "下链接的 GitHub 页面包含关于 Obtainium 的视频、文章、讨论其他资源,可帮助您了解本应用的使用方法。",
"batteryOptimizationNote": "请注意,如果为 Obtainium 禁用操作系统电池优化功能,后台下载可能会更稳定。", "batteryOptimizationNote": "请注意,在设置中切换为“前台服务”,并/或关闭操作系统对 Obtainium 的电池优化,可能会让后台下载更稳定。",
"fileDeletionError": "删除文件失败(尝试手动删除,然后再试一次\"{}\"", "fileDeletionError": "删除文件失败(手动删除后再次尝试\"{}\"",
"foregroundService": "获取前台服务", "foregroundService": "Obtainium 前台服务",
"foregroundServiceExplanation": "使用前台服务进行更新检查(更可靠,耗电量更大", "foregroundServiceExplanation": "使用前台服务检查更新(更稳定,但也更耗电",
"fgServiceNotice": "后台更新检查需要此通知(可在操作系统设置中隐藏)", "fgServiceNotice": "后台检查更新时需要此通知(可在操作系统设置中隐藏)",
"excludeSecrets": "排除机密",
"removeAppQuestion": { "removeAppQuestion": {
"one": "是否删除应用?", "one": "是否删除应用?",
"other": "是否删除应用?" "other": "是否删除应用?"
}, },
"tooManyRequestsTryAgainInMinutes": { "tooManyRequestsTryAgainInMinutes": {
"one": "API 请求过于频繁(速率限制)- 请在 {} 分钟后重试", "one": "请求过于频繁(API 速率限制)- 请在 {} 分钟后重试",
"other": "API 请求过于频繁(速率限制)- 请在 {} 分钟后重试" "other": "请求过于频繁(API 速率限制)- 请在 {} 分钟后重试"
}, },
"bgUpdateGotErrorRetryInMinutes": { "bgUpdateGotErrorRetryInMinutes": {
"one": "后台更新检查遇到了“{}”问题,将于 {} 分钟后重试", "one": "后台更新检查遇到了“{}”问题,将于 {} 分钟后重试",
@@ -370,27 +372,27 @@
"other": "{} 天" "other": "{} 天"
}, },
"clearedNLogsBeforeXAfterY": { "clearedNLogsBeforeXAfterY": {
"one": "清除了 {n} 日志({before} 之前{after} 之后", "one": "清除了 {n} 日志(早于 {before}晚于 {after}",
"other": "清除了 {n} 日志({before} 之前{after} 之后" "other": "清除了 {n} 日志(早于 {before}晚于 {after}"
}, },
"xAndNMoreUpdatesAvailable": { "xAndNMoreUpdatesAvailable": {
"one": "“{}”和另外 1 个应用可以更新了。", "one": "“{}”和另外 1 个应用可以更新了。",
"other": "“{}”和另外 {} 个应用可以更新了。" "other": "“{}”和另外 {} 个应用可以更新了。"
}, },
"xAndNMoreUpdatesInstalled": { "xAndNMoreUpdatesInstalled": {
"one": "{} 和另外 1 个应用已更新。", "one": "{}和另外 1 个应用已更新。",
"other": "“{}”和另外 {} 个应用已更新。" "other": "“{}”和另外 {} 个应用已更新。"
}, },
"xAndNMoreUpdatesFailed": { "xAndNMoreUpdatesFailed": {
"one": "{} 和另外 1 个应用更新失败。", "one": "{}和另外 1 个应用更新失败。",
"other": "{} 和另外 {} 个应用更新失败。" "other": "{}和另外 {} 个应用更新失败。"
}, },
"xAndNMoreUpdatesPossiblyInstalled": { "xAndNMoreUpdatesPossiblyInstalled": {
"one": "{} 和另外 1 个应用已尝试更新。", "one": "已尝试更新“{}和另外 1 个应用。",
"other": "“{}”和另外 {} 个应用已尝试更新。" "other": "已尝试更新“{}”和另外 {} 个应用。"
}, },
"apk": { "apk": {
"one": "{}APK", "one": "{} 个 APK 文件",
"other": "{}APK" "other": "{} 个 APK 文件"
} }
} }

View File

@@ -3,7 +3,7 @@ import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart'; import 'package:obtainium/providers/source_provider.dart';
class Codeberg extends AppSource { class Codeberg extends AppSource {
GitHub gh = GitHub(); GitHub gh = GitHub(hostChanged: true);
Codeberg() { Codeberg() {
name = 'Forgejo (Codeberg)'; name = 'Forgejo (Codeberg)';
hosts = ['codeberg.org']; hosts = ['codeberg.org'];

View File

@@ -0,0 +1,76 @@
import 'dart:convert';
import 'package:html/parser.dart';
import 'package:obtainium/app_sources/html.dart';
import 'package:obtainium/custom_errors.dart';
import 'package:obtainium/providers/source_provider.dart';
class Farsroid extends AppSource {
Farsroid() {
hosts = ['farsroid.com'];
name = 'Farsroid';
}
@override
String sourceSpecificStandardizeURL(String url, {bool forSelection = false}) {
RegExp standardUrlRegEx = RegExp(
'^https?://([^\\.]+\\.)${getSourceRegex(hosts)}/[^/]+',
caseSensitive: false,
);
RegExpMatch? match = standardUrlRegEx.firstMatch(url);
if (match == null) {
throw InvalidURLError(name);
}
return match.group(0)!;
}
@override
Future<APKDetails> getLatestAPKDetails(
String standardUrl,
Map<String, dynamic> additionalSettings,
) async {
String appName = Uri.parse(standardUrl).pathSegments.last;
var res = await sourceRequest(standardUrl, additionalSettings);
if (res.statusCode != 200) {
throw getObtainiumHttpError(res);
}
var html = parse(res.body);
var dlinks = html.querySelectorAll('.download-links');
if (dlinks.isEmpty) {
throw NoReleasesError();
}
var postId = dlinks.first.attributes['data-post-id'] ?? '';
var version = dlinks.first.attributes['data-post-version'] ?? '';
if (postId.isEmpty || version.isEmpty) {
throw NoVersionError();
}
var res2 = await sourceRequest(
Uri.encodeFull(
'https://${hosts[0]}/api/download-box/?post_id=$postId&post_version=$version',
),
additionalSettings,
);
var html2 = jsonDecode(res2.body)?['data']?['content'] as String? ?? '';
if (html2.isEmpty) {
throw NoAPKError();
}
var apkLinks =
(await grabLinksCommon(html2, res2.request!.url, additionalSettings))
.map((l) => MapEntry(Uri.parse(l.key).pathSegments.last, l.key))
.where(
(l) => l.key.toLowerCase().startsWith(
'$appName-$version'.toLowerCase(),
),
)
.toList();
if (apkLinks.isEmpty) {
throw NoAPKError();
}
return APKDetails(version, apkLinks, AppNames(name, appName));
}
}

View File

@@ -112,13 +112,17 @@ class FDroid extends AppSource {
bool isGitHub = false; bool isGitHub = false;
bool isGitLab = false; bool isGitLab = false;
try { try {
GitHub().sourceSpecificStandardizeURL(details.changeLog!); GitHub(
hostChanged: true,
).sourceSpecificStandardizeURL(details.changeLog!);
isGitHub = true; isGitHub = true;
} catch (e) { } catch (e) {
// //
} }
try { try {
GitLab().sourceSpecificStandardizeURL(details.changeLog!); GitLab(
hostChanged: true,
).sourceSpecificStandardizeURL(details.changeLog!);
isGitLab = true; isGitLab = true;
} catch (e) { } catch (e) {
// //

View File

@@ -13,10 +13,11 @@ import 'package:obtainium/providers/source_provider.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
class GitHub extends AppSource { class GitHub extends AppSource {
GitHub() { GitHub({hostChanged = false}) {
hosts = ['github.com']; hosts = ['github.com'];
appIdInferIsOptional = true; appIdInferIsOptional = true;
showReleaseDateAsVersionToggle = true; showReleaseDateAsVersionToggle = true;
this.hostChanged = hostChanged;
sourceConfigSettingFormItems = [ sourceConfigSettingFormItems = [
GeneratedFormTextField( GeneratedFormTextField(

View File

@@ -12,10 +12,11 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
class GitLab extends AppSource { class GitLab extends AppSource {
GitLab() { GitLab({bool hostChanged = false}) {
hosts = ['gitlab.com']; hosts = ['gitlab.com'];
canSearch = true; canSearch = true;
showReleaseDateAsVersionToggle = true; showReleaseDateAsVersionToggle = true;
this.hostChanged = hostChanged;
sourceConfigSettingFormItems = [ sourceConfigSettingFormItems = [
GeneratedFormTextField( GeneratedFormTextField(
@@ -144,7 +145,7 @@ class GitLab extends AppSource {
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
// Prepare request params // Prepare request params
var names = GitHub().getAppNames(standardUrl); var names = GitHub(hostChanged: true).getAppNames(standardUrl);
String projectUriComponent = String projectUriComponent =
'${Uri.encodeComponent(names.author)}%2F${Uri.encodeComponent(names.name)}'; '${Uri.encodeComponent(names.author)}%2F${Uri.encodeComponent(names.name)}';
String? PAT = await getPATIfAny(hostChanged ? additionalSettings : {}); String? PAT = await getPATIfAny(hostChanged ? additionalSettings : {});

View File

@@ -113,14 +113,23 @@ List<MapEntry<String, String>> getLinksInLines(String lines) =>
// Given an HTTP response, grab some links according to the common additional settings // Given an HTTP response, grab some links according to the common additional settings
// (those that apply to intermediate and final steps) // (those that apply to intermediate and final steps)
Future<List<MapEntry<String, String>>> grabLinksCommon( Future<List<MapEntry<String, String>>> grabLinksCommonFromRes(
Response res, Response res,
Map<String, dynamic> additionalSettings, Map<String, dynamic> additionalSettings,
) async { ) async {
if (res.statusCode != 200) { if (res.statusCode != 200) {
throw getObtainiumHttpError(res); throw getObtainiumHttpError(res);
} }
var html = parse(res.body); return grabLinksCommon(res.body, res.request!.url, additionalSettings);
}
// Note keys are URLs, values are filenames (opposite to the AppSource apkUrls)
Future<List<MapEntry<String, String>>> grabLinksCommon(
String rawBody,
Uri reqUrl,
Map<String, dynamic> additionalSettings,
) async {
var html = parse(rawBody);
List<MapEntry<String, String>> allLinks = html List<MapEntry<String, String>> allLinks = html
.querySelectorAll('a') .querySelectorAll('a')
.map( .map(
@@ -132,21 +141,21 @@ Future<List<MapEntry<String, String>>> grabLinksCommon(
), ),
) )
.where((element) => element.key.isNotEmpty) .where((element) => element.key.isNotEmpty)
.map((e) => MapEntry(ensureAbsoluteUrl(e.key, res.request!.url), e.value)) .map((e) => MapEntry(ensureAbsoluteUrl(e.key, reqUrl), e.value))
.toList(); .toList();
if (allLinks.isEmpty) { if (allLinks.isEmpty) {
allLinks = getLinksInLines(res.body); allLinks = getLinksInLines(rawBody);
} }
if (allLinks.isEmpty) { if (allLinks.isEmpty) {
// Getting desperate // Getting desperate
try { try {
var jsonStrings = collectAllStringsFromJSONObject(jsonDecode(res.body)); var jsonStrings = collectAllStringsFromJSONObject(jsonDecode(rawBody));
allLinks = getLinksInLines(jsonStrings.join('\n')); allLinks = getLinksInLines(jsonStrings.join('\n'));
if (allLinks.isEmpty) { if (allLinks.isEmpty) {
allLinks = getLinksInLines( allLinks = getLinksInLines(
jsonStrings jsonStrings
.map((l) { .map((l) {
return ensureAbsoluteUrl(l, res.request!.url); return ensureAbsoluteUrl(l, reqUrl);
}) })
.join('\n'), .join('\n'),
); );
@@ -368,7 +377,7 @@ class HTML extends AppSource {
.where((l) => l['customLinkFilterRegex'].isNotEmpty == true) .where((l) => l['customLinkFilterRegex'].isNotEmpty == true)
.toList(); .toList();
for (int i = 0; i < (additionalSettings['intermediateLink'].length); i++) { for (int i = 0; i < (additionalSettings['intermediateLink'].length); i++) {
var intLinks = await grabLinksCommon( var intLinks = await grabLinksCommonFromRes(
await sourceRequest(currentUrl, additionalSettings), await sourceRequest(currentUrl, additionalSettings),
additionalSettings['intermediateLink'][i], additionalSettings['intermediateLink'][i],
); );
@@ -392,7 +401,7 @@ class HTML extends AppSource {
.join('\n') .join('\n')
.split('\n') .split('\n')
.join('\\n'); .join('\\n');
links = await grabLinksCommon(res, additionalSettings); links = await grabLinksCommonFromRes(res, additionalSettings);
links = filterApks( links = filterApks(
links, links,
additionalSettings['apkFilterRegEx'], additionalSettings['apkFilterRegEx'],

View File

@@ -55,7 +55,7 @@ class Mullvad extends AppSource {
} }
String? changeLog; String? changeLog;
try { try {
changeLog = (await GitHub().getLatestAPKDetails( changeLog = (await GitHub(hostChanged: true).getLatestAPKDetails(
'https://github.com/mullvad/mullvadvpn-app', 'https://github.com/mullvad/mullvadvpn-app',
{'fallbackToOlderReleases': true}, {'fallbackToOlderReleases': true},
)).changeLog; )).changeLog;

View File

@@ -36,13 +36,15 @@ class RuStore extends AppSource {
return Uri.parse(standardUrl).pathSegments.last; return Uri.parse(standardUrl).pathSegments.last;
} }
Future<String> decodeString(String str) async { Future<dynamic> decodeJsonBody(Uint8List bytes) async {
try { try {
return (await CharsetDetector.autoDecode( return jsonDecode((await CharsetDetector.autoDecode(bytes)).string);
Uint8List.fromList(str.codeUnits),
)).string;
} catch (e) { } catch (e) {
return str; try {
return jsonDecode(utf8.decode(bytes));
} catch (_) {
rethrow;
}
} }
} }
@@ -59,14 +61,14 @@ class RuStore extends AppSource {
if (res0.statusCode != 200) { if (res0.statusCode != 200) {
throw getObtainiumHttpError(res0); throw getObtainiumHttpError(res0);
} }
var appDetails = jsonDecode(res0.body)['body']; var appDetails = (await decodeJsonBody(res0.bodyBytes))['body'];
if (appDetails['appId'] == null) { if (appDetails['appId'] == null) {
throw NoReleasesError(); throw NoReleasesError();
} }
String appName = appDetails['appName'] ?? tr('app'); String appName = appDetails['appName'] ?? tr('app');
String author = appDetails['companyName'] ?? name; String author = appDetails['companyName'] ?? name;
String? dateStr = appDetails['updatedAt']; String? dateStr = appDetails['appVerUpdatedAt'];
String? version = appDetails['versionName']; String? version = appDetails['versionName'];
String? changeLog = appDetails['whatsNew']; String? changeLog = appDetails['whatsNew'];
if (version == null) { if (version == null) {
@@ -83,15 +85,11 @@ class RuStore extends AppSource {
followRedirects: false, followRedirects: false,
postBody: {"appId": appDetails['appId'], "firstInstall": true}, postBody: {"appId": appDetails['appId'], "firstInstall": true},
); );
var downloadDetails = jsonDecode(res1.body)['body']; var downloadDetails = (await decodeJsonBody(res1.bodyBytes))['body'];
if (res1.statusCode != 200 || downloadDetails['apkUrl'] == null) { if (res1.statusCode != 200 || downloadDetails['apkUrl'] == null) {
throw NoAPKError(); throw NoAPKError();
} }
appName = await decodeString(appName);
author = await decodeString(author);
changeLog = changeLog != null ? await decodeString(changeLog) : null;
return APKDetails( return APKDetails(
version, version,
getApkUrlsFromUrls([ getApkUrlsFromUrls([

View File

@@ -5,6 +5,7 @@ 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:obtainium/providers/logs_provider.dart'; import 'package:obtainium/providers/logs_provider.dart';
import 'package:obtainium/providers/source_provider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class ObtainiumError { class ObtainiumError {
@@ -158,6 +159,7 @@ void showError(dynamic e, BuildContext context) {
} }
String list2FriendlyString(List<String> list) { String list2FriendlyString(List<String> list) {
var isUsingEnglish = isEnglish();
return list.length == 2 return list.length == 2
? '${list[0]} ${tr('and')} ${list[1]}' ? '${list[0]} ${tr('and')} ${list[1]}'
: list : list
@@ -169,7 +171,7 @@ String list2FriendlyString(List<String> list) {
(e.key == list.length - 1 (e.key == list.length - 1
? '' ? ''
: e.key == list.length - 2 : e.key == list.length - 2
? ' and ' ? '${isUsingEnglish ? ',' : ''} and '
: ', '), : ', '),
) )
.join(''); .join('');

View File

@@ -185,7 +185,6 @@ class _ObtainiumState extends State<Obtainium> {
initPlatformState(); initPlatformState();
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
requestNonOptionalPermissions(); requestNonOptionalPermissions();
initForegroundService();
}); });
} }
@@ -201,28 +200,32 @@ class _ObtainiumState extends State<Obtainium> {
} }
void initForegroundService() { void initForegroundService() {
FlutterForegroundTask.init( // ignore: invalid_use_of_visible_for_testing_member
androidNotificationOptions: AndroidNotificationOptions( if (!FlutterForegroundTask.isInitialized) {
channelId: 'bg_update', FlutterForegroundTask.init(
channelName: tr('foregroundService'), androidNotificationOptions: AndroidNotificationOptions(
channelDescription: tr('foregroundService'), channelId: 'bg_update',
onlyAlertOnce: true, channelName: tr('foregroundService'),
), channelDescription: tr('foregroundService'),
iosNotificationOptions: const IOSNotificationOptions( onlyAlertOnce: true,
showNotification: false, ),
playSound: false, iosNotificationOptions: const IOSNotificationOptions(
), showNotification: false,
foregroundTaskOptions: ForegroundTaskOptions( playSound: false,
eventAction: ForegroundTaskEventAction.repeat(900000), ),
autoRunOnBoot: true, foregroundTaskOptions: ForegroundTaskOptions(
autoRunOnMyPackageReplaced: true, eventAction: ForegroundTaskEventAction.repeat(900000),
allowWakeLock: true, autoRunOnBoot: true,
allowWifiLock: true, autoRunOnMyPackageReplaced: true,
), allowWakeLock: true,
); allowWifiLock: true,
),
);
}
} }
Future<ServiceRequestResult?> startForegroundService(bool restart) async { Future<ServiceRequestResult?> startForegroundService(bool restart) async {
initForegroundService();
if (await FlutterForegroundTask.isRunningService) { if (await FlutterForegroundTask.isRunningService) {
if (restart) { if (restart) {
return FlutterForegroundTask.restartService(); return FlutterForegroundTask.restartService();

View File

@@ -232,7 +232,10 @@ class _AppPageState extends State<AppPage> {
: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 6), : const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 6),
margin: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 0), margin: const EdgeInsetsDirectional.fromSTEB(0, 6, 0, 0),
child: Text( child: Text(
tr('downloadX', args: [tr('releaseAsset').toLowerCase()]), tr(
'downloadX',
args: [lowerCaseIfEnglish(tr('releaseAsset'))],
),
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: Theme.of(context).textTheme.labelSmall!.copyWith( style: Theme.of(context).textTheme.labelSmall!.copyWith(
decoration: TextDecoration.underline, decoration: TextDecoration.underline,

View File

@@ -1037,7 +1037,7 @@ class AppsPageState extends State<AppsPage> {
var exportJSON = encoder.convert( var exportJSON = encoder.convert(
appsProvider.generateExportJSON( appsProvider.generateExportJSON(
appIds: selectedApps.map((e) => e.id).toList(), appIds: selectedApps.map((e) => e.id).toList(),
overrideExportSettings: false, overrideExportSettings: 0,
), ),
); );
String fn = String fn =
@@ -1072,7 +1072,10 @@ class AppsPageState extends State<AppsPage> {
Navigator.of(context).pop(); Navigator.of(context).pop();
}, },
child: Text( child: Text(
tr('downloadX', args: [tr('releaseAsset').toLowerCase()]), tr(
'downloadX',
args: [lowerCaseIfEnglish(tr('releaseAsset'))],
),
), ),
), ),
const Divider(), const Divider(),

View File

@@ -14,7 +14,6 @@ import 'package:obtainium/pages/import_export.dart';
import 'package:obtainium/pages/settings.dart'; import 'package:obtainium/pages/settings.dart';
import 'package:obtainium/providers/apps_provider.dart'; import 'package:obtainium/providers/apps_provider.dart';
import 'package:obtainium/providers/settings_provider.dart'; import 'package:obtainium/providers/settings_provider.dart';
import 'package:obtainium/providers/source_provider.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher_string.dart';
@@ -201,14 +200,6 @@ class _HomePageState extends State<HomePage> {
), ),
context, context,
); );
await appsProvider
.checkUpdates(specificIds: result.key.map((e) => e.id).toList())
.catchError((e) {
if (e is Map && e['errors'] is MultiAppMultiError) {
showError(e['errors'].toString(), context);
}
return <App>[];
});
} }
} else { } else {
throw ObtainiumError(tr('unknown')); throw ObtainiumError(tr('unknown'));

View File

@@ -396,9 +396,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
Expanded( Expanded(
child: TextButton( child: TextButton(
style: outlineButtonStyle, style: outlineButtonStyle,
onPressed: onPressed: importInProgress
appsProvider.apps.isEmpty ||
importInProgress
? null ? null
: () { : () {
runObtainiumExport(pickOnly: true); runObtainiumExport(pickOnly: true);
@@ -414,9 +412,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
child: TextButton( child: TextButton(
style: outlineButtonStyle, style: outlineButtonStyle,
onPressed: onPressed:
appsProvider.apps.isEmpty || importInProgress || snapshot.data == null
importInProgress ||
snapshot.data == null
? null ? null
: runObtainiumExport, : runObtainiumExport,
child: Text( child: Text(
@@ -459,11 +455,17 @@ class _ImportExportPageState extends State<ImportExportPage> {
), ),
], ],
[ [
GeneratedFormSwitch( GeneratedFormDropdown(
'exportSettings', 'exportSettings',
[
MapEntry('0', tr('none')),
MapEntry('1', tr('excludeSecrets')),
MapEntry('2', tr('all')),
],
label: tr('includeSettings'), label: tr('includeSettings'),
defaultValue: defaultValue: settingsProvider
settingsProvider.exportSettings, .exportSettings
.toString(),
), ),
], ],
], ],
@@ -477,7 +479,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
} }
if (value['exportSettings'] != null) { if (value['exportSettings'] != null) {
settingsProvider.exportSettings = settingsProvider.exportSettings =
value['exportSettings'] == true; int.parse(value['exportSettings']);
} }
} }
}, },
@@ -499,7 +501,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
else else
Column( Column(
children: [ children: [
const Divider(height: 32), SizedBox(height: 32),
Row( Row(
children: [ children: [
Expanded( Expanded(
@@ -543,7 +545,7 @@ class _ImportExportPageState extends State<ImportExportPage> {
child: Text( child: Text(
tr( tr(
'searchX', 'searchX',
args: [tr('source').toLowerCase()], args: [lowerCaseIfEnglish(tr('source'))],
), ),
), ),
), ),
@@ -710,6 +712,12 @@ class _SelectionModalState extends State<SelectionModal> {
} }
} }
void selectAll({bool deselect = false}) {
for (var e in entrySelections.keys) {
entrySelections[e] = !deselect;
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
Map<MapEntry<String, List<String>>, bool> filteredEntrySelections = {}; Map<MapEntry<String, List<String>>, bool> filteredEntrySelections = {};
@@ -731,6 +739,32 @@ class _SelectionModalState extends State<SelectionModal> {
} }
}); });
} }
getSelectAllButton() {
if (widget.onlyOneSelectionAllowed) {
return SizedBox.shrink();
}
var noneSelected = entrySelections.values.where((v) => v == true).isEmpty;
return noneSelected
? TextButton(
style: const ButtonStyle(visualDensity: VisualDensity.compact),
onPressed: () {
setState(() {
selectAll();
});
},
child: Text(tr('selectAll')),
)
: TextButton(
style: const ButtonStyle(visualDensity: VisualDensity.compact),
onPressed: () {
setState(() {
selectAll(deselect: true);
});
},
child: Text(tr('deselectX', args: [''])),
);
}
return AlertDialog( return AlertDialog(
scrollable: true, scrollable: true,
title: Text(widget.title ?? tr('pick')), title: Text(widget.title ?? tr('pick')),
@@ -900,6 +934,7 @@ class _SelectionModalState extends State<SelectionModal> {
], ],
), ),
actions: [ actions: [
getSelectAllButton(),
TextButton( TextButton(
onPressed: () { onPressed: () {
Navigator.of(context).pop(); Navigator.of(context).pop();

View File

@@ -1025,13 +1025,19 @@ class AppsProvider with ChangeNotifier {
); );
} }
getHost(String url) { getHost(String url) {
if (url == 'placeholder') {
return null;
}
var temp = Uri.parse(url).host.split('.'); var temp = Uri.parse(url).host.split('.');
return temp.sublist(temp.length - 2).join('.'); return temp.sublist(temp.length - 2).join('.');
} }
// If the picked APK comes from an origin different from the source, get user confirmation (if context provided) // If the picked APK comes from an origin different from the source, get user confirmation (if context provided)
if (appFileUrl != null && if (appFileUrl != null &&
getHost(appFileUrl.value) != getHost(app.url) && ![
getHost(app.url),
'placeholder',
].contains(getHost(appFileUrl.value)) &&
context != null) { context != null) {
if (!(settingsProvider.hideAPKOriginWarning) && if (!(settingsProvider.hideAPKOriginWarning) &&
await showDialog( await showDialog(
@@ -1077,7 +1083,9 @@ class AppsProvider with ChangeNotifier {
MapEntry<String, String>? apkUrl; MapEntry<String, String>? apkUrl;
var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true; var trackOnly = apps[id]!.app.additionalSettings['trackOnly'] == true;
var refreshBeforeDownload = var refreshBeforeDownload =
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true; apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true ||
apps[id]!.app.apkUrls.isNotEmpty &&
apps[id]!.app.apkUrls.first.value == 'placeholder';
if (refreshBeforeDownload) { if (refreshBeforeDownload) {
await checkUpdate(apps[id]!.app.id); await checkUpdate(apps[id]!.app.id);
} }
@@ -1121,6 +1129,7 @@ class AppsProvider with ChangeNotifier {
obtainiumId, obtainiumId,
strB: obtainiumTempId, strB: obtainiumTempId,
); );
appsToInstall = moveStrToEnd(appsToInstall, '$obtainiumId.fdroid');
Future<void> installFn( Future<void> installFn(
String id, String id,
@@ -1300,7 +1309,8 @@ class AppsProvider with ChangeNotifier {
} }
MapEntry<String, String>? fileUrl; MapEntry<String, String>? fileUrl;
var refreshBeforeDownload = var refreshBeforeDownload =
apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true; apps[id]!.app.additionalSettings['refreshBeforeDownload'] == true ||
apps[id]!.app.apkUrls.first.value == 'placeholder';
if (refreshBeforeDownload) { if (refreshBeforeDownload) {
await checkUpdate(apps[id]!.app.id); await checkUpdate(apps[id]!.app.id);
} }
@@ -1964,7 +1974,7 @@ class AppsProvider with ChangeNotifier {
Map<String, dynamic> generateExportJSON({ Map<String, dynamic> generateExportJSON({
List<String>? appIds, List<String>? appIds,
bool? overrideExportSettings, int? overrideExportSettings,
}) { }) {
Map<String, dynamic> finalExport = {}; Map<String, dynamic> finalExport = {};
finalExport['apps'] = apps.values finalExport['apps'] = apps.values
@@ -1977,15 +1987,18 @@ class AppsProvider with ChangeNotifier {
}) })
.map((e) => e.app.toJson()) .map((e) => e.app.toJson())
.toList(); .toList();
bool shouldExportSettings = settingsProvider.exportSettings; int shouldExportSettings = settingsProvider.exportSettings;
if (overrideExportSettings != null) { if (overrideExportSettings != null) {
shouldExportSettings = overrideExportSettings; shouldExportSettings = overrideExportSettings;
} }
if (shouldExportSettings) { if (shouldExportSettings > 0) {
var settingsValueKeys = settingsProvider.prefs?.getKeys();
if (shouldExportSettings < 2) {
settingsValueKeys?.removeWhere((k) => k.endsWith('-creds'));
}
finalExport['settings'] = Map<String, Object?>.fromEntries( finalExport['settings'] = Map<String, Object?>.fromEntries(
(settingsProvider.prefs (settingsValueKeys
?.getKeys() ?.map((key) => MapEntry(key, settingsProvider.prefs?.get(key)))
.map((key) => MapEntry(key, settingsProvider.prefs?.get(key)))
.toList()) ?? .toList()) ??
[], [],
); );
@@ -2152,7 +2165,7 @@ class _AppFilePickerState extends State<AppFilePicker> {
scrollable: true, scrollable: true,
title: Text( title: Text(
widget.pickAnyAsset widget.pickAnyAsset
? tr('selectX', args: [tr('releaseAsset').toLowerCase()]) ? tr('selectX', args: [lowerCaseIfEnglish(tr('releaseAsset'))])
: tr('pickAnAPK'), : tr('pickAnAPK'),
), ),
content: Column( content: Column(
@@ -2511,7 +2524,10 @@ Future<void> bgUpdateCheck(String taskId, Map<String, dynamic>? params) async {
} }
} }
if (toInstall.isNotEmpty) { if (toInstall.isNotEmpty) {
var tempObtArr = toInstall.where((element) => element.key == obtainiumId); var tempObtArr = toInstall.where(
(element) =>
element.key == obtainiumId || element.key == '$obtainiumId.fdroid',
);
if (tempObtArr.isNotEmpty) { if (tempObtArr.isNotEmpty) {
// Move obtainium to the end of the list as it must always install last // Move obtainium to the end of the list as it must always install last
var obt = tempObtArr.first; var obt = tempObtArr.first;

View File

@@ -453,12 +453,19 @@ class SettingsProvider with ChangeNotifier {
notifyListeners(); notifyListeners();
} }
bool get exportSettings { int get exportSettings {
return prefs?.getBool('exportSettings') ?? false; try {
return prefs?.getInt('exportSettings') ??
1; // 0 for no, 1 for yes but no secrets, 2 for everything
} catch (e) {
var val = prefs?.getBool('exportSettings') == true ? 1 : 0;
prefs?.setInt('exportSettings', val);
return val;
}
} }
set exportSettings(bool val) { set exportSettings(int val) {
prefs?.setBool('exportSettings', val); prefs?.setInt('exportSettings', val > 2 || val < 0 ? 1 : val);
notifyListeners(); notifyListeners();
} }

View File

@@ -16,6 +16,7 @@ import 'package:obtainium/app_sources/aptoide.dart';
import 'package:obtainium/app_sources/codeberg.dart'; import 'package:obtainium/app_sources/codeberg.dart';
import 'package:obtainium/app_sources/coolapk.dart'; import 'package:obtainium/app_sources/coolapk.dart';
import 'package:obtainium/app_sources/directAPKLink.dart'; import 'package:obtainium/app_sources/directAPKLink.dart';
import 'package:obtainium/app_sources/farsroid.dart';
import 'package:obtainium/app_sources/fdroid.dart'; import 'package:obtainium/app_sources/fdroid.dart';
import 'package:obtainium/app_sources/fdroidrepo.dart'; import 'package:obtainium/app_sources/fdroidrepo.dart';
import 'package:obtainium/app_sources/github.dart'; import 'package:obtainium/app_sources/github.dart';
@@ -63,11 +64,13 @@ class APKDetails {
}); });
} }
List<List<String>> stringMapListTo2DList(List<MapEntry<String, String>> mapList) => List<List<String>> stringMapListTo2DList(
mapList.map((e) => [e.key, e.value]).toList(); List<MapEntry<String, String>> mapList,
) => mapList.map((e) => [e.key, e.value]).toList();
List<MapEntry<String, String>> assumed2DlistToStringMapList(List<dynamic> arr) => List<MapEntry<String, String>> assumed2DlistToStringMapList(
arr.map((e) => MapEntry(e[0] as String, e[1] as String)).toList(); List<dynamic> arr,
) => arr.map((e) => MapEntry(e[0] as String, e[1] as String)).toList();
// App JSON schema has changed multiple times over the many versions of Obtainium // App JSON schema has changed multiple times over the many versions of Obtainium
// This function takes an App JSON and modifies it if needed to conform to the latest (current) version // This function takes an App JSON and modifies it if needed to conform to the latest (current) version
@@ -1049,6 +1052,9 @@ List<MapEntry<String, String>> filterApks(
return apkUrls; return apkUrls;
} }
bool isEnglish() => tr('and') == 'and'; // Quick hack, find a better way
String lowerCaseIfEnglish(String str) => isEnglish() ? str.toLowerCase() : str;
bool isVersionPseudo(App app) => bool isVersionPseudo(App app) =>
app.additionalSettings['trackOnly'] == true || app.additionalSettings['trackOnly'] == true ||
(app.installedVersion != null && (app.installedVersion != null &&
@@ -1074,6 +1080,7 @@ class SourceProvider {
Jenkins(), Jenkins(),
APKMirror(), APKMirror(),
RuStore(), RuStore(),
Farsroid(),
TelegramApp(), TelegramApp(),
NeutronCode(), NeutronCode(),
DirectAPKLink(), DirectAPKLink(),

View File

@@ -96,10 +96,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: background_fetch name: background_fetch
sha256: "442e82f508708be89fd0cc7e1dc3b27bc7c6c8c39a47967ccb7ed1c57b9108b5" sha256: e767745c31f71660063985c982497995d0a71755d3f1b0c8e8c96988d64d3003
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.8" version: "1.4.0"
battery_plus: battery_plus:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -240,10 +240,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: easy_localization name: easy_localization
sha256: "0f5239c7b8ab06c66440cfb0e9aa4b4640429c6668d5a42fe389c5de42220b12" sha256: "2ccdf9db8fe4d9c5a75c122e6275674508fd0f0d49c827354967b8afcc56bbed"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.7+1" version: "3.0.8"
easy_logger: easy_logger:
dependency: transitive dependency: transitive
description: description:
@@ -288,10 +288,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: file_picker name: file_picker
sha256: ef9908739bdd9c476353d6adff72e88fd00c625f5b959ae23f7567bd5137db0a sha256: "13ba4e627ef24503a465d1d61b32596ce10eb6b8903678d362a528f9939b4aa8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.2.0" version: "10.2.1"
fixnum: fixnum:
dependency: transitive dependency: transitive
description: description:
@@ -341,18 +341,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: flutter_charset_detector_android name: flutter_charset_detector_android
sha256: "443145e8fc8515b3b32aee375691e40dd59197a86a2ae153166bc88c8200d83b" sha256: "617345b0f78ad56c2633ea6132e57c2e374f6970792afbe9743237f683eeae8e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.0" version: "3.1.1"
flutter_charset_detector_darwin: flutter_charset_detector_darwin:
dependency: transitive dependency: transitive
description: description:
name: flutter_charset_detector_darwin name: flutter_charset_detector_darwin
sha256: daac20390275efb92fbb14350fe11286c5e29c7b80d6b0867f52d760f0d69763 sha256: "8cf51c3e16c2fb4ec4e309f16f6046a0ddf1ff57d1b6b696410d077a9ffbfb15"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.0" version: "1.2.1"
flutter_charset_detector_platform_interface: flutter_charset_detector_platform_interface:
dependency: transitive dependency: transitive
description: description:
@@ -716,10 +716,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: permission_handler name: permission_handler
sha256: "2d070d8684b68efb580a5997eb62f675e8a885ef0be6e754fb9ef489c177470f" sha256: bc917da36261b00137bbc8896bf1482169cd76f866282368948f032c8c1caae1
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "12.0.0+1" version: "12.0.1"
permission_handler_android: permission_handler_android:
dependency: transitive dependency: transitive
description: description:
@@ -955,10 +955,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sqflite_common name: sqflite_common
sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b" sha256: "6ef422a4525ecc601db6c0a2233ff448c731307906e92cabc9ba292afaae16a6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.5" version: "2.5.6"
sqflite_darwin: sqflite_darwin:
dependency: transitive dependency: transitive
description: description:
@@ -1051,10 +1051,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603" sha256: f6a7e5c4835bb4e3026a04793a4199ca2d14c739ec378fdfe23fc8075d0439f8
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.3.1" version: "6.3.2"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
@@ -1155,26 +1155,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_android name: webview_flutter_android
sha256: f6e6afef6e234801da77170f7a1847ded8450778caf2fe13979d140484be3678 sha256: "9573ad97890d199ac3ab32399aa33a5412163b37feb573eb5b0a76b35e9ffe41"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "4.7.0" version: "4.8.2"
webview_flutter_platform_interface: webview_flutter_platform_interface:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_platform_interface name: webview_flutter_platform_interface
sha256: f0dc2dc3a2b1e3a6abdd6801b9355ebfeb3b8f6cde6b9dc7c9235909c4a1f147 sha256: "63d26ee3aca7256a83ccb576a50272edd7cfc80573a4305caa98985feb493ee0"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.13.1" version: "2.14.0"
webview_flutter_wkwebview: webview_flutter_wkwebview:
dependency: transitive dependency: transitive
description: description:
name: webview_flutter_wkwebview name: webview_flutter_wkwebview
sha256: a3d461fe3467014e05f3ac4962e5fdde2a4bf44c561cb53e9ae5c586600fdbc3 sha256: "71523b9048cf510cfa1fd4e0a3fa5e476a66e0884d5df51d59d5023dba237107"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.22.0" version: "3.22.1"
win32: win32:
dependency: transitive dependency: transitive
description: description:

View File

@@ -16,7 +16,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.2.0+2316 version: 1.2.3+2319
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1