From 96d6aeae0e35d3be4fac78ccd2e55db1dd439859 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 20:35:00 +0200 Subject: [PATCH 01/37] Fix build issues --- lib/components/app_button.dart | 11 +++++------ lib/components/cached_app_icon.dart | 13 ++++++------- lib/pages/apps.dart | 3 ++- lib/pages/import_export.dart | 1 + 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/lib/components/app_button.dart b/lib/components/app_button.dart index 53e4f4cd..236e81d3 100644 --- a/lib/components/app_button.dart +++ b/lib/components/app_button.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:updatium/utils/expressive_motion.dart'; /// A custom text button widget that provides consistent styling and expressive interactions across the app class AppTextButton extends StatefulWidget { @@ -57,21 +56,21 @@ class _AppTextButtonState extends State void initState() { super.initState(); _animationController = AnimationController( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), vsync: this, ); _scaleAnimation = Tween(begin: 1.0, end: 0.95).animate( CurvedAnimation( parent: _animationController, - curve: ExpressiveMotion.emphasizedAccelerate, + curve: Curves.easeOutCubic, ), ); _opacityAnimation = Tween(begin: 1.0, end: 0.8).animate( CurvedAnimation( parent: _animationController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); } @@ -136,9 +135,9 @@ class _AppTextButtonState extends State scale: _scaleAnimation.value, child: AnimatedOpacity( opacity: _opacityAnimation.value, - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), child: AnimatedContainer( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), transform: Matrix4.identity() ..translate(0.0, _isHovered ? -2.0 : 0.0), decoration: BoxDecoration( diff --git a/lib/components/cached_app_icon.dart b/lib/components/cached_app_icon.dart index d476b3bf..50c9eab1 100644 --- a/lib/components/cached_app_icon.dart +++ b/lib/components/cached_app_icon.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:updatium/providers/apps_provider.dart'; import 'package:updatium/providers/source_provider.dart'; -import 'package:updatium/utils/expressive_motion.dart'; /// Widget that displays app icons with caching and loading states class CachedAppIcon extends StatefulWidget { @@ -61,31 +60,31 @@ class _CachedAppIconState extends State _shimmerAnimation = Tween(begin: -2.0, end: 2.0).animate( CurvedAnimation( parent: _shimmerController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); // Scale animation for interactions _scaleController = AnimationController( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), vsync: this, ); _scaleAnimation = Tween(begin: 1.0, end: 0.9).animate( CurvedAnimation( parent: _scaleController, - curve: ExpressiveMotion.emphasizedAccelerate, + curve: Curves.easeOutCubic, ), ); // Rotation animation for loading/error states _rotationController = AnimationController( - duration: ExpressiveMotion.durationLong, + duration: const Duration(milliseconds: 600), vsync: this, ); _rotationAnimation = Tween(begin: 0.0, end: 0.1).animate( CurvedAnimation( parent: _rotationController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); @@ -236,7 +235,7 @@ class _CachedAppIconState extends State child: Transform.rotate( angle: _rotationAnimation.value, child: AnimatedContainer( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), transform: Matrix4.identity() ..translate(0.0, _isHovered ? -4.0 : 0.0), decoration: BoxDecoration( diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 9eb60eed..e591935a 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1,3 +1,4 @@ +import 'package:animations/animations.dart'; import 'dart:convert'; import 'dart:math' as math; @@ -1000,7 +1001,7 @@ class AppsPageState extends State { ], ), ), - ); + ); } getCategoryCollapsibleTile(int index) { diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 93a34598..e21bdd1f 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -507,6 +507,7 @@ class _ImportExportPageState extends State { children: [ Expanded( child: FilledButton.icon( + icon: const Icon(Icons.search), onPressed: importInProgress ? null : () async { From 02eb408cf9ba31654f736c5866707f97dd500d5f Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 20:47:21 +0200 Subject: [PATCH 02/37] Update lib/pages/apps.dart Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- lib/pages/apps.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index e591935a..bc612f45 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1001,7 +1001,7 @@ class AppsPageState extends State { ], ), ), - ); + ); } getCategoryCollapsibleTile(int index) { From 0a62e0bb734043d8d806efe502bf46c450bc0e1d Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 20:49:55 +0200 Subject: [PATCH 03/37] Fix --- assets/translations/ar.json | 16 +++++++++++++ assets/translations/he.json | 45 ++++++++++++++++++++++++------------ lib/pages/import_export.dart | 10 ++++---- 3 files changed, 51 insertions(+), 20 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 3e8e4b97..323d51b6 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -348,66 +348,82 @@ "multipleSigners": "عدد من الدول الموقعة", "removeAppQuestion": { "one": "إزالة التطبيق؟", + "two": "إزالة التطبيقين؟", "other": "إزالة التطبيقات؟" }, "tooManyRequestsTryAgainInMinutes": { "one": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقيقة", + "two": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقيقتين", "other": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقائق" }, "bgUpdateGotErrorRetryInMinutes": { "one": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقيقة", + "two": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقيقتين", "other": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقائق" }, "bgCheckFoundUpdatesWillNotifyIfNeeded": { "one": "وجد التحقق من التحديثات في الخلفية {} تحديث - سيتم إخطار المستخدم إذا لزم الأمر", + "two": "وجد التحقق من التحديثات في الخلفية {} تحديثين - سيتم إخطار المستخدم إذا لزم الأمر", "other": "وجد التحقق من التحديثات في الخلفية {} تحديثات - سيتم إخطار المستخدم إذا لزم الأمر" }, "apps": { "one": "{} تطبيق", + "two": "تطبيقان", "other": "{} تطبيقات" }, "url": { "one": "{} رابط", + "two": "رابطان", "other": "{} روابط" }, "minute": { "one": "{} دقيقة", + "two": "دقيقتان", "other": "{} دقائق" }, "hour": { "one": "{} ساعة", + "two": "ساعتان", "other": "{} ساعات" }, "day": { "one": "{} يوم", + "two": "يومان", "other": "{} أيام" }, "clearedNLogsBeforeXAfterY": { "one": "مُسح {n} سجل (قبل = {before}, بعد = {after})", + "two": "مُسح {n} سجلان (قبل = {before}, بعد = {after})", "other": "مُسح {n} سجلات (قبل = {before}, بعد = {after})" }, "xAndNMoreUpdatesAvailable": { "one": "{} وتطبيق واحد آخر لديه تحديثات.", + "two": "{} وتطبيقان آخران لديهما تحديثات.", "other": "{} و{} تطبيقات أخرى لديها تحديثات." }, "xAndNMoreUpdatesInstalled": { "one": "{} وتطبيق واحد آخر حُدث.", + "two": "{} وتطبيقان آخران حُدثا.", "other": "{} و{} تطبيقات أخرى حُدثت." }, "xAndNMoreUpdatesFailed": { "one": "فشل تحديث {} وتطبيق واحد آخر.", + "two": "فشل تحديث {} وتطبيقان آخران.", "other": "فشل تحديث {} و{} تطبيقات أخرى." }, "xAndNMoreUpdatesPossiblyInstalled": { "one": "{} وتطبيق واحد آخر قد حُدث.", + "two": "{} وتطبيقان آخران قد حُدثا.", "other": "{} و{} تطبيقات أخرى قد حُدثت." }, "apk": { "one": "{} APK", + "two": "APKان", "other": "{} APKs" }, "certificateHash": { "one": "بصمة الشهادة", + "two": "بصمتا الشهادة", "other": "بصمات الشهادة" }, "securityDisclaimerTitle": "إخلاء مسؤولية الأمان والقانوني", diff --git a/assets/translations/he.json b/assets/translations/he.json index facf7848..05452486 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -81,7 +81,7 @@ "shareSelectedAppURLs": "שיתוף כתובות היישומים שנבחרו", "resetInstallStatus": "איפוס מצב התקנה", "more": "עוד", - "removeOutdatedFilter": "Remove out-of-date app filter", + "removeOutdatedFilter": "סינון להסרת יישומים שאינם מעודכנים", "showOutdatedOnly": "הצגת יישומים לא מעודכנים בלבד", "filter": "סינון", "filterApps": "סינון יישומים", @@ -126,7 +126,7 @@ "bgUpdateCheckInterval": "מרווח זמן לבדיקת עדכונים ברקע", "neverManualOnly": "אף פעם - באופן ידני בלבד", "appearance": "מראה", - "showWebInAppView": "Show source webpage in app view", + "showWebInAppView": "הצגת עמוד האינטרנט של המקור בתצוגת היישום", "pinUpdates": "הצמדת עדכונים לחלק העליון של רשימת היישומים", "updates": "עדכונים", "sourceSpecific": "לפי מקור", @@ -178,14 +178,14 @@ "fdroid": "מאגר F-Droid הרשמי", "appIdOrName": "מזהה או שם של יישום", "appId": "מזהה יישום", - "appWithIdOrNameNotFound": "No app was found with that ID or name", + "appWithIdOrNameNotFound": "לא נמצא יישום עם שם או מזהה זה", "reposHaveMultipleApps": "מאגרים עשויים להכיל יישומים מרובים", "fdroidThirdPartyRepo": "מאגר צד שלישי של F-Droid", "install": "התקנה", - "markInstalled": "Mark installed", + "markInstalled": "סימון כמותקן", "update": "עדכון", "updated": "מעודכן", - "markUpdated": "Mark updated", + "markUpdated": "סימון כמעודכן", "additionalOptions": "אפשרויות נוספות", "disableVersionDetection": "השבתת זיהוי גרסה", "noVersionDetectionExplanation": "This option should only be used for apps where version detection does not work correctly.", @@ -213,8 +213,8 @@ "removeFromUpdatium": "הסרה מ־Updatium", "uninstallFromDevice": "הסרה מהמכשיר", "onlyWorksWithNonVersionDetectApps": "Only works for apps with version detection disabled.", - "releaseDateAsVersion": "Use release date as version string", - "releaseTitleAsVersion": "Use release title as version string", + "releaseDateAsVersion": "שימוש בתאריך פרסום המהדורה בתור מחרוזת הגרסה", + "releaseTitleAsVersion": "שימוש בכותרת המהדורה בתור מחרוזת הגרסה", "releaseDateAsVersionExplanation": "This option should only be used for apps where version detection does not work correctly, but a release date is available.", "changes": "שינויים", "releaseDate": "תאריך שחרור גרסה", @@ -242,21 +242,21 @@ "pickHighestVersionCode": "בחירה אוטומטית של קובץ ה־APK עם קוד הגרסה הגבוה ביותר", "checkUpdateOnDetailPage": "Check for updates on opening an app detail page", "disablePageTransitions": "השבתת הנפשות מעבר בין עמודים", - "reversePageTransitions": "Reverse page transition animations", + "reversePageTransitions": "היפוך הנפשות מעבר בין עמודים", "minStarCount": "מספר כוכבים מינימלי", "addInfoBelow": "Add this info below.", - "addInfoInSettings": "Add this info in the Settings.", + "addInfoInSettings": "יש להוסיף מידע זה בהגדרות.", "githubSourceNote": "GitHub rate limiting can be avoided using an API key.", "sortByLastLinkSegment": "Sort by only the last segment of the link", "filterReleaseNotesByRegEx": "Filter release notes by regular expression", "customLinkFilterRegex": "Custom APK link filter by regular expression (default '.apk$')", - "appsPossiblyUpdated": "App updates attempted", + "appsPossiblyUpdated": "בוצעו ניסיונות לעדכון יישומים", "appsPossiblyUpdatedNotifDescription": "Notifies the user that updates to one or more apps were potentially applied in the background", - "xWasPossiblyUpdatedToY": "{} may have been updated to {}.", + "xWasPossiblyUpdatedToY": "ייתכן כי היישום {} עודכן לגרסה {}.", "enableBackgroundUpdates": "הפעלת עדכונים ברקע", "backgroundUpdateReqsExplanation": "Background updates may not be possible for all apps.", "backgroundUpdateLimitsExplanation": "The success of a background install can only be determined when Updatium is opened.", - "verifyLatestTag": "Verify the 'latest' tag", + "verifyLatestTag": "אימות התגית ‚latest’ (גרסה עדכנית)", "intermediateLinkRegex": "Filter for an 'intermediate' link to visit", "filterByLinkText": "Filter links by link text", "matchLinksOutsideATags": "Match links outside tags", @@ -277,15 +277,15 @@ "filterVersionsByRegEx": "Filter versions by regular expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", - "reverseSort": "Reverse sorting", + "reverseSort": "היפוך סדר", "takeFirstLink": "בחירת הקישור הראשון", "skipSort": "Skip sorting", "debugMenu": "תפריט ניפוי שגיאות", - "bgTaskStarted": "Background task started - check logs.", + "bgTaskStarted": "המשימה ברקע החלה - נא לעיין ביומן.", "runBgCheckNow": "הרצת בדיקת עדכונים ברקע כעת", "versionExtractWholePage": "Apply version string extraction Regex to entire page", "installing": "מתבצעת התקנה", - "skipUpdateNotifications": "Skip update notifications", + "skipUpdateNotifications": "דילוג על התראות בנוגע לעדכונים", "updatesAvailableNotifChannel": "עדכונים זמינים", "appsUpdatedNotifChannel": "היישומים עודכנו", "appsPossiblyUpdatedNotifChannel": "App updates attempted", @@ -347,62 +347,77 @@ "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "removeAppQuestion": { "one": "להסיר את היישום?", + "two": "להסיר את שני היישומים?", "other": "להסיר את היישומים?" }, "tooManyRequestsTryAgainInMinutes": { "one": "Too many requests (rate limited) - try again in {} minute", + "two": "Too many requests (rate limited) - try again in {} minutes", "other": "Too many requests (rate limited) - try again in {} minutes" }, "bgUpdateGotErrorRetryInMinutes": { "one": "BG update checking encountered a {}, will schedule a retry check in {} minute", + "two": "BG update checking encountered a {}, will schedule a retry check in {} minutes", "other": "BG update checking encountered a {}, will schedule a retry check in {} minutes" }, "bgCheckFoundUpdatesWillNotifyIfNeeded": { "one": "BG update checking found {} update - will notify user if needed", + "two": "BG update checking found {} updates - will notify user if needed", "other": "BG update checking found {} updates - will notify user if needed" }, "apps": { "one": "יישום אחד", + "two": "שני יישומים", "other": "{} יישומים" }, "url": { "one": "כתובת אחת", + "two": "שתי כתובות", "other": "{} כתובות" }, "minute": { "one": "דקה אחת", + "two": "שתי דקות", "other": "{} דקות" }, "hour": { "one": "שעה אחת", + "two": "שעתיים", "other": "{} שעות" }, "day": { "one": "יום אחד", + "two": "יומיים", "other": "{} ימים" }, "clearedNLogsBeforeXAfterY": { "one": "Cleared {n} log (before = {before}, after = {after})", + "two": "Cleared {n} logs (before = {before}, after = {after})", "other": "Cleared {n} logs (before = {before}, after = {after})" }, "xAndNMoreUpdatesAvailable": { "one": "{} and 1 more app have updates.", + "two": "{} and 2 more apps have updates.", "other": "{} and {} more apps have updates." }, "xAndNMoreUpdatesInstalled": { "one": "{} and 1 more app was updated.", + "two": "{} and 2 more apps were updated.", "other": "{} and {} more apps were updated." }, "xAndNMoreUpdatesFailed": { "one": "Failed to update {} and 1 more app.", + "two": "Failed to update {} and 2 more apps.", "other": "Failed to update {} and {} more apps." }, "xAndNMoreUpdatesPossiblyInstalled": { "one": "{} and 1 more app may have been updated.", + "two": "{} and 2 more apps may have been updated.", "other": "{} and {} more apps may have been updated." }, "apk": { "one": "קובץ APK אחד", + "two": "שני קובצי APK", "other": "{} קובצי APK" }, "securityDisclaimerTitle": "כתב ויתור בנוגע לאבטחה ונושאים משפטיים", diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index e21bdd1f..5dcae512 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -544,7 +544,7 @@ class _ImportExportPageState extends State { runSourceSearch(searchSource[0]); } }, - child: Text( + label: Text( tr( 'searchX', args: [lowerCaseIfEnglish(tr('source'))], @@ -767,7 +767,7 @@ class _SelectionModalState extends State { entrySelections.updateAll((key, value) => true); }); }, - child: Text(tr('selectAll')), + label: Text(tr('selectAll')), ) : TextButton( style: const ButtonStyle(visualDensity: VisualDensity.compact), @@ -776,7 +776,7 @@ class _SelectionModalState extends State { entrySelections.updateAll((key, value) => false); }); }, - child: Text(tr('deselectX', args: [tr('all')])), + label: Text(tr('deselectX', args: [tr('all')])), ); } @@ -954,7 +954,7 @@ class _SelectionModalState extends State { onPressed: () { Navigator.of(context).pop(); }, - child: Text(tr('cancel')), + label: Text(tr('cancel')), ), AppTextButton( onPressed: entrySelections.values.where((b) => b).isEmpty @@ -967,7 +967,7 @@ class _SelectionModalState extends State { .toList(), ); }, - child: Text( + label: Text( widget.onlyOneSelectionAllowed ? tr('pick') : tr( From f64e46e6c224f340ed52441c81e55be6ff49dd2f Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 20:53:46 +0200 Subject: [PATCH 04/37] Bump Material Color Utilities --- pubspec.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index 6bd732c8..4851ad43 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,7 +42,7 @@ dependencies: http: ^1.6.0 webview_flutter: ^4.13.1 dynamic_color: ^1.8.1 - material_color_utilities: ^0.11.1 + material_color_utilities: ^0.13.0 html: ^0.15.6 shared_preferences: ^2.5.4 url_launcher: ^6.3.2 From e6eaf122339008bbff6fe48258b88ac1f4f60772 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:18:18 +0200 Subject: [PATCH 05/37] Update strings --- assets/translations/ar.json | 2 +- assets/translations/bs.json | 2 +- assets/translations/ca.json | 2 +- assets/translations/cs.json | 2 +- assets/translations/da.json | 2 +- assets/translations/de.json | 2 +- assets/translations/en-EO.json | 2 +- assets/translations/en.json | 2 +- assets/translations/es.json | 2 +- assets/translations/et.json | 2 +- assets/translations/fa.json | 2 +- assets/translations/fr.json | 2 +- assets/translations/gl.json | 2 +- assets/translations/he.json | 2 +- assets/translations/hu.json | 2 +- assets/translations/id.json | 2 +- assets/translations/it.json | 2 +- assets/translations/ja.json | 2 +- assets/translations/ko.json | 2 +- assets/translations/ml.json | 2 +- assets/translations/nl.json | 2 +- assets/translations/pl.json | 2 +- assets/translations/pt-BR.json | 2 +- assets/translations/pt.json | 2 +- assets/translations/ru.json | 2 +- assets/translations/sv.json | 2 +- assets/translations/tr.json | 2 +- assets/translations/uk.json | 2 +- assets/translations/vi.json | 2 +- assets/translations/zh-Hant-TW.json | 2 +- assets/translations/zh.json | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 323d51b6..3511daa6 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -342,7 +342,7 @@ "GHReqPrefix": "نسخة \"sky22333/hubproxy\" لطلبات GitHub", "includeZips": "ضمّن ملفات ZIP", "zippedApkFilterRegEx": "تصفية ملفات APK داخل ZIP", - "googleVerificationWarningP1": "(جوجل) أعلن أنه، بدءاً من عام 2026/2027، كل التطبيقات على أجهزة (أندرويد) مصدقة ستطلب من المطور تقديم تفاصيل الهوية الشخصية مباشرة إلى (غوغل).\n\nوبما أن مطوري هذا التطبيق لا يوافقون على هذا الشرط، فإن Updatium لن يعمل بعد ذلك الوقت على أجهزة أندرويدية معتمدة.", + "googleVerificationWarningP1": "(جوجل) أعلن أنه، بدءاً من عام 2026/2027، كل التطبيقات على أجهزة (أندرويد) مصدقة ستطلب من المطور تقديم تفاصيل الهوية الشخصية مباشرة إلى (غوغل).\n\nبعد ذلك، قد يتوقف Updatium عن العمل على أجهزة أندرويدية معتمدة.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "ونلاحظ أنه في الأجل القصير، قد يظل من الممكن تركيب عملية \" غير متوافقة \" من خلال عملية \" تدفق سريع \" وعد غوغل بتنفيذها بعد رد فعل واسع النطاق على إعلانهم، ولكنهم لم يفصلوا كيف سينجح ذلك حتى لا يتضح ما إذا كان سيحافظ حقا على حريات المستعملين بأي طريقة عملية.\n\nعلى أية حال، حركة (جوجل) خطوة هامة نحو نهاية الحوسبة المجانية ذات الأغراض العامة للأفراد\n\nوينبغي ألا يتأثر هذا النظام غير المصدق عليه، مثل غرافينيوس، طالما يسمح له باستمرار وجوده.", "multipleSigners": "عدد من الدول الموقعة", diff --git a/assets/translations/bs.json b/assets/translations/bs.json index ceb0546f..1e8d49a9 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' istanca za GitHub zahtjeve", "includeZips": "Uključi i ZIP datoteke", "zippedApkFilterRegEx": "Filtriraj APK-ove unutar ZIP datoteka", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 2ecf6433..2ca5c69e 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -342,7 +342,7 @@ "GHReqPrefix": "exemple per a les peticions de GitHub", "includeZips": "Inclou fitxers ZIPName", "zippedApkFilterRegEx": "Filtre APKs dins ZIPName", - "googleVerificationWarningP1": "Google ha anunciat que, començant en 2026/2027, totes les aplicacions en dispositius d'Android \"que requereixen que el desenvolupador enviï els detalls personals directament a Google.\n\nDes que els desenvolupadors d'aquesta aplicació no estan d'acord amb aquest requisit, l' obtenció ja no funcionarà en els dispositius certificats d'Android.", + "googleVerificationWarningP1": "Google ha anunciat que, començant en 2026/2027, totes les aplicacions en dispositius d'Android \"certificats\" requeriran que el desenvolupador enviï els detalls personals directament a Google.\n\nDesprés d'això, Updatium pot deixar de funcionar en dispositius Android certificats.", "googleVerificationWarningP2": "Aneu a https://buitandoideopen.org/ per a més informació.", "googleVerificationWarningP3": "Tingueu en compte que en el terme curt, pot continuar sent possible instal· lar aplicacions \"inverificats\" (no compatible) mitjançant un procés de flux \"advince\" que Google ha promès implementar després d'una gran reacció al seu anunci, però no han detallat com funcionaria, de manera que és clar si es preservarà realment les llibertats dels usuaris de cap manera pràctica.\n\nEn qualsevol cas, el moviment de Google és un pas significatiu cap al final de la informàtica lliure i general deficient per als individus.\n\nEls SO no validats, com el GraphenOS, no haurien de ser afectats per això sempre que se'ls permeti continuar existint.", "multipleSigners": "Signadors múltiples", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 9382c31a..981a3f34 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -341,7 +341,7 @@ "GHReqPrefix": "instance 'sky22333/hubproxy' pro požadavky GitHubu", "includeZips": "Zahrnout soubory ZIP", "zippedApkFilterRegEx": "Filtrování souborů APK uvnitř ZIP", - "googleVerificationWarningP1": "Společnost Google oznámila, že počínaje rokem 2026 / 2027 budou všechny aplikace na \"certifikovaných\" zařízeních pro Android vyžadovat, aby vývojář předložil osobní údaje o identitě přímo společnosti Google.\n\nVzhledem k tomu, vývojáři této aplikace nesouhlasí s tímto požadavkem, Obstainium již nebude pracovat na certifikovaných Android zařízení po této době.", + "googleVerificationWarningP1": "Společnost Google oznámila, že počínaje rokem 2026 / 2027 budou všechny aplikace na \"certifikovaných\" zařízeních pro Android vyžadovat, aby vývojář předložil osobní údaje o identitě přímo společnosti Google.\n\nPo této době, Updatium může přestat pracovat na certifikovaných Android zařízeních.", "googleVerificationWarningP2": "Další informace získáte na adrese https: / / keepandroidopen.org.", "googleVerificationWarningP3": "Všimněte si, že v krátkodobém horizontu může být i nadále možné instalovat \"neověřené\" (nevyhovující) aplikace prostřednictvím procesu \"pokročilého toku\", který Google slíbil implementovat po širokém odporu k jejich oznámení, ale neupřesnili, jak by to mělo fungovat, takže není jasné, zda bude skutečně zachovávat uživatelskou svobodu jakýmkoli praktickým způsobem.\n\nV každém případě je krok společnosti Google významným krokem ke konci volného, všeobecného výpočetní techniky pro jednotlivce.\n\nNecertifikované Osy, jako je GrapheneOS, by tím neměly být ovlivněny, pokud budou nadále existovat.", "multipleSigners": "Několik signers", diff --git a/assets/translations/da.json b/assets/translations/da.json index 0b521cfc..6805d0cd 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy'-instans til GitHub-anmodninger", "includeZips": "Inkluder ZIP-filer", "zippedApkFilterRegEx": "Filtrer APK'er inde i ZIP", - "googleVerificationWarningP1": "Google har annonceret, at fra 2026 / 2027, alle apps på \"certificeret\" Android-enheder vil kræve, at udvikleren til at indsende personlige identitetsoplysninger direkte til Google.\n\nDa udviklerne af denne app ikke accepterer dette krav, Updatium vil ikke længere arbejde på certificerede Android-enheder efter dette tidspunkt.", + "googleVerificationWarningP1": "Google har annonceret, at fra 2026 / 2027, alle apps på \"certificeret\" Android-enheder vil kræve, at udvikleren til at indsende personlige identitetsoplysninger direkte til Google.\n\nEfter dette tidspunkt, kan Updatium holde op med at arbejde på certificerede Android-enheder.", "googleVerificationWarningP2": "Gå til https: / / keepandroidopen.org / for mere information.", "googleVerificationWarningP3": "Bemærk, at på kort sigt, kan det fortsætte med at være muligt at installere \"uverificerbare\" (ikke-overensstemmende) apps gennem en \"avanceret flow\" proces, som Google har lovet at gennemføre efter bred backlash til deres meddelelse, men de har ikke detaljeret, hvordan dette ville arbejde, så det er uklart, om det virkelig vil bevare brugernes friheder i praksis.\n\nUnder alle omstændigheder er Googles bevægelse et væsentligt skridt i retning af afslutningen af fri, generel-formål computing for enkeltpersoner.\n\nIkke-certificerede OS, som GrapheneOS, bør være upåvirket af dette, så længe de har lov til at fortsætte med at eksistere.", "multipleSigners": "Flere signere", diff --git a/assets/translations/de.json b/assets/translations/de.json index 3d7c6fac..8c5706e7 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -342,7 +342,7 @@ "GHReqPrefix": "sky22333/hubproxy'-Instanz für GitHub-Anfragen", "includeZips": "ZIP-Dateien einbeziehen", "zippedApkFilterRegEx": "APKs in ZIP filtern", - "googleVerificationWarningP1": "Google hat bekannt gegeben, dass, ab 2026/2027, alle Apps auf \"zertifizierten\" Android-Geräten den Entwickler benötigen, um persönliche Identitätsdetails direkt an Google einzureichen.\n\nDa die Entwickler dieser App dieser Anforderung nicht zustimmen, Updatium wird nicht mehr auf zertifizierten Android-Geräten nach dieser Zeit arbeiten.", + "googleVerificationWarningP1": "Google hat bekannt gegeben, dass, ab 2026/2027, alle Apps auf \"zertifizierten\" Android-Geräten den Entwickler benötigen, um persönliche Identitätsdetails direkt an Google einzureichen.\n\nDanach kann Updatium auf zertifizierten Android-Geräten aufhören zu funktionieren.", "googleVerificationWarningP2": "Weitere Informationen finden Sie unter https://keepandroidopen.org/.", "googleVerificationWarningP3": "Beachten Sie, dass es kurzfristig weiterhin möglich sein kann, \"unverifizierte\" (nicht-konforme) Apps durch einen \"fortgeschrittenen Flow\"-Prozess zu installieren, den Google versprochen hat, nach einem breiten Rückschluss auf ihre Ankündigung umzusetzen, aber sie haben nicht detailliert, wie dies funktioniert, so dass es unklar ist, ob es wirklich Benutzerfreiheiten in praktischer Weise erhalten wird.\n\nIn jedem Fall ist Googles Bewegung ein wesentlicher Schritt zum Ende des kostenlosen, universellen Computers für Einzelpersonen.\n\nNicht zertifizierte Betriebssysteme, wie GrapheneOS, sollten dadurch nicht beeinflusst werden, solange sie weiterhin existieren dürfen.", "multipleSigners": "Mehrere Zeichen", diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 71e083a2..073f9a80 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/en.json b/assets/translations/en.json index cb329204..7265cede 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -346,7 +346,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/es.json b/assets/translations/es.json index 348daacb..64d34032 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instancia 'sky22333/hubproxy' para las\nsolicitudes de GitHub", "includeZips": "Incluir archivos ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro del ZIP", - "googleVerificationWarningP1": "Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android \"certificados\" requerirán que el desarrollador envíe detalles de identidad personal directamente a Google.\n\nDado que los desarrolladores de esta aplicación no están de acuerdo con este requisito, Updatium ya no trabajará en dispositivos Android certificados después de ese tiempo.", + "googleVerificationWarningP1": "Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android \"certificados\" requerirán que el desarrollador envíe detalles de identidad personal directamente a Google.\n\nDespués de eso, Updatium puede dejar de funcionar en dispositivos Android certificados.", "googleVerificationWarningP2": "Vaya a https://keepandroidopen.org/ para más información.", "googleVerificationWarningP3": "Tenga en cuenta que a corto plazo, puede seguir siendo posible instalar aplicaciones \"no verificadas\" (no compatibles) a través de un proceso de \"flujo avanzado\" que Google ha prometido implementar después de una reacción amplia a su anuncio, pero no han detallado cómo funcionaría así que no está claro si realmente preservará las libertades de los usuarios de cualquier manera práctica.\n\nEn cualquier caso, el movimiento de Google es un paso significativo hacia el final de la computación libre de uso general para los individuos.\n\nLos sistemas operativos no certificados, como GrapheneOS, no deberían ser afectados por esto mientras se les permita seguir existiendo.", "multipleSigners": "Múltiples firmas", diff --git a/assets/translations/et.json b/assets/translations/et.json index 26ffab6f..0cec2722 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instants GitHub päringute jaoks", "includeZips": "Kaasa ZIP failid", "zippedApkFilterRegEx": "Filtreeri APK-sid ZIP-i sees", - "googleVerificationWarningP1": "Google on teatanud, et alates 2026./2027. aastast vajavad kõik \"sertifitseeritud\" Androidi seadmed, et arendaja esitaks isiklikud identiteediandmed otse Google'le.\n\nKuna selle rakenduse arendajad ei nõustu selle nõudega, ei tööta Updatium pärast seda aega sertifitseeritud Androidi seadmetel.", + "googleVerificationWarningP1": "Google on teatanud, et alates 2026./2027. aastast vajavad kõik \"sertifitseeritud\" Androidi seadmed, et arendaja esitaks isiklikud identiteediandmed otse Google'le.\n\nPärast seda võib Updatium lõpetada töötamise sertifitseeritud Androidi seadmetel.", "googleVerificationWarningP2": "Lisateabe saamiseks minge aadressile https://keepandroidopen.org/.", "googleVerificationWarningP3": "Pange tähele, et lühikesel tähtajal võib olla võimalik installida \"kinnitamata\" (mittesobivad) äpid \"täiustatud protsessi\" kaudu, mille Google on lubanud implementeerida pärast laia vastukaja oma teadaandele, kuid nad ei ole üksikasjaliselt kirjeldanud, kuidas see töötab, mistõttu on selge, kas see tõesti säilitab kasutajate vabadused praktilises mõttes.\n\nIgatahes, Google'i samm on oluline samm vaba üldotstarbelise arvutamise lõpule füüsiliste isikute jaoks.\n\nMitte-sertifitseeritud operatsioonisüsteemid, nagu GrapheneOS, peaksid jääda mõjutamata niikaua kui neil on lubatud olemas olla.", "multipleSigners": "Mitu allkirjastajat", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 50da7e34..1a57634d 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -341,7 +341,7 @@ "GHReqPrefix": "مثال “sky22333/hubproxy”", "includeZips": "فایل های ZIP", "zippedApkFilterRegEx": "فیلتر APK در داخل Zip", - "googleVerificationWarningP1": "گوگل اعلام کرده است که از سال 2026/2027، تمام برنامه های موجود در دستگاه های اندرویدی معتبر نیاز به توسعه دهنده دارند تا جزئیات هویت شخصی را مستقیماً به گوگل ارسال کنند.\n\nاز آنجایی که توسعه دهندگان این برنامه با این نیاز موافق نیستند، به دست آوردنیوم دیگر بر روی دستگاه های اندرویدی گواهی شده پس از آن زمان کار نخواهد کرد.", + "googleVerificationWarningP1": "گوگل اعلام کرده است که از سال 2026/2027، تمام برنامه های موجود در دستگاه های اندرویدی معتبر نیاز به توسعه دهنده دارند تا جزئیات هویت شخصی را مستقیماً به گوگل ارسال کنند.\n\nپس از آن، Updatium ممکن است در دستگاه های اندرویدی گواهی شده کار نکند.", "googleVerificationWarningP2": "به https://Keepandroidopen.org یا برای اطلاعات بیشتر بروید.", "googleVerificationWarningP3": "توجه داشته باشید که در کوتاه مدت، ممکن است همچنان برای نصب برنامه های \"unverified\" (غیر سازگار) از طریق یک فرایند \"advanced Flow\" که گوگل وعده داده است پس از واکنش گسترده به اعلام خود اجرا کند، اما آنها جزئیات چگونگی کار این را به طوری که مشخص نیست که آیا آن واقعا حفظ آزادی های کاربر در هر روش عملی.\n\nدر هر صورت، حرکت گوگل یک گام مهم به سمت پایان محاسبات رایگان و عمومی برای افراد است.\n\nسیستم عامل های غیر گواهی شده، مانند گرافنموس، باید تا زمانی که اجازه دارند به وجود خود ادامه دهند، تحت تاثیر قرار گیرند.", "multipleSigners": "ثبت نام های متعدد", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index e08bd46b..f5607cc0 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -342,7 +342,7 @@ "GHReqPrefix": "instance 'sky22333/hubproxy' pour les requêtes GitHub", "includeZips": "Inclure les fichiers ZIP", "zippedApkFilterRegEx": "Filtrer les APK à l'intérieur du ZIP", - "googleVerificationWarningP1": "Google a annoncé que, à partir de 2026/2027, toutes les applications sur des appareils Android \"certifiés\" exigeront du développeur de soumettre des données personnelles d'identité directement à Google.\n\nPuisque les développeurs de cette application n'acceptent pas cette exigence, Obtention ne fonctionnera plus sur les appareils Android certifiés après ce temps.", + "googleVerificationWarningP1": "Google a annoncé que, à partir de 2026/2027, toutes les applications sur des appareils Android \"certifiés\" exigeront du développeur de soumettre des données personnelles d'identité directement à Google.\n\nAprès cela, Updatium peut cesser de fonctionner sur les appareils Android certifiés.", "googleVerificationWarningP2": "Consultez https://keepandroidopen.org/ pour plus d'informations.", "googleVerificationWarningP3": "Notez qu'à court terme, il peut continuer d'être possible d'installer des applications \"non vérifiées\" (non conformes) à travers un processus de \"flux avancé\" que Google a promis de mettre en œuvre après un grand retour à l'annonce, mais ils n'ont pas précisé comment cela fonctionnerait donc il n'est pas clair s'il préservera réellement les libertés des utilisateurs d'une manière pratique.\n\nEn tout cas, le mouvement de Google est un pas important vers la fin de l'informatique gratuite et à usage général pour les individus.\n\nLes OS non certifiés, comme GrapheneOS, ne devraient pas en être affectés tant qu'ils sont autorisés à continuer d'exister.", "multipleSigners": "Plusieurs signataires", diff --git a/assets/translations/gl.json b/assets/translations/gl.json index f765331a..730903d5 100644 --- a/assets/translations/gl.json +++ b/assets/translations/gl.json @@ -343,7 +343,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instancia para solicitudes github", "includeZips": "Incluír ficheiros ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "Google anunciou que, comezando en 2026/2027, todas as apps en dispositivos \"certificados\" Android van precisar que as desenvolvedoras envíen detalles da súa identidade persoal directamente a Google.\n\nComo non estamos de acordo con este proceder, Updatium non vai funcionar en dispositivos certificados chegado o momento.", + "googleVerificationWarningP1": "Google anunciou que, comezando en 2026/2027, todas as apps en dispositivos \"certificados\" Android van precisar que as desenvolvedoras envíen detalles da súa identidade persoal directamente a Google.\n\nDespois diso, Updatium pode deixar de funcionar en dispositivos certificados.", "googleVerificationWarningP2": "Vai a https://keepandroidopen.org/ para máis información.", "googleVerificationWarningP3": "A curto prazo pode seguir dispoñible a instalación de aplicacións \"non verificadas\" (non-compliant) cun procedemento \"avanzado\" que Google prometeu implementar despois das críticas recibidas, pero aínda non publicaron detalles sobre isto e non está claro se realmente será posible levalo adiante de xeito práctico.\n\nEn todo caso, os movementos de Google son indicativos sobre o desexo de acabar coa liberdade, o propósito de uso xeral das computadoras por parte das persoas.\n\nOs sistemas operativos non certificados, como GrapheneOS, non se deberían ver afectados por isto mentras lles permitan existir.", "multipleSigners": "Múltiples Signadores", diff --git a/assets/translations/he.json b/assets/translations/he.json index 05452486..f62acf66 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "לכלול קובצי ZIP", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "removeAppQuestion": { diff --git a/assets/translations/hu.json b/assets/translations/hu.json index c4288c09..4dc128cc 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -342,7 +342,7 @@ "GHReqPrefix": "„sky22333/hubproxy” példány a GitHub lekérdezéséhez", "includeZips": "ZIP-fájlok belefoglalása", "zippedApkFilterRegEx": "APK-fájlok szűrése a ZIP-fájlon belül", - "googleVerificationWarningP1": "A Google bejelentette, hogy 2026/2027-től kezdődően az összes alkalmazáshoz, amely „tanúsított” (certified) Android eszközökön fut, a fejlesztőknek a személyes azonosító adataikat közvetlenül a Google-nek kell majd benyújtaniuk.\n\nMivel az Updatium alkalmazás fejlesztői nem fogadják el ezt a követelményt, ezért az Updatium az említett időpont után már nem fog működni a tanúsított Android eszközökön.", + "googleVerificationWarningP1": "A Google bejelentette, hogy 2026/2027-től kezdődően az összes alkalmazáshoz, amely „tanúsított\" (certified) Android eszközökön fut, a fejlesztőknek a személyes azonosító adataikat közvetlenül a Google-nek kell majd benyújtaniuk.\n\nEzt követően, az Updatium esetleg nem fog működni a tanúsított Android eszközökön.", "googleVerificationWarningP2": "További információkért látogasson el a https://keepandroidopen.org/ weboldalra.", "googleVerificationWarningP3": "Fontos megjegyezni, hogy rövid távon még lehetséges lehet az „ellenőrizetlen” (nem megfelelő) alkalmazások telepítése egy „speciális folyamaton” keresztül, amelyre a Google ígéretet tett, hogy megvalósít a bejelentésüket követő széles körű felháborodás miatt. Azonban azt nem részletezték, hogy hogyan is működne ez, ezért nem világos, hogy ez gyakorlatilag megőrzi-e a felhasználók szabadsághoz való jogait.\n\nMindenesetre a Google lépése jelentős előrelépés a felhasználók számára elérhető szabad, általános célú alkalmazások megszűnése felé.\n\nA nem tanúsított operációs rendszereket, mint például a GrapheneOS, ez nem érinti mindaddig, amíg működhetnek.", "multipleSigners": "Többen is aláírták", diff --git a/assets/translations/id.json b/assets/translations/id.json index e8fc48e1..904b4e2b 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instance 'sky22333/hubproxy' untuk permintaan GitHub", "includeZips": "Menyertakan file ZIP", "zippedApkFilterRegEx": "Saring APK di dalam ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026 / 2027, all apps on \"certified\" Android devices will needs the developer to submit personal identity details directly to Google.\n\nKarena pengembang aplikasi ini tidak setuju dengan persyaratan ini, Updatium tidak akan lagi bekerja pada perangkat Android bersertifikat setelah waktu itu.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026 / 2027, all apps on \"certified\" Android devices will needs the developer to submit personal identity details directly to Google.\n\nSetelah itu, Updatium mungkin berhenti bekerja pada perangkat Android bersertifikat.", "googleVerificationWarningP2": "Pergi ke https: / / keep androidpen.org / untuk informasi lebih lanjut.", "googleVerificationWarningP3": "Perlu dicatat bahwa dalam jangka pendek, mungkin terus mungkin untuk memasang aplikasi \"belum diverifikasi\" (bukan -compliant) melalui proses \"arus maju\" yang Google janjikan untuk mengimplementasikan setelah reaksi luas terhadap pengumuman mereka, tetapi mereka tidak rinci bagaimana hal ini akan bekerja sehingga tidak jelas apakah itu benar-benar akan menjaga kebebasan pengguna dengan cara praktis.\n\nDalam hal apapun, Google bergerak adalah langkah yang signifikan menuju akhir bebas, tujuan umum komputasi untuk individu.\n\nOS tidak bersertifikat, seperti GrapheneOS, seharusnya tidak terpengaruh oleh hal ini selama mereka diizinkan untuk terus ada.", "multipleSigners": "Tanda Tangan Ganda", diff --git a/assets/translations/it.json b/assets/translations/it.json index 67a54944..0bd48bae 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -341,7 +341,7 @@ "GHReqPrefix": "istanza 'sky22333/hubproxy' per le richieste a GitHub", "includeZips": "Includere file ZIP", "zippedApkFilterRegEx": "Filtrare gli APK all'interno dello ZIP", - "googleVerificationWarningP1": "Google ha annunciato che, a partire dal 2026/2027, tutte le applicazioni su dispositivi Android \"certificati\" richiederanno allo sviluppatore di inviare dati di identità personali direttamente a Google.\n\nPoiché gli sviluppatori di questa applicazione non sono d'accordo con questo requisito, Updatium non lavorerà più su dispositivi Android certificati dopo quel tempo.", + "googleVerificationWarningP1": "Google ha annunciato che, a partire dal 2026/2027, tutte le applicazioni su dispositivi Android \"certificati\" richiederanno allo sviluppatore di inviare dati di identità personali direttamente a Google.\n\nDopo ciò, Updatium potrebbe smettere di funzionare su dispositivi Android certificati.", "googleVerificationWarningP2": "Vai a https://keepandroidopen.org/ per ulteriori informazioni.", "googleVerificationWarningP3": "Si noti che a breve termine, può continuare ad essere possibile installare applicazioni \"non verificate\" (non conformi) attraverso un processo di \"flusso avanzato\" che Google ha promesso di implementare dopo ampio backlash al loro annuncio, ma non hanno dettagliato come questo funzionerebbe in modo da non essere chiaro se veramente preservare le libertà degli utenti in qualsiasi modo pratico.\n\nIn ogni caso, la mossa di Google è un passo significativo verso la fine del free, general-purpose computing per gli individui.\n\nOS non certificati, come GrapheneOS, non dovrebbero essere influenzati da questo per tutto il tempo in cui sono autorizzati a continuare ad esistere.", "multipleSigners": "Segnali multipli", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index eced01c2..79ad9337 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -342,7 +342,7 @@ "GHReqPrefix": "GitHub リクエスト用の 'sky22333/hubproxy' インスタンス", "includeZips": "ZIPファイルを含む", "zippedApkFilterRegEx": "ZIP内のAPKをフィルタリングする", - "googleVerificationWarningP1": "Googleは、2026年から2027年以降、「認定」Androidデバイス上のすべてのアプリにおいて、開発者が個人情報をGoogleに直接提出することを義務付けると発表しました。\n\nこのアプリの開発者はこの要件に同意しないため、それ以降Updatiumは認定Androidデバイスでは動作しなくなります。", + "googleVerificationWarningP1": "Googleは、2026年から2027年以降、「認定」Androidデバイス上のすべてのアプリにおいて、開発者が個人情報をGoogleに直接提出することを義務付けると発表しました。\n\nその後、Updatiumは認定Androidデバイスで動作しなくなる可能性があります。", "googleVerificationWarningP2": "詳細については、https://keepandroidopen.org/ をご覧ください。", "googleVerificationWarningP3": "なお、短期的には、Googleが発表後に広範な反発を受けて実装を約束した「高度なフロー」プロセスを通じて、「未検証」(非準拠)のアプリをインストールし続けることが可能になるかもしれません。しかし、その具体的な仕組みは明らかにされておらず、ユーザーの自由が実質的に保たれるかどうかは不明です。\n\nいずれにせよ、Googleのこの動きは、個人向けの自由な汎用コンピューティングの終焉に向けた大きな一歩です。\n\nGrapheneOSのような非認定OSは、その存在が許される限り、この影響を受けないはずです。", "multipleSigners": "複数の署名者", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 94ea08b0..97f0a800 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -342,7 +342,7 @@ "GHReqPrefix": "GitHub 요청을 위한 'sky22333/hubproxy' 인스턴스", "includeZips": "ZIP 파일 포함", "zippedApkFilterRegEx": "ZIP 내 APK 필터링", - "googleVerificationWarningP1": "Google은 2026/2027에서 시작하여 \"certified\" Android 기기의 모든 앱은 Google에 직접 개인 식별 정보를 제출하기 위해 개발자가 필요합니다.\n\n이 응용 프로그램의 개발자가이 요구 사항에 동의하지 않기 때문에, 얻은 것은 그 시간이 지나면 인증 된 Android 장치에서 더 이상 작동하지 않습니다.", + "googleVerificationWarningP1": "Google은 2026/2027에서 시작하여 \"certified\" Android 기기의 모든 앱은 Google에 직접 개인 식별 정보를 제출하기 위해 개발자가 필요합니다.\n\n그 후, Updatium은 인증 된 Android 장치에서 작동을 중지 할 수 있습니다.", "googleVerificationWarningP2": "Https://keepandroidopen.org/로 이동하세요.", "googleVerificationWarningP3": "이 웹 사이트는 애플 리케이션에 전념. 우리는 정품 앱과 게임을 제공 할 목적으로이 사이트를 만들었습니다. 4AppsApk 최고의 안드로이드 애플 리케이션을위한 무료 APK 파일 다운로드 서비스, 계략.\n\n어떤 경우, Google의 이동은 개인을위한 무료, 범용 컴퓨팅의 끝으로 중요한 단계입니다.\n\nGrapheneOS와 같은 비 인증 된 OSes는 존재하지 않아야합니다.", "multipleSigners": "다수 Signers", diff --git a/assets/translations/ml.json b/assets/translations/ml.json index 51581549..ff53e1d7 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index 55ad4746..f6acc7d0 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instantie voor GitHub verzoeken", "includeZips": "ZIP-bestanden opnemen", "zippedApkFilterRegEx": "APK's filteren in ZIP", - "googleVerificationWarningP1": "Google heeft aangekondigd dat vanaf 2026/2027 alle apps op \"gecertificeerde\" Android-apparaten de ontwikkelaar nodig hebben om persoonlijke identiteitsgegevens rechtstreeks aan Google te verzenden.\n\nAangezien de ontwikkelaars van deze app niet akkoord gaan met deze eis, zal Progressionium niet meer werken op gecertificeerde Android-apparaten na die tijd.", + "googleVerificationWarningP1": "Google heeft aangekondigd dat vanaf 2026/2027 alle apps op \"gecertificeerde\" Android-apparaten de ontwikkelaar nodig hebben om persoonlijke identiteitsgegevens rechtstreeks aan Google te verzenden.\n\nDaarna kan Updatium stoppen met werken op gecertificeerde Android-apparaten.", "googleVerificationWarningP2": "Ga naar https://keepandroidopen.org/ voor meer informatie.", "googleVerificationWarningP3": "Merk op dat het op korte termijn mogelijk kan blijven om \"niet-geverifieerde\" (niet-conforme) apps te installeren via een \"geavanceerde flow\" proces dat Google heeft beloofd te implementeren na brede backlash naar hun aankondiging, maar ze hebben niet gedetailleerd hoe dit zou werken, dus het is onduidelijk of het echt zal behouden gebruikersvrijheden op enige praktische manier.\n\nIn ieder geval, Google's zet is een belangrijke stap naar het einde van vrije, algemene computer voor individuen.\n\nNiet-gecertificeerde besturingssystemen, zoals GrapheneOS, mogen hierdoor niet worden beïnvloed zolang ze mogen blijven bestaan.", "multipleSigners": "Meerdere Ondertekenaars", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index bbd8d5f7..69c73f16 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instancja \"sky22333/hubproxy\" dla żądań GitHub", "includeZips": "Dołączanie plików ZIP", "zippedApkFilterRegEx": "Filtrowanie plików APK wewnątrz ZIP", - "googleVerificationWarningP1": "Google ogłosił, że począwszy od 2026 / 2027, wszystkie aplikacje na \"certyfikowanych\" urządzeń z systemem Android będą wymagać od dewelopera przekazania danych osobowych bezpośrednio do Google.\n\nPonieważ deweloperzy tej aplikacji nie zgadzają się na ten wymóg, po tym czasie nie będzie już działać na certyfikowanych urządzeniach z systemem Android.", + "googleVerificationWarningP1": "Google ogłosił, że począwszy od 2026 / 2027, wszystkie aplikacje na \"certyfikowanych\" urządzeń z systemem Android będą wymagać od dewelopera przekazania danych osobowych bezpośrednio do Google.\n\nPo tym czasie, Updatium może przestać działać na certyfikowanych urządzeniach z systemem Android.", "googleVerificationWarningP2": "Więcej informacji można uzyskać na stronie https: / / keepandroidopen.org.", "googleVerificationWarningP3": "Należy zauważyć, że w perspektywie krótkoterminowej może być nadal możliwe instalowanie \"niezweryfikowanych\" aplikacji (niezgodnych z wymaganiami) poprzez proces \"zaawansowanego przepływu\", który Google obiecał wdrożyć po szerokim odwrocie do ich ogłoszenia, ale nie mają one szczegółowych informacji, jak to działa, więc nie jest jasne, czy będzie rzeczywiście zachować wolność użytkownika w jakikolwiek praktyczny sposób.\n\nW każdym razie ruch Google jest znaczącym krokiem w kierunku zakończenia swobodnego, ogólnego celu dla osób fizycznych.\n\nNiecertyfikowane Oses, takie jak GrapheneOS, nie powinny mieć na to wpływu tak długo, jak długo będą mogły istnieć.", "multipleSigners": "Wielu sygnatariuszy", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index 3050866e..91b7ff55 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instância \"sky22333/hubproxy\" para solicitações do GitHub", "includeZips": "Incluir arquivos ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nUma vez que os desenvolvedores deste aplicativo não concordam com este requisito, Updatium não funcionará mais em dispositivos Android certificados após esse tempo.", + "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nDepois disso, Updatium pode parar de funcionar em dispositivos Android certificados.", "googleVerificationWarningP2": "Vá para https://keepandroidopen.org/ para mais informações.", "googleVerificationWarningP3": "Note que, a curto prazo, pode continuar a ser possível instalar aplicativos \"não verificados\" (não conformes) através de um processo de \"fluxo avançado\" que o Google prometeu implementar após uma ampla retrocesso ao seu anúncio, mas eles não detalharam como isso funcionaria então não é claro se ele realmente preservará as liberdades de usuário de alguma forma prática.\n\nEm qualquer caso, o movimento do Google é um passo significativo para o fim da computação gratuita, de propósito geral para os indivíduos.\n\nOS não certificados, como o GrapheneOS, não devem ser afetados por isso enquanto forem autorizados a continuar a existir.", "multipleSigners": "Assinantes Múltiplos", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index 1bd631d1..eeceda1d 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instância 'sky22333/hubproxy' para pedidos de GitHub", "includeZips": "Incluir ficheiros ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nUma vez que os desenvolvedores deste aplicativo não concordam com este requisito, Updatium não funcionará mais em dispositivos Android certificados após esse tempo.", + "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nDepois disso, Updatium pode parar de funcionar em dispositivos Android certificados.", "googleVerificationWarningP2": "Vá para https://keepandroidopen.org/ para mais informações.", "googleVerificationWarningP3": "Note que, a curto prazo, pode continuar a ser possível instalar aplicativos \"não verificados\" (não conformes) através de um processo de \"fluxo avançado\" que o Google prometeu implementar após uma ampla retrocesso ao seu anúncio, mas eles não detalharam como isso funcionaria então não é claro se ele realmente preservará as liberdades de usuário de alguma forma prática.\n\nEm qualquer caso, o movimento do Google é um passo significativo para o fim da computação gratuita, de propósito geral para os indivíduos.\n\nOS não certificados, como o GrapheneOS, não devem ser afetados por isso enquanto forem autorizados a continuar a existir.", "multipleSigners": "Assinantes Múltiplos", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 3179ed77..210a8782 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Использовать «sky22333/hubproxy» для запросов на GitHub", "includeZips": "Включить ZIP-файлы", "zippedApkFilterRegEx": "Фильтр APK внутри ZIP", - "googleVerificationWarningP1": "Google объявил, что начиная с 2026/2027 года, все приложения на сертифицированных устройствах Android потребуют от разработчика предоставления персональных данных непосредственно Google.\n\nПоскольку разработчики данного приложения не согласны с этим требованием, Updatium не будет работать на сертифицированных устройствах Android после наступления данного события.", + "googleVerificationWarningP1": "Google объявил, что начиная с 2026/2027 года, все приложения на сертифицированных устройствах Android потребуют от разработчика предоставления персональных данных непосредственно Google.\n\nПосле этого, Updatium может перестать работать на сертифицированных устройствах Android.", "googleVerificationWarningP2": "Перейдите на https://keepandroidopen.org/ для получения дополнительной информации.", "googleVerificationWarningP3": "Обратите внимание, что в краткосрочной перспективе возможно установить «непроверенные» (не соответствующие) приложения с помощью процесса «продвинутого потока», который Google пообещал реализовать после широкой негативной реакции на их объявление, но они не уточнили, как это будет работать, поэтому неясно, действительно ли данный метод сохранит свободы пользователей каким-либо практическим способом.\n\nВ любом случае, действие Google является значительным шагом к завершению разработки бесплатных приложений сторонними разработчиками.\n\nНесертифицированные ОС, такие как GrapheneOS, не должны быть подвержены этому влиянию до тех пор, пока им разрешено продолжать существовать.", "multipleSigners": "Несколько подписей", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index c7a2374f..0627295b 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instansen \"sky22333/hubproxy\" för GitHub-förfrågningar", "includeZips": "Inkludera ZIP-filer", "zippedApkFilterRegEx": "Filtrera APK:er inuti ZIP", - "googleVerificationWarningP1": "Google har meddelat att alla appar på \"certifierade\" Android-enheter kommer att kräva att utvecklaren skickar personuppgifter direkt till Google.\n\nEftersom utvecklarna av denna app inte samtycker till detta krav kommer Updatium inte längre att arbeta med certifierade Android-enheter efter den tiden.", + "googleVerificationWarningP1": "Google har meddelat att alla appar på \"certifierade\" Android-enheter kommer att kräva att utvecklaren skickar personuppgifter direkt till Google.\n\nEfter det kan Updatium sluta fungera på certifierade Android-enheter.", "googleVerificationWarningP2": "Gå till https://keepandroidopen.org/ för mer information.", "googleVerificationWarningP3": "Observera att på kort sikt kan det fortsätta att vara möjligt att installera \"overifierade\" (icke-kompatibla) appar genom en \"avancerad flöde\" -process som Google har lovat att genomföra efter bred backlash till deras tillkännagivande, men de har inte detaljerat hur detta skulle fungera så det är oklart om det verkligen kommer att bevara användarfrihet på något praktiskt sätt.\n\nGoogles flytt är ett viktigt steg mot slutet av gratis, allmänt ändamål datorer för individer.\n\nIcke-certifierade operativsystem, som GrapheneOS, bör inte påverkas av detta så länge de får fortsätta att existera.", "multipleSigners": "Flera signers", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index 73c1340b..bfc50d1d 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -343,7 +343,7 @@ "GHReqPrefix": "GitHub istekleri için 'sky22333/hubproxy' örneği", "includeZips": "ZIP dosyalarını dahil et", "zippedApkFilterRegEx": "ZIP içindeki APK'ları filtrele", - "googleVerificationWarningP1": "Google, 2026/2027'den itibaren \"sertifikalı\" Android cihazlardaki bütün uygulamaların, geliştiricinin kişisel kimlik bilgilerini doğrudan Google'a göndermesini gerektireceğini duyurdu.\n\nBu uygulamanın geliştiricileri bu şartı kabul etmedikleri için, Updatium bu tarihten sonra sertifikalı Android cihazlarda çalışmayacaktır.", + "googleVerificationWarningP1": "Google, 2026/2027'den itibaren \"sertifikalı\" Android cihazlardaki bütün uygulamaların, geliştiricinin kişisel kimlik bilgilerini doğrudan Google'a göndermesini gerektireceğini duyurdu.\n\nBu tarihten sonra, Updatium sertifikalı Android cihazlarda çalışmayı durabilir.", "googleVerificationWarningP2": "Daha fazla bilgi için https://keepandroidopen.org/ adresine gidin.", "googleVerificationWarningP3": "Kısa vadede, Google'ın duyurudan sonra aldığı geniş tepkilerin ardından yapacağına söz verdiği \"gelişmiş akış\" işlemi ile \"doğrulanmamış\" (şartı yerine getirmeyen) uygulamaları yüklemek mümkün olabilir; ancak nasıl çalışacağını detaylandırmadıkları için bunun kullanıcı özgürlüğünü pratik anlamda gerçekten koruyup koruyamayacağı belirsizdir.\n\nHer halükârda Google'ın bu hamlesi; bireyler için ücretsiz, genel amaçlı bilişim hizmetlerinin sonuna doğru atılmış önemli bir adımdır.\n\nVar olmalarına müsaade edildiği sürece, GrapheneOS gibi sertifikasız işletim sistemleri bundan etkilenmemelidir.", "multipleSigners": "Birden fazla imzacı", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index c0af2a98..6061616e 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -341,7 +341,7 @@ "GHReqPrefix": "екземпляр 'sky22333/hubproxy' для запитів на GitHub", "includeZips": "Додайте ZIP-файли", "zippedApkFilterRegEx": "Фільтруйте APK-файли всередині ZIP", - "googleVerificationWarningP1": "Google оголосила, що, починаючи з 2026/2027, всі додатки на \"сертифікованих\" пристроях Android будуть вимагати розробника, щоб подати особисті дані в Інтернеті безпосередньо на Google.\n\nОскільки розробники цієї програми не погоджуються з цією вимогою, Updatium більше не працюватиме на сертифікованих пристроях Android після цього часу.", + "googleVerificationWarningP1": "Google оголосила, що, починаючи з 2026/2027, всі додатки на \"сертифікованих\" пристроях Android будуть вимагати розробника, щоб подати особисті дані в Інтернеті безпосередньо на Google.\n\nПісля цього, Updatium може припинити працювати на сертифікованих пристроях Android.", "googleVerificationWarningP2": "Перейти на https://keepandroidopen.org/ для отримання додаткової інформації.", "googleVerificationWarningP3": "Зауважте, що в короткостроковому терміні вона може продовжувати бути можливою для установки \"необґрунтованих\" (некомпліантних) додатків через процес \"додатковий потік\", який Google обіцяє реалізувати після широкої задньої вії до їх оголошення, але вони не докладно, як це буде працювати так, що це не зрозуміло, чи це буде дійсно зберігати свобод користувачів будь-яким практичним способом.\n\nУ будь-якому випадку, переміщення Google є важливим кроком до кінця безкоштовного, універсального обчислення для фізичних осіб.\n\nНесертифіковані ОС, як GrapheneOS, повинні бути неоцінені цими протягом тривалого часу, щоб вони могли продовжити існування.", "multipleSigners": "Кілька підписників", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 689330c6..294dc839 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Thực thể 'sky22333/hubproxy' cho các yêu cầu GitHub", "includeZips": "Bao gồm các tệp ZIP", "zippedApkFilterRegEx": "Lọc các tệp APK bên trong tệp ZIP", - "googleVerificationWarningP1": "Google đã thông báo rằng, bắt đầu từ năm 2026/2027, tất cả các ứng dụng trên các thiết bị Alpha được ký hiệu sẽ yêu cầu nhà phát triển gửi thông tin cá nhân trực tiếp đến Google.\n\nVì các nhà phát triển của ứng dụng này không đồng ý với yêu cầu này, nên Otainium sẽ không còn làm việc trên các thiết bị được chứng nhận là steroid sau thời gian đó.", + "googleVerificationWarningP1": "Google đã thông báo rằng, bắt đầu từ năm 2026/2027, tất cả các ứng dụng trên các thiết bị Android được chứng nhận sẽ yêu cầu nhà phát triển gửi thông tin cá nhân trực tiếp đến Google.\n\nSau đó, Updatium có thể ngừng hoạt động trên các thiết bị Android được chứng nhận.", "googleVerificationWarningP2": "Truy cập https://keepandroidopen.org/ để biết thêm thông tin.", "googleVerificationWarningP3": "Ghi chú rằng trong ngắn hạn, nó có thể tiếp tục có thể được tiếp tục để cài đặt các ứng dụng \"không xác định\" thông qua một quá trình \"vô hạn dòng chảy\" mà Google đã hứa sẽ thực hiện sau một hồi quy rộng cho thông báo của họ, nhưng họ không có chi tiết làm thế nào điều này sẽ hoạt động như thế nào vì vậy nó không rõ ràng nó sẽ thực sự bảo tồn tự do cho người dùng theo bất kỳ cách thực tế nào.\n\nTrong bất kỳ trường hợp nào, sự di chuyển của Google là một bước tiến đáng kể tới sự kết thúc của máy tính tự do, mục đích chung cho cá nhân.\n\nCác hệ điều hành không được ghi nhận, giống như GreneOS, nên không bị ảnh hưởng bởi điều này miễn là chúng được cho phép tiếp tục tồn tại.", "multipleSigners": "Nhiều người ký", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index b9ce66ac..cb2fba68 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -341,7 +341,7 @@ "GHReqPrefix": "GitHub 請求的 'sky22333/hubproxy' 實例", "includeZips": "包含 ZIP 文件", "zippedApkFilterRegEx": "在 ZIP 內過濾 APK", - "googleVerificationWarningP1": "Google 已宣布,自 2026/2027 年起,所有在「通過認證(certified)」的 Android 裝置上執行的應用程式,都必須由開發者直接向 Google 提交個人身分資訊。\n\n由於本應用程式的開發者不同意此一要求,Updatium 在該時間點之後將無法再於通過認證的 Android 裝置上運作。", + "googleVerificationWarningP1": "Google 已宣布,自 2026/2027 年起,所有在「通過認證(certified)」的 Android 裝置上執行的應用程式,都必須由開發者直接向 Google 提交個人身分資訊。\n\n之後,Updatium 可能會停止在通過認證的 Android 裝置上運作。", "googleVerificationWarningP2": "如需更多資訊,請前往 https://keepandroidopen.org/.", "googleVerificationWarningP3": "請注意,從短期來看,Google 表示在其公告引發廣泛反彈後,可能仍可透過其承諾實作的「進階流程(advanced flow)」來安裝「未經驗證」(不符合規範)的應用程式;然而,Google 尚未說明此流程的具體運作方式,因此無法確定它是否能在實務上真正維護使用者的自由。\n\n無論如何,Google 的這項作法,都是朝向終結個人自由、通用運算的一大步。\n\n只要仍被允許持續存在,像 GrapheneOS 這類未通過認證的作業系統,理論上不會受到此政策影響。", "multipleSigners": "多重簽署者", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index d29c24fe..d9d297ca 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -341,7 +341,7 @@ "GHReqPrefix": "用于 GitHub 请求的 \"sky22333/hubproxy \"实例", "includeZips": "包含 ZIP 文件", "zippedApkFilterRegEx": "过滤 ZIP 内的 APK", - "googleVerificationWarningP1": "Google宣布,从2026/2027年开始,所有在\"认证\"Android设备上的应用程序都将要求开发者直接向Google提交个人身份细节.\n\n由于此应用程序的开发者不同意这一要求,Updatium在此之后将不再在认证的Android设备上工作.", + "googleVerificationWarningP1": "Google宣布,从2026/2027年开始,所有在\"认证\"Android设备上的应用程序都将要求开发者直接向Google提交个人身份细节.\n\n之后,Updatium可能会停止在认证的Android设备上工作.", "googleVerificationWarningP2": "详情请访问https://keepandroidopen.org/.", "googleVerificationWarningP3": "请注意,在短期内,通过谷歌承诺在广泛反对其公告后实施的\"高级流程\"程序,可能继续安装\"未经验证\"(不符合要求)的应用软件,但他们没有详细说明这将如何运作,因此不清楚它是否会以任何实际方式真正维护用户自由.\n\n无论如何,谷歌的这一举动是朝向个人自由、通用计算结束的重要一步.\n\n未经认证的OS,如GrapheneOS,只要允许继续存在,就不应受到影响.", "multipleSigners": "多个签名人", From c6bfeb5b3f4a76fd59a77c5b2bd3f4c18125c347 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:25:19 +0200 Subject: [PATCH 06/37] Update strings --- assets/translations/ar.json | 2 +- assets/translations/bs.json | 2 +- assets/translations/ca.json | 2 +- assets/translations/cs.json | 2 +- assets/translations/da.json | 2 +- assets/translations/de.json | 2 +- assets/translations/en-EO.json | 2 +- assets/translations/en.json | 2 +- assets/translations/es.json | 2 +- assets/translations/et.json | 2 +- assets/translations/fa.json | 2 +- assets/translations/fr.json | 2 +- assets/translations/gl.json | 2 +- assets/translations/hu.json | 2 +- assets/translations/id.json | 2 +- assets/translations/it.json | 2 +- assets/translations/ja.json | 2 +- assets/translations/ko.json | 2 +- assets/translations/ml.json | 2 +- assets/translations/nl.json | 2 +- assets/translations/pl.json | 2 +- assets/translations/pt-BR.json | 2 +- assets/translations/pt.json | 2 +- assets/translations/ru.json | 2 +- assets/translations/sv.json | 2 +- assets/translations/tr.json | 2 +- assets/translations/uk.json | 2 +- assets/translations/vi.json | 2 +- assets/translations/zh-Hant-TW.json | 2 +- assets/translations/zh.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 3511daa6..bfe27811 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -24,7 +24,7 @@ "color": "لون", "standard": "قياسي", "custom": "مخصّص", - "useMaterialYou": "استخدم Material You", + "useMaterialYou": "استخدم ألوان Material You", "githubStarredRepos": "مستودعات GitHub المفضلة", "uname": "اسم المستخدم", "wrongArgNum": "عدد وسائط غير صحيح", diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 1e8d49a9..6a68d2f9 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -24,7 +24,7 @@ "color": "Boja", "standard": "Standard", "custom": "Custom", - "useMaterialYou": "Koristi Material You temu", + "useMaterialYou": "Koristi Material You boje", "githubStarredRepos": "GitHub repo-i sa zvjezdicom", "uname": "Korisničko ime", "wrongArgNum": "Naveden je pogrešan broj argumenata", diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 2ca5c69e..4ee34d21 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -24,7 +24,7 @@ "color": "Color", "standard": "Estàndard", "custom": "Personalitzat", - "useMaterialYou": "Usa 'Material You'", + "useMaterialYou": "Usar colors Material You", "githubStarredRepos": "Repositoris favorits de GitHub", "uname": "Nom d'usuari", "wrongArgNum": "Nombre d'arguments proveït invàlid", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 981a3f34..6bd0d470 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -24,7 +24,7 @@ "color": "Barvu", "standard": "Standardní", "custom": "Vlastní", - "useMaterialYou": "Použít Material You", + "useMaterialYou": "Použít barvy Material You", "githubStarredRepos": "Repozitáře na GitHubu označené hvězdičkou", "uname": "Uživatelské jméno", "wrongArgNum": "Nesprávný počet zadaných argumentů", diff --git a/assets/translations/da.json b/assets/translations/da.json index 6805d0cd..be43b425 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -24,7 +24,7 @@ "color": "Farve", "standard": "Standard", "custom": "Brugerdefineret", - "useMaterialYou": "Brug Material You", + "useMaterialYou": "Brug Material You-farver", "githubStarredRepos": "Stjernemarkeret GitHub-repos", "uname": "Brugernavn", "wrongArgNum": "Forkert antal argumenter angivet", diff --git a/assets/translations/de.json b/assets/translations/de.json index 8c5706e7..d5a18407 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -24,7 +24,7 @@ "color": "Farbe", "standard": "Standard", "custom": "Benutzerdefiniert", - "useMaterialYou": "Material You verwenden", + "useMaterialYou": "Material You Farben verwenden", "githubStarredRepos": "GitHub Starred Repos", "uname": "Benutzername", "wrongArgNum": "Falsche Anzahl von Argumenten (Parametern) übermittelt", diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 073f9a80..59b4498e 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -24,7 +24,7 @@ "color": "Koloro", "standard": "Norma", "custom": "Agordita", - "useMaterialYou": "Uzi Material You", + "useMaterialYou": "Uzi Material You kolorojn", "githubStarredRepos": "Stelaj GitHub-deponejoj", "uname": "Uzantnomo", "wrongArgNum": "Malĝusta nombro da provizitaj argumentoj", diff --git a/assets/translations/en.json b/assets/translations/en.json index 7265cede..797dc7f7 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -24,7 +24,7 @@ "color": "Color", "standard": "Standard", "custom": "Custom", - "useMaterialYou": "Use Material You", + "useMaterialYou": "Use Material You colors", "githubStarredRepos": "GitHub starred repositories", "uname": "Username", "wrongArgNum": "Wrong number of arguments provided", diff --git a/assets/translations/es.json b/assets/translations/es.json index 64d34032..bc4a7cfb 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -24,7 +24,7 @@ "color": "color", "standard": "Estándar", "custom": "A medida", - "useMaterialYou": "Aplicar 'Material You'", + "useMaterialYou": "Aplicar colores Material You", "githubStarredRepos": "repositorios favoritos en GitHub", "uname": "Nombre de usuario", "wrongArgNum": "Número de argumentos provistos inválido", diff --git a/assets/translations/et.json b/assets/translations/et.json index 0cec2722..a269e4cf 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -24,7 +24,7 @@ "color": "Värv", "standard": "Standard", "custom": "Kohandatud", - "useMaterialYou": "Kasuta Material You", + "useMaterialYou": "Kasuta Material You värve", "githubStarredRepos": "GitHub'i tärniga repod", "uname": "Kasutajanimi", "wrongArgNum": "Vale arv argumente antud", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 1a57634d..3e299abc 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -24,7 +24,7 @@ "color": "رنگ", "standard": "استاندارد", "custom": "سفارشی", - "useMaterialYou": "از Material You استفاده کنید", + "useMaterialYou": "استفاده از رنگ‌های Material You", "githubStarredRepos": "مخازن ستاره دار گیتهاب", "uname": "نام کاربری", "wrongArgNum": "تعداد آرگومان های ارائه شده اشتباه است", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f5607cc0..9666d722 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -24,7 +24,7 @@ "color": "Couleur", "standard": "Norme", "custom": "Personnalisé", - "useMaterialYou": "Utiliser Material You", + "useMaterialYou": "Utiliser les couleurs Material You", "githubStarredRepos": "dépôts étoilés GitHub", "uname": "Nom d'utilisateur", "wrongArgNum": "Nombre incorrect des arguments fournis", diff --git a/assets/translations/gl.json b/assets/translations/gl.json index 730903d5..811889c3 100644 --- a/assets/translations/gl.json +++ b/assets/translations/gl.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Estándar", "custom": "Persoal", - "useMaterialYou": "Usar Material You", + "useMaterialYou": "Usar cores Material You", "githubStarredRepos": "Repositorios GitHub con estrela", "uname": "Identificador", "wrongArgNum": "Número de argumentos proporcionados incorrecto", diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 4dc128cc..313fc23c 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -24,7 +24,7 @@ "color": "Szín", "standard": "Általános", "custom": "Egyéni", - "useMaterialYou": "Material You használata", + "useMaterialYou": "Material You színek használata", "githubStarredRepos": "Csillagozott GitHub-tárolók", "uname": "Felhasználónév", "wrongArgNum": "A megadott argumentumok száma nem megfelelő", diff --git a/assets/translations/id.json b/assets/translations/id.json index 904b4e2b..c865035a 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -24,7 +24,7 @@ "color": "Warna", "standard": "Standar", "custom": "Kustom", - "useMaterialYou": "Gunakan Material You", + "useMaterialYou": "Gunakan warna Material You", "githubStarredRepos": "Repositori berbintang GitHub", "uname": "Nama pengguna", "wrongArgNum": "Salah memberikan jumlah argumen", diff --git a/assets/translations/it.json b/assets/translations/it.json index 0bd48bae..34f06fd9 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -24,7 +24,7 @@ "color": "Colore", "standard": "Standard", "custom": "Personalizzato", - "useMaterialYou": "Utilizzate il materiale che avete a disposizione", + "useMaterialYou": "Utilizzate i colori Material You", "githubStarredRepos": "repository stellati da GitHub", "uname": "Nome utente", "wrongArgNum": "Numero di argomenti forniti errato", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 79ad9337..c4250a79 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -24,7 +24,7 @@ "color": "カラー", "standard": "スタンダード", "custom": "カスタム", - "useMaterialYou": "Material Youを使用する", + "useMaterialYou": "Material Youのカラーを使用", "githubStarredRepos": "GitHubでスターしたリポジトリ", "uname": "ユーザー名", "wrongArgNum": "引数の数が間違っています", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 97f0a800..b59099cc 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -24,7 +24,7 @@ "color": "색상", "standard": "표준", "custom": "사용자 정의", - "useMaterialYou": "Material You 사용", + "useMaterialYou": "Material You 색상 사용", "githubStarredRepos": "GitHub 즐겨찾기 저장소", "uname": "사용자 이름", "wrongArgNum": "잘못된 인수 수 제공", diff --git a/assets/translations/ml.json b/assets/translations/ml.json index ff53e1d7..bd0eacce 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -24,7 +24,7 @@ "color": "നിറം", "standard": "സാധാരണ", "custom": "ഇഷ്‌ടാനുസൃതം", - "useMaterialYou": "മെറ്റീരിയൽ യൂ ഉപയോഗിക്കുക", + "useMaterialYou": "Material You നിറങ്ങൾ ഉപയോഗിക്കുക", "githubStarredRepos": "GitHub സ്റ്റാർ ചെയ്ത റെപ്പോസിറ്ററികൾ", "uname": "ഉപയോക്തൃനാമം", "wrongArgNum": "തെറ്റായ എണ്ണം ആർഗ്യുമെന്റുകൾ നൽകി", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index f6acc7d0..ac9a19fb 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -24,7 +24,7 @@ "color": "Kleur", "standard": "Standaard", "custom": "Aangepast", - "useMaterialYou": "Material You gebruiken", + "useMaterialYou": "Material You kleuren gebruiken", "githubStarredRepos": "GitHub-repo's met ster", "uname": "Gebruikersnaam", "wrongArgNum": "Incorrect aantal argumenten.", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 69c73f16..b397dddd 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -24,7 +24,7 @@ "color": "Kolor", "standard": "Domyślny", "custom": "Własny", - "useMaterialYou": "Material You", + "useMaterialYou": "Użyj kolorów Material You", "githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką", "uname": "Nazwa użytkownika", "wrongArgNum": "Nieprawidłowa liczba podanych argumentów", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index 91b7ff55..7e11891a 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Padrão", "custom": "Personalizado", - "useMaterialYou": "Usar Material You", + "useMaterialYou": "Usar cores Material You", "githubStarredRepos": "Repositórios com estrela do GitHub", "uname": "Nome de usuário", "wrongArgNum": "Número errado de argumentos fornecidos", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index eeceda1d..a54a1ad2 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Padrão", "custom": "Personalizado", - "useMaterialYou": "Utilizar o material que", + "useMaterialYou": "Utilizar cores Material You", "githubStarredRepos": "repositórios favoritos no GitHub", "uname": "Nome de usuário", "wrongArgNum": "Número de argumentos errado", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 210a8782..79c2dea5 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -24,7 +24,7 @@ "color": "Цвет", "standard": "Стандартный", "custom": "Индивидуальный", - "useMaterialYou": "Использовать Material You", + "useMaterialYou": "Использовать цвета Material You", "githubStarredRepos": "Избранные репозитории GitHub", "uname": "Имя пользователя", "wrongArgNum": "Неправильное количество предоставленных аргументов", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index 0627295b..9b4e1756 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -24,7 +24,7 @@ "color": "Färg", "standard": "Standard", "custom": "Anpassad", - "useMaterialYou": "Använd material Du", + "useMaterialYou": "Använd Material You-färger", "githubStarredRepos": "GitHub Stjärnmärkta Förråd", "uname": "Användarnamn", "wrongArgNum": "Fel antal argument har angetts", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index bfc50d1d..7b6d7ed0 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -24,7 +24,7 @@ "color": "Renk", "standard": "Standart", "custom": "Özel", - "useMaterialYou": "Material You kullan", + "useMaterialYou": "Material You renklerini kullan", "githubStarredRepos": "GitHub yıldızlı depolar", "uname": "Kullanıcı adı", "wrongArgNum": "Yanlış sayıda argüman sağlandı", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 6061616e..19caaba3 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -24,7 +24,7 @@ "color": "Колір", "standard": "Стандартний", "custom": "Нестандартний", - "useMaterialYou": "Використовуйте матеріал, який ви", + "useMaterialYou": "Використовуйте кольори Material You", "githubStarredRepos": "Відзначені репозиторії GitHub", "uname": "Ім'я користувача", "wrongArgNum": "Надано неправильну кількість аргументів", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 294dc839..c090d7c8 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -24,7 +24,7 @@ "color": "Màu sắc", "standard": "Mặc định", "custom": "Tùy chỉnh", - "useMaterialYou": "Sử dụng Material You", + "useMaterialYou": "Sử dụng màu Material You", "githubStarredRepos": "Kho lưu trữ có gắn dấu sao GitHub", "uname": "Tên người dùng", "wrongArgNum": "Số lượng đối số được cung cấp sai", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index cb2fba68..528596f7 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -24,7 +24,7 @@ "color": "顏色", "standard": "標準", "custom": "自訂", - "useMaterialYou": "使用 Material You", + "useMaterialYou": "使用 Material You 顏色", "githubStarredRepos": "GitHub 打星星的專案", "uname": "使用者名稱", "wrongArgNum": "提供的參數數量錯誤", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index d9d297ca..72fda44e 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -24,7 +24,7 @@ "color": "配色", "standard": "标准", "custom": "自定义", - "useMaterialYou": "使用 Material You", + "useMaterialYou": "使用 Material You 配色", "githubStarredRepos": "已星标的 GitHub 仓库", "uname": "用户名", "wrongArgNum": "参数数量错误", From ad6f74b4c90d3d2d362fec6ee915334a3aa4ef27 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:28:22 +0200 Subject: [PATCH 07/37] Fix --- lib/pages/apps.dart | 2 +- lib/pages/import_export.dart | 24 ++++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index bc612f45..5a860d9c 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1001,7 +1001,7 @@ class AppsPageState extends State { ], ), ), - ); + ));); } getCategoryCollapsibleTile(int index) { diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 5dcae512..57688087 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -402,7 +402,7 @@ class _ImportExportPageState extends State { runUpdatiumExport(pickOnly: true); }, icon: const Icon(Icons.folder_open), - label: Text( + child: Text( tr('pickExportDir'), textAlign: TextAlign.center, ), @@ -416,7 +416,7 @@ class _ImportExportPageState extends State { ? null : runUpdatiumExport, icon: const Icon(Icons.upload_file), - label: Text( + child: Text( tr('updatiumExport'), textAlign: TextAlign.center, ), @@ -433,7 +433,7 @@ class _ImportExportPageState extends State { ? null : runUpdatiumImport, icon: const Icon(Icons.download), - label: Text( + child: Text( tr('updatiumImport'), textAlign: TextAlign.center, ), @@ -544,7 +544,7 @@ class _ImportExportPageState extends State { runSourceSearch(searchSource[0]); } }, - label: Text( + child: Text( tr( 'searchX', args: [lowerCaseIfEnglish(tr('source'))], @@ -558,13 +558,13 @@ class _ImportExportPageState extends State { FilledButton.icon( onPressed: importInProgress ? null : urlListImport, icon: const Icon(Icons.list_alt), - label: Text(tr('importFromURLList')), + child: Text(tr('importFromURLList')), ), const SizedBox(height: 8), FilledButton.icon( onPressed: importInProgress ? null : runUrlImport, icon: const Icon(Icons.link), - label: Text(tr('importFromURLsInFile')), + child: Text(tr('importFromURLsInFile')), ), ], ), @@ -580,7 +580,7 @@ class _ImportExportPageState extends State { runMassSourceImport(source); }, icon: const Icon(Icons.cloud_download), - label: Text(tr('importX', args: [source.name])), + child: Text(tr('importX', args: [source.name])), ), ], ), @@ -671,7 +671,7 @@ class _ImportErrorDialogState extends State { Navigator.of(context).pop(null); }, icon: const Icon(Icons.close), - label: Text(tr('ok')), + child: Text(tr('ok')), ), ], ); @@ -767,7 +767,7 @@ class _SelectionModalState extends State { entrySelections.updateAll((key, value) => true); }); }, - label: Text(tr('selectAll')), + child: Text(tr('selectAll')), ) : TextButton( style: const ButtonStyle(visualDensity: VisualDensity.compact), @@ -776,7 +776,7 @@ class _SelectionModalState extends State { entrySelections.updateAll((key, value) => false); }); }, - label: Text(tr('deselectX', args: [tr('all')])), + child: Text(tr('deselectX', args: [tr('all')])), ); } @@ -954,7 +954,7 @@ class _SelectionModalState extends State { onPressed: () { Navigator.of(context).pop(); }, - label: Text(tr('cancel')), + child: Text(tr('cancel')), ), AppTextButton( onPressed: entrySelections.values.where((b) => b).isEmpty @@ -967,7 +967,7 @@ class _SelectionModalState extends State { .toList(), ); }, - label: Text( + child: Text( widget.onlyOneSelectionAllowed ? tr('pick') : tr( From 0bef50aa7583481eb1ef26f742ccb090099ab1bc Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 21:34:55 +0200 Subject: [PATCH 08/37] Update lib/pages/apps.dart Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- lib/pages/apps.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 5a860d9c..4c95c01a 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1001,7 +1001,7 @@ class AppsPageState extends State { ], ), ), - ));); + )); } getCategoryCollapsibleTile(int index) { From 6922d46d85f6ff196e78be7d09bccd10f02cf01e Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 21:35:13 +0200 Subject: [PATCH 09/37] Update lib/pages/import_export.dart Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- lib/pages/import_export.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 57688087..7d23cd72 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -402,7 +402,7 @@ class _ImportExportPageState extends State { runUpdatiumExport(pickOnly: true); }, icon: const Icon(Icons.folder_open), - child: Text( + label: Text( tr('pickExportDir'), textAlign: TextAlign.center, ), From 0f003b4337ed1723afe4c6410c13d7e4ca2eb9ce Mon Sep 17 00:00:00 2001 From: omeritzics <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 19:37:02 +0000 Subject: [PATCH 10/37] style: auto-fix linting and formatting issues --- lib/components/app_button.dart | 10 +- lib/components/cached_app_icon.dart | 15 +- lib/pages/add_app.dart | 26 +- lib/pages/apps.dart | 505 +++++++++++----------- lib/pages/home.dart | 1 - lib/pages/import_export.dart | 7 +- lib/pages/settings.dart | 22 +- lib/providers/apps_provider.dart | 52 +-- lib/providers/notifications_provider.dart | 2 +- pubspec.lock | 16 +- 10 files changed, 334 insertions(+), 322 deletions(-) diff --git a/lib/components/app_button.dart b/lib/components/app_button.dart index 236e81d3..b92c8992 100644 --- a/lib/components/app_button.dart +++ b/lib/components/app_button.dart @@ -61,17 +61,11 @@ class _AppTextButtonState extends State ); _scaleAnimation = Tween(begin: 1.0, end: 0.95).animate( - CurvedAnimation( - parent: _animationController, - curve: Curves.easeOutCubic, - ), + CurvedAnimation(parent: _animationController, curve: Curves.easeOutCubic), ); _opacityAnimation = Tween(begin: 1.0, end: 0.8).animate( - CurvedAnimation( - parent: _animationController, - curve: Curves.easeInOut, - ), + CurvedAnimation(parent: _animationController, curve: Curves.easeInOut), ); } diff --git a/lib/components/cached_app_icon.dart b/lib/components/cached_app_icon.dart index 50c9eab1..dc2b9edc 100644 --- a/lib/components/cached_app_icon.dart +++ b/lib/components/cached_app_icon.dart @@ -58,10 +58,7 @@ class _CachedAppIconState extends State vsync: this, ); _shimmerAnimation = Tween(begin: -2.0, end: 2.0).animate( - CurvedAnimation( - parent: _shimmerController, - curve: Curves.easeInOut, - ), + CurvedAnimation(parent: _shimmerController, curve: Curves.easeInOut), ); // Scale animation for interactions @@ -70,10 +67,7 @@ class _CachedAppIconState extends State vsync: this, ); _scaleAnimation = Tween(begin: 1.0, end: 0.9).animate( - CurvedAnimation( - parent: _scaleController, - curve: Curves.easeOutCubic, - ), + CurvedAnimation(parent: _scaleController, curve: Curves.easeOutCubic), ); // Rotation animation for loading/error states @@ -82,10 +76,7 @@ class _CachedAppIconState extends State vsync: this, ); _rotationAnimation = Tween(begin: 0.0, end: 0.1).animate( - CurvedAnimation( - parent: _rotationController, - curve: Curves.easeInOut, - ), + CurvedAnimation(parent: _rotationController, curve: Curves.easeInOut), ); // Start loading the icon diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 0092db55..2f424782 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -2,7 +2,6 @@ import 'package:animations/animations.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:updatium/components/app_button.dart'; import 'package:updatium/components/generated_form.dart'; import 'package:updatium/components/generated_form_modal.dart'; import 'package:updatium/custom_errors.dart'; @@ -725,7 +724,10 @@ class AddAppPageState extends State { automaticallyImplyLeading: false, expandedHeight: MediaQuery.of(context).size.height * 0.15, flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), + titlePadding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 20, + ), title: Text( tr('addApp'), style: TextStyle( @@ -769,15 +771,17 @@ class AddAppPageState extends State { Navigator.push( context, PageRouteBuilder( - pageBuilder: (context, animation, secondaryAnimation) => const ImportExportPage(), - transitionsBuilder: (context, animation, secondaryAnimation, child) { - return SharedAxisTransition( - animation: animation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.vertical, - child: child, - ); - }, + pageBuilder: (context, animation, secondaryAnimation) => + const ImportExportPage(), + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + return SharedAxisTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + transitionType: SharedAxisTransitionType.vertical, + child: child, + ); + }, ), ); }, diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 4c95c01a..8e9669dc 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1,6 +1,5 @@ import 'package:animations/animations.dart'; import 'dart:convert'; -import 'dart:math' as math; import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; @@ -72,33 +71,33 @@ void showChangeLogDialog( child: SizedBox( width: MediaQuery.of(context).size.width * 0.9, child: Markdown( - styleSheet: MarkdownStyleSheet( - blockquoteDecoration: BoxDecoration( - color: Theme.of(context).cardColor, + styleSheet: MarkdownStyleSheet( + blockquoteDecoration: BoxDecoration( + color: Theme.of(context).cardColor, + ), + ), + data: changeLog, + onTapLink: (text, href, title) { + if (href != null) { + launchUrlString( + href.startsWith('http://') || + href.startsWith('https://') + ? href + : '${Uri.parse(app.url).origin}/$href', + mode: LaunchMode.externalApplication, + ); + } + }, + extensionSet: md.ExtensionSet( + md.ExtensionSet.gitHubFlavored.blockSyntaxes, + [ + md.EmojiSyntax(), + ...md.ExtensionSet.gitHubFlavored.inlineSyntaxes, + ], ), - ), - data: changeLog, - onTapLink: (text, href, title) { - if (href != null) { - launchUrlString( - href.startsWith('http://') || - href.startsWith('https://') - ? href - : '${Uri.parse(app.url).origin}/$href', - mode: LaunchMode.externalApplication, - ); - } - }, - extensionSet: md.ExtensionSet( - md.ExtensionSet.gitHubFlavored.blockSyntaxes, - [ - md.EmojiSyntax(), - ...md.ExtensionSet.gitHubFlavored.inlineSyntaxes, - ], ), ), - ), - ) + ) : Text(changeLog), ], singleNullReturnButton: tr('ok'), @@ -169,7 +168,6 @@ class AppsPageState extends State { } } - late final ScrollController scrollController = ScrollController(); var sourceProvider = SourceProvider(); @@ -430,8 +428,8 @@ class AppsPageState extends State { Text( appsProvider.apps.isEmpty ? appsProvider.loadingApps - ? tr('pleaseWait') - : tr('noApps') + ? tr('pleaseWait') + : tr('noApps') : tr('noAppsForFilter'), style: Theme.of(context).textTheme.headlineMedium, textAlign: TextAlign.center, @@ -447,11 +445,12 @@ class AppsPageState extends State { // Hide subtext if translation key is not found (returns the key itself) return subtext == 'noAppsSubtext' ? '' : subtext; }(), - style: Theme.of(context).textTheme.bodyMedium?.copyWith( - color: Theme.of( - context, - ).colorScheme.onSurface.withOpacity(0.7), - ), + style: Theme.of(context).textTheme.bodyMedium + ?.copyWith( + color: Theme.of( + context, + ).colorScheme.onSurface.withOpacity(0.7), + ), textAlign: TextAlign.center, maxLines: 5, overflow: TextOverflow.ellipsis, @@ -605,7 +604,11 @@ class AppsPageState extends State { action = Row( mainAxisSize: MainAxisSize.min, children: [ - Icon(Icons.check_circle, color: Colors.green[600], size: MediaQuery.of(context).size.width * 0.05), + Icon( + Icons.check_circle, + color: Colors.green[600], + size: MediaQuery.of(context).size.width * 0.05, + ), SizedBox(width: MediaQuery.of(context).size.width * 0.015), Text(tr('updated'), style: TextStyle(color: Colors.green[600])), ], @@ -659,15 +662,17 @@ class AppsPageState extends State { Navigator.push( context, PageRouteBuilder( - pageBuilder: (context, animation, secondaryAnimation) => AppPage(appId: listedApps[index].app.id), - transitionsBuilder: (context, animation, secondaryAnimation, child) { - return SharedAxisTransition( - animation: animation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.horizontal, - child: child, - ); - }, + pageBuilder: (context, animation, secondaryAnimation) => + AppPage(appId: listedApps[index].app.id), + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + return SharedAxisTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + transitionType: SharedAxisTransitionType.horizontal, + child: child, + ); + }, ), ); } @@ -688,7 +693,9 @@ class AppsPageState extends State { borderRadius: BorderRadius.circular(16), ), tileColor: Theme.of(context).colorScheme.surface, - selectedTileColor: Theme.of(context).colorScheme.surfaceContainerHighest, + selectedTileColor: Theme.of( + context, + ).colorScheme.surfaceContainerHighest, leading: SizedBox( height: MediaQuery.of(context).size.width * 0.1, width: MediaQuery.of(context).size.width * 0.1, @@ -717,23 +724,23 @@ class AppsPageState extends State { ), trailing: listedApps[index].downloadProgress != null ? SizedBox( - child: Text( - listedApps[index].downloadProgress! >= 0 - ? tr( - 'percentProgress', - args: [ - listedApps[index].downloadProgress! - .toInt() - .toString(), - ], - ) - : tr('installing'), - textAlign: (listedApps[index].downloadProgress! >= 0) - ? TextAlign.start - : TextAlign.end, - ), - ) - : trailingRow, + child: Text( + listedApps[index].downloadProgress! >= 0 + ? tr( + 'percentProgress', + args: [ + listedApps[index].downloadProgress! + .toInt() + .toString(), + ], + ) + : tr('installing'), + textAlign: (listedApps[index].downloadProgress! >= 0) + ? TextAlign.start + : TextAlign.end, + ), + ) + : trailingRow, ), ), ); @@ -782,15 +789,17 @@ class AppsPageState extends State { Navigator.push( context, PageRouteBuilder( - pageBuilder: (context, animation, secondaryAnimation) => AppPage(appId: listedApps[index].app.id), - transitionsBuilder: (context, animation, secondaryAnimation, child) { - return SharedAxisTransition( - animation: animation, - secondaryAnimation: secondaryAnimation, - transitionType: SharedAxisTransitionType.horizontal, - child: child, - ); - }, + pageBuilder: (context, animation, secondaryAnimation) => + AppPage(appId: listedApps[index].app.id), + transitionsBuilder: + (context, animation, secondaryAnimation, child) { + return SharedAxisTransition( + animation: animation, + secondaryAnimation: secondaryAnimation, + transitionType: SharedAxisTransitionType.horizontal, + child: child, + ); + }, ), ); } @@ -816,192 +825,196 @@ class AppsPageState extends State { ], ), ), - child: Stack( - alignment: Alignment.center, - children: [ - if (selectedAppIds.contains(listedApps[index].app.id)) - Positioned.fill( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - color: Theme.of( - context, - ).colorScheme.primaryContainer, - ), - child: Icon( - Icons.check_circle, - color: Theme.of(context).colorScheme.onPrimaryContainer, - size: MediaQuery.of(context).size.width * 0.08, + child: Stack( + alignment: Alignment.center, + children: [ + if (selectedAppIds.contains(listedApps[index].app.id)) + Positioned.fill( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Theme.of(context).colorScheme.primaryContainer, + ), + child: Icon( + Icons.check_circle, + color: Theme.of(context).colorScheme.onPrimaryContainer, + size: MediaQuery.of(context).size.width * 0.08, + ), ), ), - ), - if (listedApps[index].app.pinned) - Align( - alignment: Alignment.topLeft, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Icon( - Icons.push_pin, - size: MediaQuery.of(context).size.width * 0.04, - color: Theme.of(context).colorScheme.primary, + if (listedApps[index].app.pinned) + Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Icon( + Icons.push_pin, + size: MediaQuery.of(context).size.width * 0.04, + color: Theme.of(context).colorScheme.primary, + ), ), ), - ), - if (hasUpdate) - Align( - alignment: Alignment.topRight, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Icon( - Icons.circle, - size: MediaQuery.of(context).size.width * 0.025, - color: Theme.of(context).colorScheme.primary, + if (hasUpdate) + Align( + alignment: Alignment.topRight, + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Icon( + Icons.circle, + size: MediaQuery.of(context).size.width * 0.025, + color: Theme.of(context).colorScheme.primary, + ), ), ), - ), - Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - mainAxisSize: MainAxisSize.max, - children: [ - const SizedBox(height: 16), - SizedBox( - height: MediaQuery.of(context).size.width * 0.15, - width: MediaQuery.of(context).size.width * 0.15, - child: FittedBox( - fit: BoxFit.contain, - child: getAppIcon(index), + Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + const SizedBox(height: 16), + SizedBox( + height: MediaQuery.of(context).size.width * 0.15, + width: MediaQuery.of(context).size.width * 0.15, + child: FittedBox( + fit: BoxFit.contain, + child: getAppIcon(index), + ), ), - ), - const SizedBox(height: 12), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), - child: Flexible( - child: Text( - listedApps[index].name, - textAlign: TextAlign.center, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: Theme.of(context).textTheme.titleSmall?.copyWith( - fontWeight: FontWeight.w600, - color: Theme.of(context).colorScheme.onSurface, + const SizedBox(height: 12), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Flexible( + child: Text( + listedApps[index].name, + textAlign: TextAlign.center, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.titleSmall + ?.copyWith( + fontWeight: FontWeight.w600, + color: Theme.of(context).colorScheme.onSurface, + ), ), ), ), - ), - const SizedBox(height: 8), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12.0), - child: Flexible( - child: Text( - listedApps[index].author, - textAlign: TextAlign.center, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: Theme.of( - context, - ).textTheme.bodySmall?.copyWith( - color: Theme.of(context).colorScheme.onSurfaceVariant, - fontSize: 11, + const SizedBox(height: 8), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: Flexible( + child: Text( + listedApps[index].author, + textAlign: TextAlign.center, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: Theme.of(context).textTheme.bodySmall + ?.copyWith( + color: Theme.of( + context, + ).colorScheme.onSurfaceVariant, + fontSize: 11, + ), ), ), ), - ), - const SizedBox(height: 12), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 12.0), - child: Builder( - builder: (ctx) { - final ai = listedApps[index]; - final app = ai.app; - final isInstalled = app.installedVersion != null; - final hasUpdateLocal = - isInstalled && - app.installedVersion != app.latestVersion; - final isTrackOnly = - app.additionalSettings['trackOnly'] == true; - - if (isTrackOnly) { - return const SizedBox.shrink(); - } - - if (!isInstalled) { - return FilledButton.tonal( - onPressed: appsProvider.areDownloadsRunning() - ? null - : () { - appsProvider - .downloadAndInstallLatestApps([ - app.id, - ], globalNavigatorKey.currentContext) - .catchError((e) { - showError(e, context); - return []; - }); - }, - child: Text(tr('install')), - ); - } - - if (hasUpdateLocal) { - return FilledButton.tonal( - onPressed: appsProvider.areDownloadsRunning() - ? null - : () { - appsProvider - .downloadAndInstallLatestApps([ - app.id, - ], globalNavigatorKey.currentContext) - .catchError((e) { - showError(e, context); - return []; - }); - }, - child: Text(tr('update')), + const SizedBox(height: 12), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 12.0), + child: Builder( + builder: (ctx) { + final ai = listedApps[index]; + final app = ai.app; + final isInstalled = app.installedVersion != null; + final hasUpdateLocal = + isInstalled && + app.installedVersion != app.latestVersion; + final isTrackOnly = + app.additionalSettings['trackOnly'] == true; + + if (isTrackOnly) { + return const SizedBox.shrink(); + } + + if (!isInstalled) { + return FilledButton.tonal( + onPressed: appsProvider.areDownloadsRunning() + ? null + : () { + appsProvider + .downloadAndInstallLatestApps([ + app.id, + ], globalNavigatorKey.currentContext) + .catchError((e) { + showError(e, context); + return []; + }); + }, + child: Text(tr('install')), + ); + } + + if (hasUpdateLocal) { + return FilledButton.tonal( + onPressed: appsProvider.areDownloadsRunning() + ? null + : () { + appsProvider + .downloadAndInstallLatestApps([ + app.id, + ], globalNavigatorKey.currentContext) + .catchError((e) { + showError(e, context); + return []; + }); + }, + child: Text(tr('update')), + ); + } + + return Row( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Icon( + Icons.check_circle, + color: Colors.green[600], + size: MediaQuery.of(context).size.width * 0.04, + ), + SizedBox( + width: + MediaQuery.of(context).size.width * 0.015, + ), + Text( + tr('updated'), + style: TextStyle(color: Colors.green[600]), + ), + ], ); - } - - return Row( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon( - Icons.check_circle, - color: Colors.green[600], - size: MediaQuery.of(context).size.width * 0.04, - ), - SizedBox(width: MediaQuery.of(context).size.width * 0.015), - Text( - tr('updated'), - style: TextStyle(color: Colors.green[600]), - ), - ], - ); - }, - ), - ), - const SizedBox(height: 16), - ], - ), - if (listedApps[index].downloadProgress != null) - Positioned.fill( - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - color: Colors.black45, + }, + ), ), - child: Center( - child: CircularProgressIndicator( - value: listedApps[index].downloadProgress! >= 0 - ? listedApps[index].downloadProgress! / 100 - : null, + const SizedBox(height: 16), + ], + ), + if (listedApps[index].downloadProgress != null) + Positioned.fill( + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + color: Colors.black45, + ), + child: Center( + child: CircularProgressIndicator( + value: listedApps[index].downloadProgress! >= 0 + ? listedApps[index].downloadProgress! / 100 + : null, + ), ), ), ), - ), - ], + ], + ), ), ), - )); + ); } getCategoryCollapsibleTile(int index) { @@ -1037,13 +1050,14 @@ class AppsPageState extends State { padding: EdgeInsets.zero, shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), - gridDelegate: - SliverGridDelegateWithMaxCrossAxisExtent( - maxCrossAxisExtent: MediaQuery.of(context).size.width * 0.5, - childAspectRatio: 0.6, - crossAxisSpacing: MediaQuery.of(context).size.width * 0.04, - mainAxisSpacing: MediaQuery.of(context).size.width * 0.04, - ), + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( + maxCrossAxisExtent: + MediaQuery.of(context).size.width * 0.5, + childAspectRatio: 0.6, + crossAxisSpacing: + MediaQuery.of(context).size.width * 0.04, + mainAxisSpacing: MediaQuery.of(context).size.width * 0.04, + ), itemCount: listedApps .asMap() .entries @@ -1686,7 +1700,10 @@ class AppsPageState extends State { automaticallyImplyLeading: false, expandedHeight: MediaQuery.of(context).size.height * 0.15, flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), + titlePadding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 20, + ), title: Text( tr('appsString'), style: TextStyle( diff --git a/lib/pages/home.dart b/lib/pages/home.dart index a63327d4..96996986 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -10,7 +10,6 @@ import 'package:updatium/components/generated_form_modal.dart'; import 'package:updatium/custom_errors.dart'; import 'package:updatium/pages/add_app.dart'; import 'package:updatium/pages/apps.dart'; -import 'package:updatium/pages/import_export.dart'; import 'package:updatium/pages/security_disclaimer.dart'; import 'package:updatium/pages/settings.dart'; import 'package:updatium/providers/apps_provider.dart'; diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 7d23cd72..5b46ca33 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -372,7 +372,10 @@ class _ImportExportPageState extends State { pinned: true, expandedHeight: MediaQuery.of(context).size.height * 0.15, flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), + titlePadding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 20, + ), title: Text( tr('importExport'), style: TextStyle( @@ -654,7 +657,7 @@ class _ImportErrorDialogState extends State { const SizedBox(height: 16), Text(e[0], style: Theme.of(context).textTheme.titleSmall), Text( - e[1], + e[1], style: Theme.of(context).textTheme.bodySmall?.copyWith( fontStyle: FontStyle.italic, color: Theme.of(context).colorScheme.onSurfaceVariant, diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index fa7759bc..43bf4781 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -178,13 +178,8 @@ class _SettingsPageState extends State { } var colorPicker = ListTile( - contentPadding: const EdgeInsets.symmetric( - horizontal: 20, - vertical: 8, - ), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(16), - ), + contentPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 8), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(16)), tileColor: Theme.of(context).colorScheme.surface, title: Text( tr('selectX', args: [tr('color').toLowerCase()]), @@ -201,7 +196,9 @@ class _SettingsPageState extends State { width: MediaQuery.of(context).size.width * 0.1, height: MediaQuery.of(context).size.width * 0.1, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(MediaQuery.of(context).size.width * 0.05), + borderRadius: BorderRadius.circular( + MediaQuery.of(context).size.width * 0.05, + ), color: settingsProvider.themeColor, border: Border.all( color: Theme.of(context).colorScheme.outline, @@ -211,7 +208,9 @@ class _SettingsPageState extends State { child: Material( color: Colors.transparent, child: InkWell( - borderRadius: BorderRadius.circular(MediaQuery.of(context).size.width * 0.05), + borderRadius: BorderRadius.circular( + MediaQuery.of(context).size.width * 0.05, + ), onTap: () async { final Color colorBeforeDialog = settingsProvider.themeColor; if (!(await colorPickerDialog())) { @@ -402,7 +401,10 @@ class _SettingsPageState extends State { automaticallyImplyLeading: false, expandedHeight: MediaQuery.of(context).size.height * 0.15, flexibleSpace: FlexibleSpaceBar( - titlePadding: const EdgeInsets.symmetric(horizontal: 24, vertical: 20), + titlePadding: const EdgeInsets.symmetric( + horizontal: 24, + vertical: 20, + ), title: Text( tr('settings'), style: TextStyle( diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index e5ba28b8..34deef93 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -2406,31 +2406,33 @@ class AppsProvider with ChangeNotifier { await saveApps([app], onlyIfExists: false); } } - List> errors = errorsMap.keys - .map((e) { - // Log detailed error internally for debugging - print('Import error for $e: ${errorsMap[e]}'); - - // Return user-friendly error message - String userMessage; - final errorDetail = errorsMap[e].toString(); - - // Categorize errors and provide user-friendly messages - if (errorDetail.contains('timeout') || errorDetail.contains('connection')) { - userMessage = tr('networkError'); - } else if (errorDetail.contains('404') || errorDetail.contains('not found')) { - userMessage = tr('appNotFound'); - } else if (errorDetail.contains('parse') || errorDetail.contains('format')) { - userMessage = tr('invalidUrlFormat'); - } else if (errorDetail.contains('permission') || errorDetail.contains('access')) { - userMessage = tr('accessDenied'); - } else { - userMessage = tr('importFailed'); - } - - return [e, userMessage]; - }) - .toList(); + List> errors = errorsMap.keys.map((e) { + // Log detailed error internally for debugging + print('Import error for $e: ${errorsMap[e]}'); + + // Return user-friendly error message + String userMessage; + final errorDetail = errorsMap[e].toString(); + + // Categorize errors and provide user-friendly messages + if (errorDetail.contains('timeout') || + errorDetail.contains('connection')) { + userMessage = tr('networkError'); + } else if (errorDetail.contains('404') || + errorDetail.contains('not found')) { + userMessage = tr('appNotFound'); + } else if (errorDetail.contains('parse') || + errorDetail.contains('format')) { + userMessage = tr('invalidUrlFormat'); + } else if (errorDetail.contains('permission') || + errorDetail.contains('access')) { + userMessage = tr('accessDenied'); + } else { + userMessage = tr('importFailed'); + } + + return [e, userMessage]; + }).toList(); return errors; } } diff --git a/lib/providers/notifications_provider.dart b/lib/providers/notifications_provider.dart index 3a911e47..8ffbcff9 100644 --- a/lib/providers/notifications_provider.dart +++ b/lib/providers/notifications_provider.dart @@ -236,7 +236,7 @@ class NotificationsProvider { var content = (payload ?? '\n\n').split('\n').sublist(1).join('\n'); globalNavigatorKey.currentState?.push( PageRouteBuilder( - pageBuilder: (context, _, __) => AlertDialog( + pageBuilder: (context, _, _) => AlertDialog( title: Text(title), content: Text(content), actions: [ diff --git a/pubspec.lock b/pubspec.lock index 3f6e6b4a..3c2c8a15 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -136,10 +136,10 @@ packages: dependency: transitive description: name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 + sha256: faf38497bda5ead2a8c7615f4f7939df04333478bf32e4173fcb06d428b5716b url: "https://pub.dev" source: hosted - version: "1.4.0" + version: "1.4.1" clock: dependency: transitive description: @@ -652,18 +652,18 @@ packages: dependency: transitive description: name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 + sha256: "12956d0ad8390bbcc63ca2e1469c0619946ccb52809807067a7020d57e647aa6" url: "https://pub.dev" source: hosted - version: "0.12.17" + version: "0.12.18" material_color_utilities: dependency: "direct main" description: name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec + sha256: "9c337007e82b1889149c82ed242ed1cb24a66044e30979c44912381e9be4c48b" url: "https://pub.dev" source: hosted - version: "0.11.1" + version: "0.13.0" meta: dependency: transitive description: @@ -1075,10 +1075,10 @@ packages: dependency: transitive description: name: test_api - sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55 + sha256: "19a78f63e83d3a61f00826d09bc2f60e191bf3504183c001262be6ac75589fb8" url: "https://pub.dev" source: hosted - version: "0.7.7" + version: "0.7.8" timezone: dependency: transitive description: From 9c89d8c20ac8ddf52e4b741c6693c7b851bab85f Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:40:34 +0200 Subject: [PATCH 11/37] Update --- android/app/build.gradle.kts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 166236d1..3a1fbc67 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -51,6 +51,14 @@ android { targetSdk = flutter.targetSdkVersion versionCode = flutterVersionCode.toInt() versionName = flutterVersionName + + // Enable split APKs for different ABIs + ndk { + abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86_64") + } + + // Configure universal APK + universalApk = true } flavorDimensions += "default" @@ -113,6 +121,16 @@ android { } } +// Configure split APK generation +splits { + abi { + enable = true + reset() + include("armeabi-v7a", "arm64-v8a", "x86_64") + universalApk = true + } +} + val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { From 6a413407e9ddd39a1a82c568adc2f42d86d581cd Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:51:42 +0200 Subject: [PATCH 12/37] Fix --- android/app/build.gradle.kts | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 3a1fbc67..08438f6d 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -56,9 +56,6 @@ android { ndk { abiFilters += listOf("armeabi-v7a", "arm64-v8a", "x86_64") } - - // Configure universal APK - universalApk = true } flavorDimensions += "default" @@ -119,15 +116,15 @@ android { versionNameSuffix = "-debug" } } -} - -// Configure split APK generation -splits { - abi { - enable = true - reset() - include("armeabi-v7a", "arm64-v8a", "x86_64") - universalApk = true + + // Configure split APK generation + splits { + abi { + enable = true + reset() + include("armeabi-v7a", "arm64-v8a", "x86_64") + universalApk = true + } } } @@ -136,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From 9e5f7599faae49c6c50b23fa6ff85ddd42830730 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 22:05:59 +0200 Subject: [PATCH 13/37] Fix #4 --- android/app/build.gradle.kts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 08438f6d..2a098bd2 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -39,8 +39,8 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + compilerOptions { + jvmTarget.set(JavaVersion.VERSION_17.toString()) } defaultConfig { @@ -120,10 +120,10 @@ android { // Configure split APK generation splits { abi { - enable = true + isEnable = true reset() include("armeabi-v7a", "arm64-v8a", "x86_64") - universalApk = true + isUniversalApk = true } } } @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType.toString() == "ABI" }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From 35cadd86674f3ab41b1d1de14eaaa41478866161 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 22:16:58 +0200 Subject: [PATCH 14/37] Fix #5 --- android/app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 2a098bd2..bfcbd2c1 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -40,7 +40,7 @@ android { } compilerOptions { - jvmTarget.set(JavaVersion.VERSION_17.toString()) + jvmTarget = JavaVersion.VERSION_17.toString() } defaultConfig { @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType.toString() == "ABI" }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == FilterType.ABI }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From 65538d88c0fa569b2e6a01b4dbae1859e699b3f2 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:21:26 +0200 Subject: [PATCH 15/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index bfcbd2c1..52d88d1c 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == FilterType.ABI }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From 0b3565634304f59ff88115fc7ec6a89318b355e2 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:25:51 +0200 Subject: [PATCH 16/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 52d88d1c..e95a4c85 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == com.android.build.api.variant.FilterConfiguration.FilterType.ABI }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From c18f144b085a73a98febd68de1d098c1231d299e Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 22:42:57 +0200 Subject: [PATCH 17/37] Patches --- lib/examples/icon_cache_example.dart | 1 + lib/examples/icon_prefetcher_example.dart | 11 ++++++----- lib/examples/refactored_icon_pipeline_example.dart | 2 +- lib/examples/updated_app_catalogue_example.dart | 3 ++- lib/pages/import_export.dart | 2 +- lib/services/enhanced_icon_prefetcher.dart | 13 ++++++++++--- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/examples/icon_cache_example.dart b/lib/examples/icon_cache_example.dart index a0f39292..eb5e09ec 100644 --- a/lib/examples/icon_cache_example.dart +++ b/lib/examples/icon_cache_example.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:updatium/components/app_button.dart'; import 'package:updatium/providers/apps_provider.dart'; import 'package:updatium/providers/logs_provider.dart'; diff --git a/lib/examples/icon_prefetcher_example.dart b/lib/examples/icon_prefetcher_example.dart index 2c0585dc..63c729d0 100644 --- a/lib/examples/icon_prefetcher_example.dart +++ b/lib/examples/icon_prefetcher_example.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:updatium/components/app_button.dart'; import 'package:updatium/providers/apps_provider.dart'; import 'package:updatium/providers/logs_provider.dart'; import 'package:updatium/services/icon_prefetcher.dart'; @@ -254,7 +255,7 @@ class _IconPrefetcherExampleState extends State { Row( children: [ Expanded( - child: FilledButton.tonal.icon( + child: FilledButton.tonalIcon( onPressed: (_status?.isRunning ?? false) ? null : _startPrefetching, @@ -264,7 +265,7 @@ class _IconPrefetcherExampleState extends State { ), const SizedBox(width: 8), Expanded( - child: FilledButton.tonal.icon( + child: FilledButton.tonalIcon( onPressed: (_status?.isRunning ?? false) ? _pausePrefetching : null, @@ -278,7 +279,7 @@ class _IconPrefetcherExampleState extends State { Row( children: [ Expanded( - child: FilledButton.tonal.icon( + child: FilledButton.tonalIcon( onPressed: (_status?.isPaused ?? false) ? _resumePrefetching : null, @@ -288,7 +289,7 @@ class _IconPrefetcherExampleState extends State { ), const SizedBox(width: 8), Expanded( - child: FilledButton.tonal.icon( + child: FilledButton.tonalIcon( onPressed: (_status?.isRunning ?? false) ? _stopPrefetching : null, @@ -299,7 +300,7 @@ class _IconPrefetcherExampleState extends State { ], ), const SizedBox(height: 8), - FilledButton.tonal.icon( + FilledButton.tonalIcon( onPressed: _showCacheStats, icon: const Icon(Icons.storage), label: const Text('View Cache Statistics'), diff --git a/lib/examples/refactored_icon_pipeline_example.dart b/lib/examples/refactored_icon_pipeline_example.dart index 730ffd43..12d509d0 100644 --- a/lib/examples/refactored_icon_pipeline_example.dart +++ b/lib/examples/refactored_icon_pipeline_example.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:updatium/components/app_button.dart'; import 'package:updatium/components/enhanced_app_icon.dart'; import 'package:updatium/models/enhanced_app.dart'; import 'package:updatium/services/enhanced_icon_prefetcher.dart'; @@ -347,7 +348,6 @@ class _RefactoredIconPipelineExampleState child: EnhancedAppIconGrid( app: app, onTap: () => _showAppDetails(app), - enablePerformanceOverlay: _showPerformanceOverlay, ), ), diff --git a/lib/examples/updated_app_catalogue_example.dart b/lib/examples/updated_app_catalogue_example.dart index 61da3e4e..6bce5c6d 100644 --- a/lib/examples/updated_app_catalogue_example.dart +++ b/lib/examples/updated_app_catalogue_example.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:updatium/components/app_button.dart'; import 'package:updatium/components/cached_app_icon.dart'; import 'package:updatium/providers/apps_provider.dart'; @@ -168,7 +169,7 @@ class _UpdatedAppCatalogueExampleState _buildStatItem('Total', '${apps.length}', Icons.apps), _buildStatItem('Installed', '$installedCount', Icons.download_done), _buildStatItem('Updates', '$updateCount', Icons.system_update), - _buildStatItem('Cached', '$cachedCount', Icons.cache), + _buildStatItem('Cached', '$cachedCount', Icons.storage), ], ), ); diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 5b46ca33..8e1d578a 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -405,7 +405,7 @@ class _ImportExportPageState extends State { runUpdatiumExport(pickOnly: true); }, icon: const Icon(Icons.folder_open), - label: Text( + child: Text( tr('pickExportDir'), textAlign: TextAlign.center, ), diff --git a/lib/services/enhanced_icon_prefetcher.dart b/lib/services/enhanced_icon_prefetcher.dart index ab15c1ad..4d85d452 100644 --- a/lib/services/enhanced_icon_prefetcher.dart +++ b/lib/services/enhanced_icon_prefetcher.dart @@ -416,7 +416,7 @@ class EnhancedIconPrefetcher { app.bestIconUrl, forceRefresh: forceRefresh, maxSize: config?.maxSize, - preferredFormat: config?.preferredFormat, + preferredFormat: config?.preferredFormat ?? ImageFormat.png, ); final duration = DateTime.now().difference(startTime); @@ -612,7 +612,9 @@ class EnhancedIconPrefetcher { successCount: _successCount, errorCount: _errorCount, totalCount: _totalCount, + duration: Duration.zero, errors: List.from(_errors), + metrics: Map.from(_metrics), ), ); } @@ -683,7 +685,7 @@ class PrefetchConfig { static const PrefetchConfig highQuality = PrefetchConfig( maxSize: 512, - retryCount = 5, + retryCount: 5, timeout: Duration(seconds: 60), ); } @@ -790,7 +792,12 @@ class PrefetchMetrics { int successCount = 0; int errorCount = 0; - PrefetchMetrics(this.appId); + PrefetchMetrics(this.appId, { + this.lastSuccess, + this.lastError, + this.lastDuration, + this.lastAttempt, + }); double get successRate { final total = successCount + errorCount; From be0227862e04bcb24533f14f2f41809deefeecac Mon Sep 17 00:00:00 2001 From: omeritzics <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 20:43:50 +0000 Subject: [PATCH 18/37] style: auto-fix linting and formatting issues --- lib/services/enhanced_icon_prefetcher.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/services/enhanced_icon_prefetcher.dart b/lib/services/enhanced_icon_prefetcher.dart index 4d85d452..e71c5773 100644 --- a/lib/services/enhanced_icon_prefetcher.dart +++ b/lib/services/enhanced_icon_prefetcher.dart @@ -792,7 +792,8 @@ class PrefetchMetrics { int successCount = 0; int errorCount = 0; - PrefetchMetrics(this.appId, { + PrefetchMetrics( + this.appId, { this.lastSuccess, this.lastError, this.lastDuration, From acaa18b146a886d08748209045bfa81a9c2f55bd Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:50:13 +0200 Subject: [PATCH 19/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index e95a4c85..52d88d1c 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == com.android.build.api.variant.FilterConfiguration.FilterType.ABI }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From e248f066e573a50b2ebef3623a98fd7fe827d5d9 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:50:32 +0200 Subject: [PATCH 20/37] Update lib/services/enhanced_icon_prefetcher.dart Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- lib/services/enhanced_icon_prefetcher.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/services/enhanced_icon_prefetcher.dart b/lib/services/enhanced_icon_prefetcher.dart index e71c5773..14d66535 100644 --- a/lib/services/enhanced_icon_prefetcher.dart +++ b/lib/services/enhanced_icon_prefetcher.dart @@ -416,7 +416,7 @@ class EnhancedIconPrefetcher { app.bestIconUrl, forceRefresh: forceRefresh, maxSize: config?.maxSize, - preferredFormat: config?.preferredFormat ?? ImageFormat.png, + preferredFormat: config?.preferredFormat, ); final duration = DateTime.now().difference(startTime); From 4fa1a3245427735301a261c295bc15c7b452146b Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 23:00:02 +0200 Subject: [PATCH 21/37] Update ci.yml --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e482a02..d4a17f5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,11 +46,7 @@ jobs: # Handle both .gradle and .gradle.kts files sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle || true sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle.kts || true - - - name: Analyze Code - run: | - flutter analyze - + - name: Build APK (Debug with ABI Splitting) run: | # Inject the short SHA into the Application ID to allow side-by-side testing From 53a7db154fed5d8aba41a2ea41c79ee2347a4c9c Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 23:21:35 +0200 Subject: [PATCH 22/37] Fix build #6 --- android/app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 52d88d1c..065d9139 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -39,7 +39,7 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - compilerOptions { + kotlinOptions { jvmTarget = JavaVersion.VERSION_17.toString() } @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == ABI }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType.name == "ABI" }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From c61d6b0dca1c1c0d60e752565dcef8db6de765d5 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:36:43 +0200 Subject: [PATCH 23/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 065d9139..f8e870cd 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -39,8 +39,8 @@ android { targetCompatibility = JavaVersion.VERSION_17 } - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + kotlin { + jvmToolchain(17) } defaultConfig { From 0de1d97db75b5e9a808007bdfd48fe7df9655653 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:38:24 +0200 Subject: [PATCH 24/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index f8e870cd..07c9fee3 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -133,7 +133,7 @@ val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) android.applicationVariants.configureEach { val variant = this variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType.name == "ABI" }?.identifier] + val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier] if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits From 4c6f0afaf1f966bdd6565a8234510ee9e33cee09 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 23:38:37 +0200 Subject: [PATCH 25/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 07c9fee3..b0b172a8 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -129,14 +129,24 @@ android { } val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) - -android.applicationVariants.configureEach { - val variant = this - variant.outputs.forEach { output -> - val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier] - if (abiVersionCode != null) { - // Create a version code within Android limits (max 2100000000) - // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits +androidComponents { + onVariants { variant -> + variant.outputs.forEach { output -> + val abiFilter = output.filters.find { + it.filterType == com.android.build.api.variant.VariantOutputConfiguration.FilterType.ABI + } + val abiVersionCode = abiFilter?.identifier?.let { abiCodes[it] } + + if (abiVersionCode != null) { + // Create a version code within Android limits (max 2100000000) + // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits + val baseBuildNumber = flutterVersionCode.toLong() + val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode + output.versionCode.set(compressedCode.toInt()) + } + } + } +} val baseBuildNumber = flutterVersionCode.toLong() val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode (output as ApkVariantOutputImpl).versionCodeOverride = compressedCode.toInt() From 038f9fb8e2cd35026b51a8864071c52fc42a6c1e Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Fri, 13 Feb 2026 00:00:32 +0200 Subject: [PATCH 26/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index b0b172a8..d046ba88 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -140,9 +140,10 @@ androidComponents { if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits - val baseBuildNumber = flutterVersionCode.toLong() + val baseBuildNumber = flutterVersionCode.toLongOrNull() ?: 1L val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode - output.versionCode.set(compressedCode.toInt()) + val safeVersionCode = compressedCode.coerceIn(1L, Int.MAX_VALUE.toLong()) + output.versionCode.set(safeVersionCode.toInt()) } } } From ce424a680f0c80b5c9e7fb82b4bfe9a9a3fbd3b3 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Fri, 13 Feb 2026 00:12:41 +0200 Subject: [PATCH 27/37] Update build.gradle.kts --- android/app/build.gradle.kts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index d046ba88..3d680384 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -148,12 +148,6 @@ androidComponents { } } } - val baseBuildNumber = flutterVersionCode.toLong() - val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode - (output as ApkVariantOutputImpl).versionCodeOverride = compressedCode.toInt() - } - } -} dependencies { From 5c276d5a99f3df978542b592cc3476d5a4f805cb Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Fri, 13 Feb 2026 00:17:54 +0200 Subject: [PATCH 28/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 3d680384..66f38d60 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -142,7 +142,8 @@ androidComponents { // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits val baseBuildNumber = flutterVersionCode.toLongOrNull() ?: 1L val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode - val safeVersionCode = compressedCode.coerceIn(1L, Int.MAX_VALUE.toLong()) + val maxPlayVersionCode = 2_100_000_000L + val safeVersionCode = compressedCode.coerceIn(1L, maxPlayVersionCode) output.versionCode.set(safeVersionCode.toInt()) } } From c8b74b91353b0a1f7a661c72243f7515b9d84ebd Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Fri, 13 Feb 2026 00:18:26 +0200 Subject: [PATCH 29/37] Update android/app/build.gradle.kts Co-authored-by: qodo-code-review[bot] <151058649+qodo-code-review[bot]@users.noreply.github.com> --- android/app/build.gradle.kts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 66f38d60..5a8ba661 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -140,7 +140,9 @@ androidComponents { if (abiVersionCode != null) { // Create a version code within Android limits (max 2100000000) // Use: (YYMMDDHH % 100000) * 100 + ABI to stay well under limits - val baseBuildNumber = flutterVersionCode.toLongOrNull() ?: 1L + val baseBuildNumber = requireNotNull(flutterVersionCode.toLongOrNull()) { + "Invalid flutter.versionCode='$flutterVersionCode' in local.properties; must be a number." + } val compressedCode = (baseBuildNumber % 100000) * 100 + abiVersionCode val maxPlayVersionCode = 2_100_000_000L val safeVersionCode = compressedCode.coerceIn(1L, maxPlayVersionCode) From 4616d3bc8bc4b5a7bd2b8edb9d6ebe165609d3a3 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 20:35:00 +0200 Subject: [PATCH 30/37] Fix build issues (cherry picked from commit 96d6aeae0e35d3be4fac78ccd2e55db1dd439859) --- lib/components/app_button.dart | 11 +++++------ lib/components/cached_app_icon.dart | 13 ++++++------- lib/pages/apps.dart | 3 ++- 3 files changed, 13 insertions(+), 14 deletions(-) diff --git a/lib/components/app_button.dart b/lib/components/app_button.dart index 53e4f4cd..236e81d3 100644 --- a/lib/components/app_button.dart +++ b/lib/components/app_button.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:updatium/utils/expressive_motion.dart'; /// A custom text button widget that provides consistent styling and expressive interactions across the app class AppTextButton extends StatefulWidget { @@ -57,21 +56,21 @@ class _AppTextButtonState extends State void initState() { super.initState(); _animationController = AnimationController( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), vsync: this, ); _scaleAnimation = Tween(begin: 1.0, end: 0.95).animate( CurvedAnimation( parent: _animationController, - curve: ExpressiveMotion.emphasizedAccelerate, + curve: Curves.easeOutCubic, ), ); _opacityAnimation = Tween(begin: 1.0, end: 0.8).animate( CurvedAnimation( parent: _animationController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); } @@ -136,9 +135,9 @@ class _AppTextButtonState extends State scale: _scaleAnimation.value, child: AnimatedOpacity( opacity: _opacityAnimation.value, - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), child: AnimatedContainer( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), transform: Matrix4.identity() ..translate(0.0, _isHovered ? -2.0 : 0.0), decoration: BoxDecoration( diff --git a/lib/components/cached_app_icon.dart b/lib/components/cached_app_icon.dart index d476b3bf..50c9eab1 100644 --- a/lib/components/cached_app_icon.dart +++ b/lib/components/cached_app_icon.dart @@ -3,7 +3,6 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:updatium/providers/apps_provider.dart'; import 'package:updatium/providers/source_provider.dart'; -import 'package:updatium/utils/expressive_motion.dart'; /// Widget that displays app icons with caching and loading states class CachedAppIcon extends StatefulWidget { @@ -61,31 +60,31 @@ class _CachedAppIconState extends State _shimmerAnimation = Tween(begin: -2.0, end: 2.0).animate( CurvedAnimation( parent: _shimmerController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); // Scale animation for interactions _scaleController = AnimationController( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), vsync: this, ); _scaleAnimation = Tween(begin: 1.0, end: 0.9).animate( CurvedAnimation( parent: _scaleController, - curve: ExpressiveMotion.emphasizedAccelerate, + curve: Curves.easeOutCubic, ), ); // Rotation animation for loading/error states _rotationController = AnimationController( - duration: ExpressiveMotion.durationLong, + duration: const Duration(milliseconds: 600), vsync: this, ); _rotationAnimation = Tween(begin: 0.0, end: 0.1).animate( CurvedAnimation( parent: _rotationController, - curve: ExpressiveMotion.standard, + curve: Curves.easeInOut, ), ); @@ -236,7 +235,7 @@ class _CachedAppIconState extends State child: Transform.rotate( angle: _rotationAnimation.value, child: AnimatedContainer( - duration: ExpressiveMotion.durationShort, + duration: const Duration(milliseconds: 150), transform: Matrix4.identity() ..translate(0.0, _isHovered ? -4.0 : 0.0), decoration: BoxDecoration( diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index c9272ca3..3fd99998 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -1,3 +1,4 @@ +import 'package:animations/animations.dart'; import 'dart:convert'; import 'dart:math' as math; @@ -973,7 +974,7 @@ class AppsPageState extends State { ], ), ), - ); + ); } getCategoryCollapsibleTile(int index) { From 7ce209073e1d82cc05d46082d3d5381b1e2a8b16 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 20:49:55 +0200 Subject: [PATCH 31/37] Fix --- assets/translations/ar.json | 16 +++++++++++++ assets/translations/he.json | 45 ++++++++++++++++++++++++------------ lib/pages/import_export.dart | 8 +++---- 3 files changed, 50 insertions(+), 19 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 3e8e4b97..323d51b6 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -348,66 +348,82 @@ "multipleSigners": "عدد من الدول الموقعة", "removeAppQuestion": { "one": "إزالة التطبيق؟", + "two": "إزالة التطبيقين؟", "other": "إزالة التطبيقات؟" }, "tooManyRequestsTryAgainInMinutes": { "one": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقيقة", + "two": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقيقتين", "other": "طلبات كثيرة جدًا (حُدد المعدل) - حاول مرة أخرى بعد {} دقائق" }, "bgUpdateGotErrorRetryInMinutes": { "one": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقيقة", + "two": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقيقتين", "other": "واجه التحقق من التحديثات في الخلفية {}، سيتم جدولة محاولة أخرى بعد {} دقائق" }, "bgCheckFoundUpdatesWillNotifyIfNeeded": { "one": "وجد التحقق من التحديثات في الخلفية {} تحديث - سيتم إخطار المستخدم إذا لزم الأمر", + "two": "وجد التحقق من التحديثات في الخلفية {} تحديثين - سيتم إخطار المستخدم إذا لزم الأمر", "other": "وجد التحقق من التحديثات في الخلفية {} تحديثات - سيتم إخطار المستخدم إذا لزم الأمر" }, "apps": { "one": "{} تطبيق", + "two": "تطبيقان", "other": "{} تطبيقات" }, "url": { "one": "{} رابط", + "two": "رابطان", "other": "{} روابط" }, "minute": { "one": "{} دقيقة", + "two": "دقيقتان", "other": "{} دقائق" }, "hour": { "one": "{} ساعة", + "two": "ساعتان", "other": "{} ساعات" }, "day": { "one": "{} يوم", + "two": "يومان", "other": "{} أيام" }, "clearedNLogsBeforeXAfterY": { "one": "مُسح {n} سجل (قبل = {before}, بعد = {after})", + "two": "مُسح {n} سجلان (قبل = {before}, بعد = {after})", "other": "مُسح {n} سجلات (قبل = {before}, بعد = {after})" }, "xAndNMoreUpdatesAvailable": { "one": "{} وتطبيق واحد آخر لديه تحديثات.", + "two": "{} وتطبيقان آخران لديهما تحديثات.", "other": "{} و{} تطبيقات أخرى لديها تحديثات." }, "xAndNMoreUpdatesInstalled": { "one": "{} وتطبيق واحد آخر حُدث.", + "two": "{} وتطبيقان آخران حُدثا.", "other": "{} و{} تطبيقات أخرى حُدثت." }, "xAndNMoreUpdatesFailed": { "one": "فشل تحديث {} وتطبيق واحد آخر.", + "two": "فشل تحديث {} وتطبيقان آخران.", "other": "فشل تحديث {} و{} تطبيقات أخرى." }, "xAndNMoreUpdatesPossiblyInstalled": { "one": "{} وتطبيق واحد آخر قد حُدث.", + "two": "{} وتطبيقان آخران قد حُدثا.", "other": "{} و{} تطبيقات أخرى قد حُدثت." }, "apk": { "one": "{} APK", + "two": "APKان", "other": "{} APKs" }, "certificateHash": { "one": "بصمة الشهادة", + "two": "بصمتا الشهادة", "other": "بصمات الشهادة" }, "securityDisclaimerTitle": "إخلاء مسؤولية الأمان والقانوني", diff --git a/assets/translations/he.json b/assets/translations/he.json index facf7848..05452486 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -81,7 +81,7 @@ "shareSelectedAppURLs": "שיתוף כתובות היישומים שנבחרו", "resetInstallStatus": "איפוס מצב התקנה", "more": "עוד", - "removeOutdatedFilter": "Remove out-of-date app filter", + "removeOutdatedFilter": "סינון להסרת יישומים שאינם מעודכנים", "showOutdatedOnly": "הצגת יישומים לא מעודכנים בלבד", "filter": "סינון", "filterApps": "סינון יישומים", @@ -126,7 +126,7 @@ "bgUpdateCheckInterval": "מרווח זמן לבדיקת עדכונים ברקע", "neverManualOnly": "אף פעם - באופן ידני בלבד", "appearance": "מראה", - "showWebInAppView": "Show source webpage in app view", + "showWebInAppView": "הצגת עמוד האינטרנט של המקור בתצוגת היישום", "pinUpdates": "הצמדת עדכונים לחלק העליון של רשימת היישומים", "updates": "עדכונים", "sourceSpecific": "לפי מקור", @@ -178,14 +178,14 @@ "fdroid": "מאגר F-Droid הרשמי", "appIdOrName": "מזהה או שם של יישום", "appId": "מזהה יישום", - "appWithIdOrNameNotFound": "No app was found with that ID or name", + "appWithIdOrNameNotFound": "לא נמצא יישום עם שם או מזהה זה", "reposHaveMultipleApps": "מאגרים עשויים להכיל יישומים מרובים", "fdroidThirdPartyRepo": "מאגר צד שלישי של F-Droid", "install": "התקנה", - "markInstalled": "Mark installed", + "markInstalled": "סימון כמותקן", "update": "עדכון", "updated": "מעודכן", - "markUpdated": "Mark updated", + "markUpdated": "סימון כמעודכן", "additionalOptions": "אפשרויות נוספות", "disableVersionDetection": "השבתת זיהוי גרסה", "noVersionDetectionExplanation": "This option should only be used for apps where version detection does not work correctly.", @@ -213,8 +213,8 @@ "removeFromUpdatium": "הסרה מ־Updatium", "uninstallFromDevice": "הסרה מהמכשיר", "onlyWorksWithNonVersionDetectApps": "Only works for apps with version detection disabled.", - "releaseDateAsVersion": "Use release date as version string", - "releaseTitleAsVersion": "Use release title as version string", + "releaseDateAsVersion": "שימוש בתאריך פרסום המהדורה בתור מחרוזת הגרסה", + "releaseTitleAsVersion": "שימוש בכותרת המהדורה בתור מחרוזת הגרסה", "releaseDateAsVersionExplanation": "This option should only be used for apps where version detection does not work correctly, but a release date is available.", "changes": "שינויים", "releaseDate": "תאריך שחרור גרסה", @@ -242,21 +242,21 @@ "pickHighestVersionCode": "בחירה אוטומטית של קובץ ה־APK עם קוד הגרסה הגבוה ביותר", "checkUpdateOnDetailPage": "Check for updates on opening an app detail page", "disablePageTransitions": "השבתת הנפשות מעבר בין עמודים", - "reversePageTransitions": "Reverse page transition animations", + "reversePageTransitions": "היפוך הנפשות מעבר בין עמודים", "minStarCount": "מספר כוכבים מינימלי", "addInfoBelow": "Add this info below.", - "addInfoInSettings": "Add this info in the Settings.", + "addInfoInSettings": "יש להוסיף מידע זה בהגדרות.", "githubSourceNote": "GitHub rate limiting can be avoided using an API key.", "sortByLastLinkSegment": "Sort by only the last segment of the link", "filterReleaseNotesByRegEx": "Filter release notes by regular expression", "customLinkFilterRegex": "Custom APK link filter by regular expression (default '.apk$')", - "appsPossiblyUpdated": "App updates attempted", + "appsPossiblyUpdated": "בוצעו ניסיונות לעדכון יישומים", "appsPossiblyUpdatedNotifDescription": "Notifies the user that updates to one or more apps were potentially applied in the background", - "xWasPossiblyUpdatedToY": "{} may have been updated to {}.", + "xWasPossiblyUpdatedToY": "ייתכן כי היישום {} עודכן לגרסה {}.", "enableBackgroundUpdates": "הפעלת עדכונים ברקע", "backgroundUpdateReqsExplanation": "Background updates may not be possible for all apps.", "backgroundUpdateLimitsExplanation": "The success of a background install can only be determined when Updatium is opened.", - "verifyLatestTag": "Verify the 'latest' tag", + "verifyLatestTag": "אימות התגית ‚latest’ (גרסה עדכנית)", "intermediateLinkRegex": "Filter for an 'intermediate' link to visit", "filterByLinkText": "Filter links by link text", "matchLinksOutsideATags": "Match links outside tags", @@ -277,15 +277,15 @@ "filterVersionsByRegEx": "Filter versions by regular expression", "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", - "reverseSort": "Reverse sorting", + "reverseSort": "היפוך סדר", "takeFirstLink": "בחירת הקישור הראשון", "skipSort": "Skip sorting", "debugMenu": "תפריט ניפוי שגיאות", - "bgTaskStarted": "Background task started - check logs.", + "bgTaskStarted": "המשימה ברקע החלה - נא לעיין ביומן.", "runBgCheckNow": "הרצת בדיקת עדכונים ברקע כעת", "versionExtractWholePage": "Apply version string extraction Regex to entire page", "installing": "מתבצעת התקנה", - "skipUpdateNotifications": "Skip update notifications", + "skipUpdateNotifications": "דילוג על התראות בנוגע לעדכונים", "updatesAvailableNotifChannel": "עדכונים זמינים", "appsUpdatedNotifChannel": "היישומים עודכנו", "appsPossiblyUpdatedNotifChannel": "App updates attempted", @@ -347,62 +347,77 @@ "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "removeAppQuestion": { "one": "להסיר את היישום?", + "two": "להסיר את שני היישומים?", "other": "להסיר את היישומים?" }, "tooManyRequestsTryAgainInMinutes": { "one": "Too many requests (rate limited) - try again in {} minute", + "two": "Too many requests (rate limited) - try again in {} minutes", "other": "Too many requests (rate limited) - try again in {} minutes" }, "bgUpdateGotErrorRetryInMinutes": { "one": "BG update checking encountered a {}, will schedule a retry check in {} minute", + "two": "BG update checking encountered a {}, will schedule a retry check in {} minutes", "other": "BG update checking encountered a {}, will schedule a retry check in {} minutes" }, "bgCheckFoundUpdatesWillNotifyIfNeeded": { "one": "BG update checking found {} update - will notify user if needed", + "two": "BG update checking found {} updates - will notify user if needed", "other": "BG update checking found {} updates - will notify user if needed" }, "apps": { "one": "יישום אחד", + "two": "שני יישומים", "other": "{} יישומים" }, "url": { "one": "כתובת אחת", + "two": "שתי כתובות", "other": "{} כתובות" }, "minute": { "one": "דקה אחת", + "two": "שתי דקות", "other": "{} דקות" }, "hour": { "one": "שעה אחת", + "two": "שעתיים", "other": "{} שעות" }, "day": { "one": "יום אחד", + "two": "יומיים", "other": "{} ימים" }, "clearedNLogsBeforeXAfterY": { "one": "Cleared {n} log (before = {before}, after = {after})", + "two": "Cleared {n} logs (before = {before}, after = {after})", "other": "Cleared {n} logs (before = {before}, after = {after})" }, "xAndNMoreUpdatesAvailable": { "one": "{} and 1 more app have updates.", + "two": "{} and 2 more apps have updates.", "other": "{} and {} more apps have updates." }, "xAndNMoreUpdatesInstalled": { "one": "{} and 1 more app was updated.", + "two": "{} and 2 more apps were updated.", "other": "{} and {} more apps were updated." }, "xAndNMoreUpdatesFailed": { "one": "Failed to update {} and 1 more app.", + "two": "Failed to update {} and 2 more apps.", "other": "Failed to update {} and {} more apps." }, "xAndNMoreUpdatesPossiblyInstalled": { "one": "{} and 1 more app may have been updated.", + "two": "{} and 2 more apps may have been updated.", "other": "{} and {} more apps may have been updated." }, "apk": { "one": "קובץ APK אחד", + "two": "שני קובצי APK", "other": "{} קובצי APK" }, "securityDisclaimerTitle": "כתב ויתור בנוגע לאבטחה ונושאים משפטיים", diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index fe43ea09..723ecdd1 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -530,7 +530,7 @@ class _ImportExportPageState extends State { runSourceSearch(searchSource[0]); } }, - child: Text( + label: Text( tr( 'searchX', args: [lowerCaseIfEnglish(tr('source'))], @@ -749,7 +749,7 @@ class _SelectionModalState extends State { selectAll(deselect: true); }); }, - child: Text(tr('deselectX', args: [''])), + child: Text(tr('deselectX', args: [tr('all')])), ); } @@ -927,7 +927,7 @@ class _SelectionModalState extends State { onPressed: () { Navigator.of(context).pop(); }, - child: Text(tr('cancel')), + label: Text(tr('cancel')), ), AppTextButton( onPressed: entrySelections.values.where((b) => b).isEmpty @@ -940,7 +940,7 @@ class _SelectionModalState extends State { .toList(), ); }, - child: Text( + label: Text( widget.onlyOneSelectionAllowed ? tr('pick') : tr( From 641307b0deea28e5c7476e80be89c9b959ad216f Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 20:47:21 +0200 Subject: [PATCH 32/37] Update lib/pages/apps.dart Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- lib/pages/apps.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 3fd99998..d16a52a1 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -974,7 +974,7 @@ class AppsPageState extends State { ], ), ), - ); + ); } getCategoryCollapsibleTile(int index) { From 8e92bafc25d094783c0de93ba9a8969d70e31219 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:18:18 +0200 Subject: [PATCH 33/37] Update strings --- assets/translations/ar.json | 2 +- assets/translations/bs.json | 2 +- assets/translations/ca.json | 2 +- assets/translations/cs.json | 2 +- assets/translations/da.json | 2 +- assets/translations/de.json | 2 +- assets/translations/en-EO.json | 2 +- assets/translations/en.json | 2 +- assets/translations/es.json | 2 +- assets/translations/et.json | 2 +- assets/translations/fa.json | 2 +- assets/translations/fr.json | 2 +- assets/translations/gl.json | 2 +- assets/translations/he.json | 2 +- assets/translations/hu.json | 2 +- assets/translations/id.json | 2 +- assets/translations/it.json | 2 +- assets/translations/ja.json | 2 +- assets/translations/ko.json | 2 +- assets/translations/ml.json | 2 +- assets/translations/nl.json | 2 +- assets/translations/pl.json | 2 +- assets/translations/pt-BR.json | 2 +- assets/translations/pt.json | 2 +- assets/translations/ru.json | 2 +- assets/translations/sv.json | 2 +- assets/translations/tr.json | 2 +- assets/translations/uk.json | 2 +- assets/translations/vi.json | 2 +- assets/translations/zh-Hant-TW.json | 2 +- assets/translations/zh.json | 2 +- 31 files changed, 31 insertions(+), 31 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 323d51b6..3511daa6 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -342,7 +342,7 @@ "GHReqPrefix": "نسخة \"sky22333/hubproxy\" لطلبات GitHub", "includeZips": "ضمّن ملفات ZIP", "zippedApkFilterRegEx": "تصفية ملفات APK داخل ZIP", - "googleVerificationWarningP1": "(جوجل) أعلن أنه، بدءاً من عام 2026/2027، كل التطبيقات على أجهزة (أندرويد) مصدقة ستطلب من المطور تقديم تفاصيل الهوية الشخصية مباشرة إلى (غوغل).\n\nوبما أن مطوري هذا التطبيق لا يوافقون على هذا الشرط، فإن Updatium لن يعمل بعد ذلك الوقت على أجهزة أندرويدية معتمدة.", + "googleVerificationWarningP1": "(جوجل) أعلن أنه، بدءاً من عام 2026/2027، كل التطبيقات على أجهزة (أندرويد) مصدقة ستطلب من المطور تقديم تفاصيل الهوية الشخصية مباشرة إلى (غوغل).\n\nبعد ذلك، قد يتوقف Updatium عن العمل على أجهزة أندرويدية معتمدة.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "ونلاحظ أنه في الأجل القصير، قد يظل من الممكن تركيب عملية \" غير متوافقة \" من خلال عملية \" تدفق سريع \" وعد غوغل بتنفيذها بعد رد فعل واسع النطاق على إعلانهم، ولكنهم لم يفصلوا كيف سينجح ذلك حتى لا يتضح ما إذا كان سيحافظ حقا على حريات المستعملين بأي طريقة عملية.\n\nعلى أية حال، حركة (جوجل) خطوة هامة نحو نهاية الحوسبة المجانية ذات الأغراض العامة للأفراد\n\nوينبغي ألا يتأثر هذا النظام غير المصدق عليه، مثل غرافينيوس، طالما يسمح له باستمرار وجوده.", "multipleSigners": "عدد من الدول الموقعة", diff --git a/assets/translations/bs.json b/assets/translations/bs.json index ceb0546f..1e8d49a9 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' istanca za GitHub zahtjeve", "includeZips": "Uključi i ZIP datoteke", "zippedApkFilterRegEx": "Filtriraj APK-ove unutar ZIP datoteka", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 2ecf6433..2ca5c69e 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -342,7 +342,7 @@ "GHReqPrefix": "exemple per a les peticions de GitHub", "includeZips": "Inclou fitxers ZIPName", "zippedApkFilterRegEx": "Filtre APKs dins ZIPName", - "googleVerificationWarningP1": "Google ha anunciat que, començant en 2026/2027, totes les aplicacions en dispositius d'Android \"que requereixen que el desenvolupador enviï els detalls personals directament a Google.\n\nDes que els desenvolupadors d'aquesta aplicació no estan d'acord amb aquest requisit, l' obtenció ja no funcionarà en els dispositius certificats d'Android.", + "googleVerificationWarningP1": "Google ha anunciat que, començant en 2026/2027, totes les aplicacions en dispositius d'Android \"certificats\" requeriran que el desenvolupador enviï els detalls personals directament a Google.\n\nDesprés d'això, Updatium pot deixar de funcionar en dispositius Android certificats.", "googleVerificationWarningP2": "Aneu a https://buitandoideopen.org/ per a més informació.", "googleVerificationWarningP3": "Tingueu en compte que en el terme curt, pot continuar sent possible instal· lar aplicacions \"inverificats\" (no compatible) mitjançant un procés de flux \"advince\" que Google ha promès implementar després d'una gran reacció al seu anunci, però no han detallat com funcionaria, de manera que és clar si es preservarà realment les llibertats dels usuaris de cap manera pràctica.\n\nEn qualsevol cas, el moviment de Google és un pas significatiu cap al final de la informàtica lliure i general deficient per als individus.\n\nEls SO no validats, com el GraphenOS, no haurien de ser afectats per això sempre que se'ls permeti continuar existint.", "multipleSigners": "Signadors múltiples", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 9382c31a..981a3f34 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -341,7 +341,7 @@ "GHReqPrefix": "instance 'sky22333/hubproxy' pro požadavky GitHubu", "includeZips": "Zahrnout soubory ZIP", "zippedApkFilterRegEx": "Filtrování souborů APK uvnitř ZIP", - "googleVerificationWarningP1": "Společnost Google oznámila, že počínaje rokem 2026 / 2027 budou všechny aplikace na \"certifikovaných\" zařízeních pro Android vyžadovat, aby vývojář předložil osobní údaje o identitě přímo společnosti Google.\n\nVzhledem k tomu, vývojáři této aplikace nesouhlasí s tímto požadavkem, Obstainium již nebude pracovat na certifikovaných Android zařízení po této době.", + "googleVerificationWarningP1": "Společnost Google oznámila, že počínaje rokem 2026 / 2027 budou všechny aplikace na \"certifikovaných\" zařízeních pro Android vyžadovat, aby vývojář předložil osobní údaje o identitě přímo společnosti Google.\n\nPo této době, Updatium může přestat pracovat na certifikovaných Android zařízeních.", "googleVerificationWarningP2": "Další informace získáte na adrese https: / / keepandroidopen.org.", "googleVerificationWarningP3": "Všimněte si, že v krátkodobém horizontu může být i nadále možné instalovat \"neověřené\" (nevyhovující) aplikace prostřednictvím procesu \"pokročilého toku\", který Google slíbil implementovat po širokém odporu k jejich oznámení, ale neupřesnili, jak by to mělo fungovat, takže není jasné, zda bude skutečně zachovávat uživatelskou svobodu jakýmkoli praktickým způsobem.\n\nV každém případě je krok společnosti Google významným krokem ke konci volného, všeobecného výpočetní techniky pro jednotlivce.\n\nNecertifikované Osy, jako je GrapheneOS, by tím neměly být ovlivněny, pokud budou nadále existovat.", "multipleSigners": "Několik signers", diff --git a/assets/translations/da.json b/assets/translations/da.json index 0b521cfc..6805d0cd 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy'-instans til GitHub-anmodninger", "includeZips": "Inkluder ZIP-filer", "zippedApkFilterRegEx": "Filtrer APK'er inde i ZIP", - "googleVerificationWarningP1": "Google har annonceret, at fra 2026 / 2027, alle apps på \"certificeret\" Android-enheder vil kræve, at udvikleren til at indsende personlige identitetsoplysninger direkte til Google.\n\nDa udviklerne af denne app ikke accepterer dette krav, Updatium vil ikke længere arbejde på certificerede Android-enheder efter dette tidspunkt.", + "googleVerificationWarningP1": "Google har annonceret, at fra 2026 / 2027, alle apps på \"certificeret\" Android-enheder vil kræve, at udvikleren til at indsende personlige identitetsoplysninger direkte til Google.\n\nEfter dette tidspunkt, kan Updatium holde op med at arbejde på certificerede Android-enheder.", "googleVerificationWarningP2": "Gå til https: / / keepandroidopen.org / for mere information.", "googleVerificationWarningP3": "Bemærk, at på kort sigt, kan det fortsætte med at være muligt at installere \"uverificerbare\" (ikke-overensstemmende) apps gennem en \"avanceret flow\" proces, som Google har lovet at gennemføre efter bred backlash til deres meddelelse, men de har ikke detaljeret, hvordan dette ville arbejde, så det er uklart, om det virkelig vil bevare brugernes friheder i praksis.\n\nUnder alle omstændigheder er Googles bevægelse et væsentligt skridt i retning af afslutningen af fri, generel-formål computing for enkeltpersoner.\n\nIkke-certificerede OS, som GrapheneOS, bør være upåvirket af dette, så længe de har lov til at fortsætte med at eksistere.", "multipleSigners": "Flere signere", diff --git a/assets/translations/de.json b/assets/translations/de.json index 3d7c6fac..8c5706e7 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -342,7 +342,7 @@ "GHReqPrefix": "sky22333/hubproxy'-Instanz für GitHub-Anfragen", "includeZips": "ZIP-Dateien einbeziehen", "zippedApkFilterRegEx": "APKs in ZIP filtern", - "googleVerificationWarningP1": "Google hat bekannt gegeben, dass, ab 2026/2027, alle Apps auf \"zertifizierten\" Android-Geräten den Entwickler benötigen, um persönliche Identitätsdetails direkt an Google einzureichen.\n\nDa die Entwickler dieser App dieser Anforderung nicht zustimmen, Updatium wird nicht mehr auf zertifizierten Android-Geräten nach dieser Zeit arbeiten.", + "googleVerificationWarningP1": "Google hat bekannt gegeben, dass, ab 2026/2027, alle Apps auf \"zertifizierten\" Android-Geräten den Entwickler benötigen, um persönliche Identitätsdetails direkt an Google einzureichen.\n\nDanach kann Updatium auf zertifizierten Android-Geräten aufhören zu funktionieren.", "googleVerificationWarningP2": "Weitere Informationen finden Sie unter https://keepandroidopen.org/.", "googleVerificationWarningP3": "Beachten Sie, dass es kurzfristig weiterhin möglich sein kann, \"unverifizierte\" (nicht-konforme) Apps durch einen \"fortgeschrittenen Flow\"-Prozess zu installieren, den Google versprochen hat, nach einem breiten Rückschluss auf ihre Ankündigung umzusetzen, aber sie haben nicht detailliert, wie dies funktioniert, so dass es unklar ist, ob es wirklich Benutzerfreiheiten in praktischer Weise erhalten wird.\n\nIn jedem Fall ist Googles Bewegung ein wesentlicher Schritt zum Ende des kostenlosen, universellen Computers für Einzelpersonen.\n\nNicht zertifizierte Betriebssysteme, wie GrapheneOS, sollten dadurch nicht beeinflusst werden, solange sie weiterhin existieren dürfen.", "multipleSigners": "Mehrere Zeichen", diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 71e083a2..073f9a80 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/en.json b/assets/translations/en.json index 6a11be0c..aaa55e04 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/es.json b/assets/translations/es.json index 348daacb..64d34032 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instancia 'sky22333/hubproxy' para las\nsolicitudes de GitHub", "includeZips": "Incluir archivos ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro del ZIP", - "googleVerificationWarningP1": "Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android \"certificados\" requerirán que el desarrollador envíe detalles de identidad personal directamente a Google.\n\nDado que los desarrolladores de esta aplicación no están de acuerdo con este requisito, Updatium ya no trabajará en dispositivos Android certificados después de ese tiempo.", + "googleVerificationWarningP1": "Google ha anunciado que, a partir de 2026/2027, todas las aplicaciones en dispositivos Android \"certificados\" requerirán que el desarrollador envíe detalles de identidad personal directamente a Google.\n\nDespués de eso, Updatium puede dejar de funcionar en dispositivos Android certificados.", "googleVerificationWarningP2": "Vaya a https://keepandroidopen.org/ para más información.", "googleVerificationWarningP3": "Tenga en cuenta que a corto plazo, puede seguir siendo posible instalar aplicaciones \"no verificadas\" (no compatibles) a través de un proceso de \"flujo avanzado\" que Google ha prometido implementar después de una reacción amplia a su anuncio, pero no han detallado cómo funcionaría así que no está claro si realmente preservará las libertades de los usuarios de cualquier manera práctica.\n\nEn cualquier caso, el movimiento de Google es un paso significativo hacia el final de la computación libre de uso general para los individuos.\n\nLos sistemas operativos no certificados, como GrapheneOS, no deberían ser afectados por esto mientras se les permita seguir existiendo.", "multipleSigners": "Múltiples firmas", diff --git a/assets/translations/et.json b/assets/translations/et.json index 26ffab6f..0cec2722 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instants GitHub päringute jaoks", "includeZips": "Kaasa ZIP failid", "zippedApkFilterRegEx": "Filtreeri APK-sid ZIP-i sees", - "googleVerificationWarningP1": "Google on teatanud, et alates 2026./2027. aastast vajavad kõik \"sertifitseeritud\" Androidi seadmed, et arendaja esitaks isiklikud identiteediandmed otse Google'le.\n\nKuna selle rakenduse arendajad ei nõustu selle nõudega, ei tööta Updatium pärast seda aega sertifitseeritud Androidi seadmetel.", + "googleVerificationWarningP1": "Google on teatanud, et alates 2026./2027. aastast vajavad kõik \"sertifitseeritud\" Androidi seadmed, et arendaja esitaks isiklikud identiteediandmed otse Google'le.\n\nPärast seda võib Updatium lõpetada töötamise sertifitseeritud Androidi seadmetel.", "googleVerificationWarningP2": "Lisateabe saamiseks minge aadressile https://keepandroidopen.org/.", "googleVerificationWarningP3": "Pange tähele, et lühikesel tähtajal võib olla võimalik installida \"kinnitamata\" (mittesobivad) äpid \"täiustatud protsessi\" kaudu, mille Google on lubanud implementeerida pärast laia vastukaja oma teadaandele, kuid nad ei ole üksikasjaliselt kirjeldanud, kuidas see töötab, mistõttu on selge, kas see tõesti säilitab kasutajate vabadused praktilises mõttes.\n\nIgatahes, Google'i samm on oluline samm vaba üldotstarbelise arvutamise lõpule füüsiliste isikute jaoks.\n\nMitte-sertifitseeritud operatsioonisüsteemid, nagu GrapheneOS, peaksid jääda mõjutamata niikaua kui neil on lubatud olemas olla.", "multipleSigners": "Mitu allkirjastajat", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 50da7e34..1a57634d 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -341,7 +341,7 @@ "GHReqPrefix": "مثال “sky22333/hubproxy”", "includeZips": "فایل های ZIP", "zippedApkFilterRegEx": "فیلتر APK در داخل Zip", - "googleVerificationWarningP1": "گوگل اعلام کرده است که از سال 2026/2027، تمام برنامه های موجود در دستگاه های اندرویدی معتبر نیاز به توسعه دهنده دارند تا جزئیات هویت شخصی را مستقیماً به گوگل ارسال کنند.\n\nاز آنجایی که توسعه دهندگان این برنامه با این نیاز موافق نیستند، به دست آوردنیوم دیگر بر روی دستگاه های اندرویدی گواهی شده پس از آن زمان کار نخواهد کرد.", + "googleVerificationWarningP1": "گوگل اعلام کرده است که از سال 2026/2027، تمام برنامه های موجود در دستگاه های اندرویدی معتبر نیاز به توسعه دهنده دارند تا جزئیات هویت شخصی را مستقیماً به گوگل ارسال کنند.\n\nپس از آن، Updatium ممکن است در دستگاه های اندرویدی گواهی شده کار نکند.", "googleVerificationWarningP2": "به https://Keepandroidopen.org یا برای اطلاعات بیشتر بروید.", "googleVerificationWarningP3": "توجه داشته باشید که در کوتاه مدت، ممکن است همچنان برای نصب برنامه های \"unverified\" (غیر سازگار) از طریق یک فرایند \"advanced Flow\" که گوگل وعده داده است پس از واکنش گسترده به اعلام خود اجرا کند، اما آنها جزئیات چگونگی کار این را به طوری که مشخص نیست که آیا آن واقعا حفظ آزادی های کاربر در هر روش عملی.\n\nدر هر صورت، حرکت گوگل یک گام مهم به سمت پایان محاسبات رایگان و عمومی برای افراد است.\n\nسیستم عامل های غیر گواهی شده، مانند گرافنموس، باید تا زمانی که اجازه دارند به وجود خود ادامه دهند، تحت تاثیر قرار گیرند.", "multipleSigners": "ثبت نام های متعدد", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index e08bd46b..f5607cc0 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -342,7 +342,7 @@ "GHReqPrefix": "instance 'sky22333/hubproxy' pour les requêtes GitHub", "includeZips": "Inclure les fichiers ZIP", "zippedApkFilterRegEx": "Filtrer les APK à l'intérieur du ZIP", - "googleVerificationWarningP1": "Google a annoncé que, à partir de 2026/2027, toutes les applications sur des appareils Android \"certifiés\" exigeront du développeur de soumettre des données personnelles d'identité directement à Google.\n\nPuisque les développeurs de cette application n'acceptent pas cette exigence, Obtention ne fonctionnera plus sur les appareils Android certifiés après ce temps.", + "googleVerificationWarningP1": "Google a annoncé que, à partir de 2026/2027, toutes les applications sur des appareils Android \"certifiés\" exigeront du développeur de soumettre des données personnelles d'identité directement à Google.\n\nAprès cela, Updatium peut cesser de fonctionner sur les appareils Android certifiés.", "googleVerificationWarningP2": "Consultez https://keepandroidopen.org/ pour plus d'informations.", "googleVerificationWarningP3": "Notez qu'à court terme, il peut continuer d'être possible d'installer des applications \"non vérifiées\" (non conformes) à travers un processus de \"flux avancé\" que Google a promis de mettre en œuvre après un grand retour à l'annonce, mais ils n'ont pas précisé comment cela fonctionnerait donc il n'est pas clair s'il préservera réellement les libertés des utilisateurs d'une manière pratique.\n\nEn tout cas, le mouvement de Google est un pas important vers la fin de l'informatique gratuite et à usage général pour les individus.\n\nLes OS non certifiés, comme GrapheneOS, ne devraient pas en être affectés tant qu'ils sont autorisés à continuer d'exister.", "multipleSigners": "Plusieurs signataires", diff --git a/assets/translations/gl.json b/assets/translations/gl.json index f765331a..730903d5 100644 --- a/assets/translations/gl.json +++ b/assets/translations/gl.json @@ -343,7 +343,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instancia para solicitudes github", "includeZips": "Incluír ficheiros ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "Google anunciou que, comezando en 2026/2027, todas as apps en dispositivos \"certificados\" Android van precisar que as desenvolvedoras envíen detalles da súa identidade persoal directamente a Google.\n\nComo non estamos de acordo con este proceder, Updatium non vai funcionar en dispositivos certificados chegado o momento.", + "googleVerificationWarningP1": "Google anunciou que, comezando en 2026/2027, todas as apps en dispositivos \"certificados\" Android van precisar que as desenvolvedoras envíen detalles da súa identidade persoal directamente a Google.\n\nDespois diso, Updatium pode deixar de funcionar en dispositivos certificados.", "googleVerificationWarningP2": "Vai a https://keepandroidopen.org/ para máis información.", "googleVerificationWarningP3": "A curto prazo pode seguir dispoñible a instalación de aplicacións \"non verificadas\" (non-compliant) cun procedemento \"avanzado\" que Google prometeu implementar despois das críticas recibidas, pero aínda non publicaron detalles sobre isto e non está claro se realmente será posible levalo adiante de xeito práctico.\n\nEn todo caso, os movementos de Google son indicativos sobre o desexo de acabar coa liberdade, o propósito de uso xeral das computadoras por parte das persoas.\n\nOs sistemas operativos non certificados, como GrapheneOS, non se deberían ver afectados por isto mentras lles permitan existir.", "multipleSigners": "Múltiples Signadores", diff --git a/assets/translations/he.json b/assets/translations/he.json index 05452486..f62acf66 100644 --- a/assets/translations/he.json +++ b/assets/translations/he.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "לכלול קובצי ZIP", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "removeAppQuestion": { diff --git a/assets/translations/hu.json b/assets/translations/hu.json index c4288c09..4dc128cc 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -342,7 +342,7 @@ "GHReqPrefix": "„sky22333/hubproxy” példány a GitHub lekérdezéséhez", "includeZips": "ZIP-fájlok belefoglalása", "zippedApkFilterRegEx": "APK-fájlok szűrése a ZIP-fájlon belül", - "googleVerificationWarningP1": "A Google bejelentette, hogy 2026/2027-től kezdődően az összes alkalmazáshoz, amely „tanúsított” (certified) Android eszközökön fut, a fejlesztőknek a személyes azonosító adataikat közvetlenül a Google-nek kell majd benyújtaniuk.\n\nMivel az Updatium alkalmazás fejlesztői nem fogadják el ezt a követelményt, ezért az Updatium az említett időpont után már nem fog működni a tanúsított Android eszközökön.", + "googleVerificationWarningP1": "A Google bejelentette, hogy 2026/2027-től kezdődően az összes alkalmazáshoz, amely „tanúsított\" (certified) Android eszközökön fut, a fejlesztőknek a személyes azonosító adataikat közvetlenül a Google-nek kell majd benyújtaniuk.\n\nEzt követően, az Updatium esetleg nem fog működni a tanúsított Android eszközökön.", "googleVerificationWarningP2": "További információkért látogasson el a https://keepandroidopen.org/ weboldalra.", "googleVerificationWarningP3": "Fontos megjegyezni, hogy rövid távon még lehetséges lehet az „ellenőrizetlen” (nem megfelelő) alkalmazások telepítése egy „speciális folyamaton” keresztül, amelyre a Google ígéretet tett, hogy megvalósít a bejelentésüket követő széles körű felháborodás miatt. Azonban azt nem részletezték, hogy hogyan is működne ez, ezért nem világos, hogy ez gyakorlatilag megőrzi-e a felhasználók szabadsághoz való jogait.\n\nMindenesetre a Google lépése jelentős előrelépés a felhasználók számára elérhető szabad, általános célú alkalmazások megszűnése felé.\n\nA nem tanúsított operációs rendszereket, mint például a GrapheneOS, ez nem érinti mindaddig, amíg működhetnek.", "multipleSigners": "Többen is aláírták", diff --git a/assets/translations/id.json b/assets/translations/id.json index e8fc48e1..904b4e2b 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instance 'sky22333/hubproxy' untuk permintaan GitHub", "includeZips": "Menyertakan file ZIP", "zippedApkFilterRegEx": "Saring APK di dalam ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026 / 2027, all apps on \"certified\" Android devices will needs the developer to submit personal identity details directly to Google.\n\nKarena pengembang aplikasi ini tidak setuju dengan persyaratan ini, Updatium tidak akan lagi bekerja pada perangkat Android bersertifikat setelah waktu itu.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026 / 2027, all apps on \"certified\" Android devices will needs the developer to submit personal identity details directly to Google.\n\nSetelah itu, Updatium mungkin berhenti bekerja pada perangkat Android bersertifikat.", "googleVerificationWarningP2": "Pergi ke https: / / keep androidpen.org / untuk informasi lebih lanjut.", "googleVerificationWarningP3": "Perlu dicatat bahwa dalam jangka pendek, mungkin terus mungkin untuk memasang aplikasi \"belum diverifikasi\" (bukan -compliant) melalui proses \"arus maju\" yang Google janjikan untuk mengimplementasikan setelah reaksi luas terhadap pengumuman mereka, tetapi mereka tidak rinci bagaimana hal ini akan bekerja sehingga tidak jelas apakah itu benar-benar akan menjaga kebebasan pengguna dengan cara praktis.\n\nDalam hal apapun, Google bergerak adalah langkah yang signifikan menuju akhir bebas, tujuan umum komputasi untuk individu.\n\nOS tidak bersertifikat, seperti GrapheneOS, seharusnya tidak terpengaruh oleh hal ini selama mereka diizinkan untuk terus ada.", "multipleSigners": "Tanda Tangan Ganda", diff --git a/assets/translations/it.json b/assets/translations/it.json index 67a54944..0bd48bae 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -341,7 +341,7 @@ "GHReqPrefix": "istanza 'sky22333/hubproxy' per le richieste a GitHub", "includeZips": "Includere file ZIP", "zippedApkFilterRegEx": "Filtrare gli APK all'interno dello ZIP", - "googleVerificationWarningP1": "Google ha annunciato che, a partire dal 2026/2027, tutte le applicazioni su dispositivi Android \"certificati\" richiederanno allo sviluppatore di inviare dati di identità personali direttamente a Google.\n\nPoiché gli sviluppatori di questa applicazione non sono d'accordo con questo requisito, Updatium non lavorerà più su dispositivi Android certificati dopo quel tempo.", + "googleVerificationWarningP1": "Google ha annunciato che, a partire dal 2026/2027, tutte le applicazioni su dispositivi Android \"certificati\" richiederanno allo sviluppatore di inviare dati di identità personali direttamente a Google.\n\nDopo ciò, Updatium potrebbe smettere di funzionare su dispositivi Android certificati.", "googleVerificationWarningP2": "Vai a https://keepandroidopen.org/ per ulteriori informazioni.", "googleVerificationWarningP3": "Si noti che a breve termine, può continuare ad essere possibile installare applicazioni \"non verificate\" (non conformi) attraverso un processo di \"flusso avanzato\" che Google ha promesso di implementare dopo ampio backlash al loro annuncio, ma non hanno dettagliato come questo funzionerebbe in modo da non essere chiaro se veramente preservare le libertà degli utenti in qualsiasi modo pratico.\n\nIn ogni caso, la mossa di Google è un passo significativo verso la fine del free, general-purpose computing per gli individui.\n\nOS non certificati, come GrapheneOS, non dovrebbero essere influenzati da questo per tutto il tempo in cui sono autorizzati a continuare ad esistere.", "multipleSigners": "Segnali multipli", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index eced01c2..79ad9337 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -342,7 +342,7 @@ "GHReqPrefix": "GitHub リクエスト用の 'sky22333/hubproxy' インスタンス", "includeZips": "ZIPファイルを含む", "zippedApkFilterRegEx": "ZIP内のAPKをフィルタリングする", - "googleVerificationWarningP1": "Googleは、2026年から2027年以降、「認定」Androidデバイス上のすべてのアプリにおいて、開発者が個人情報をGoogleに直接提出することを義務付けると発表しました。\n\nこのアプリの開発者はこの要件に同意しないため、それ以降Updatiumは認定Androidデバイスでは動作しなくなります。", + "googleVerificationWarningP1": "Googleは、2026年から2027年以降、「認定」Androidデバイス上のすべてのアプリにおいて、開発者が個人情報をGoogleに直接提出することを義務付けると発表しました。\n\nその後、Updatiumは認定Androidデバイスで動作しなくなる可能性があります。", "googleVerificationWarningP2": "詳細については、https://keepandroidopen.org/ をご覧ください。", "googleVerificationWarningP3": "なお、短期的には、Googleが発表後に広範な反発を受けて実装を約束した「高度なフロー」プロセスを通じて、「未検証」(非準拠)のアプリをインストールし続けることが可能になるかもしれません。しかし、その具体的な仕組みは明らかにされておらず、ユーザーの自由が実質的に保たれるかどうかは不明です。\n\nいずれにせよ、Googleのこの動きは、個人向けの自由な汎用コンピューティングの終焉に向けた大きな一歩です。\n\nGrapheneOSのような非認定OSは、その存在が許される限り、この影響を受けないはずです。", "multipleSigners": "複数の署名者", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 94ea08b0..97f0a800 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -342,7 +342,7 @@ "GHReqPrefix": "GitHub 요청을 위한 'sky22333/hubproxy' 인스턴스", "includeZips": "ZIP 파일 포함", "zippedApkFilterRegEx": "ZIP 내 APK 필터링", - "googleVerificationWarningP1": "Google은 2026/2027에서 시작하여 \"certified\" Android 기기의 모든 앱은 Google에 직접 개인 식별 정보를 제출하기 위해 개발자가 필요합니다.\n\n이 응용 프로그램의 개발자가이 요구 사항에 동의하지 않기 때문에, 얻은 것은 그 시간이 지나면 인증 된 Android 장치에서 더 이상 작동하지 않습니다.", + "googleVerificationWarningP1": "Google은 2026/2027에서 시작하여 \"certified\" Android 기기의 모든 앱은 Google에 직접 개인 식별 정보를 제출하기 위해 개발자가 필요합니다.\n\n그 후, Updatium은 인증 된 Android 장치에서 작동을 중지 할 수 있습니다.", "googleVerificationWarningP2": "Https://keepandroidopen.org/로 이동하세요.", "googleVerificationWarningP3": "이 웹 사이트는 애플 리케이션에 전념. 우리는 정품 앱과 게임을 제공 할 목적으로이 사이트를 만들었습니다. 4AppsApk 최고의 안드로이드 애플 리케이션을위한 무료 APK 파일 다운로드 서비스, 계략.\n\n어떤 경우, Google의 이동은 개인을위한 무료, 범용 컴퓨팅의 끝으로 중요한 단계입니다.\n\nGrapheneOS와 같은 비 인증 된 OSes는 존재하지 않아야합니다.", "multipleSigners": "다수 Signers", diff --git a/assets/translations/ml.json b/assets/translations/ml.json index 51581549..ff53e1d7 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -342,7 +342,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instance for GitHub requests", "includeZips": "Include ZIP files", "zippedApkFilterRegEx": "Filter APKs inside ZIP", - "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nSince the developers of this app do not agree to this requirement, Updatium will no longer work on certified Android devices after that time.", + "googleVerificationWarningP1": "Google has announced that, starting in 2026/2027, all apps on \"certified\" Android devices will require the developer to submit personal identity details directly to Google.\n\nAfter then, Updatium may stop working on certified Android devices.", "googleVerificationWarningP2": "Go to https://keepandroidopen.org/ for more information.", "googleVerificationWarningP3": "Note that in the short term, it may continue to be possible to install \"unverified\" (non-compliant) apps through an \"advanced flow\" process that Google has promised to implement after broad backlash to their announcement, but they have not detailed how this would work so it is unclear whether it will truly preserve user freedoms in any practical way.\n\nIn any case, Google's move is a significant step towards the end of free, general-purpose computing for individuals.\n\nNon-certified OSes, like GrapheneOS, should be unaffected by this for as long as they are allowed to continue to exist.", "multipleSigners": "Multiple Signers", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index 55ad4746..f6acc7d0 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -341,7 +341,7 @@ "GHReqPrefix": "'sky22333/hubproxy' instantie voor GitHub verzoeken", "includeZips": "ZIP-bestanden opnemen", "zippedApkFilterRegEx": "APK's filteren in ZIP", - "googleVerificationWarningP1": "Google heeft aangekondigd dat vanaf 2026/2027 alle apps op \"gecertificeerde\" Android-apparaten de ontwikkelaar nodig hebben om persoonlijke identiteitsgegevens rechtstreeks aan Google te verzenden.\n\nAangezien de ontwikkelaars van deze app niet akkoord gaan met deze eis, zal Progressionium niet meer werken op gecertificeerde Android-apparaten na die tijd.", + "googleVerificationWarningP1": "Google heeft aangekondigd dat vanaf 2026/2027 alle apps op \"gecertificeerde\" Android-apparaten de ontwikkelaar nodig hebben om persoonlijke identiteitsgegevens rechtstreeks aan Google te verzenden.\n\nDaarna kan Updatium stoppen met werken op gecertificeerde Android-apparaten.", "googleVerificationWarningP2": "Ga naar https://keepandroidopen.org/ voor meer informatie.", "googleVerificationWarningP3": "Merk op dat het op korte termijn mogelijk kan blijven om \"niet-geverifieerde\" (niet-conforme) apps te installeren via een \"geavanceerde flow\" proces dat Google heeft beloofd te implementeren na brede backlash naar hun aankondiging, maar ze hebben niet gedetailleerd hoe dit zou werken, dus het is onduidelijk of het echt zal behouden gebruikersvrijheden op enige praktische manier.\n\nIn ieder geval, Google's zet is een belangrijke stap naar het einde van vrije, algemene computer voor individuen.\n\nNiet-gecertificeerde besturingssystemen, zoals GrapheneOS, mogen hierdoor niet worden beïnvloed zolang ze mogen blijven bestaan.", "multipleSigners": "Meerdere Ondertekenaars", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index bbd8d5f7..69c73f16 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instancja \"sky22333/hubproxy\" dla żądań GitHub", "includeZips": "Dołączanie plików ZIP", "zippedApkFilterRegEx": "Filtrowanie plików APK wewnątrz ZIP", - "googleVerificationWarningP1": "Google ogłosił, że począwszy od 2026 / 2027, wszystkie aplikacje na \"certyfikowanych\" urządzeń z systemem Android będą wymagać od dewelopera przekazania danych osobowych bezpośrednio do Google.\n\nPonieważ deweloperzy tej aplikacji nie zgadzają się na ten wymóg, po tym czasie nie będzie już działać na certyfikowanych urządzeniach z systemem Android.", + "googleVerificationWarningP1": "Google ogłosił, że począwszy od 2026 / 2027, wszystkie aplikacje na \"certyfikowanych\" urządzeń z systemem Android będą wymagać od dewelopera przekazania danych osobowych bezpośrednio do Google.\n\nPo tym czasie, Updatium może przestać działać na certyfikowanych urządzeniach z systemem Android.", "googleVerificationWarningP2": "Więcej informacji można uzyskać na stronie https: / / keepandroidopen.org.", "googleVerificationWarningP3": "Należy zauważyć, że w perspektywie krótkoterminowej może być nadal możliwe instalowanie \"niezweryfikowanych\" aplikacji (niezgodnych z wymaganiami) poprzez proces \"zaawansowanego przepływu\", który Google obiecał wdrożyć po szerokim odwrocie do ich ogłoszenia, ale nie mają one szczegółowych informacji, jak to działa, więc nie jest jasne, czy będzie rzeczywiście zachować wolność użytkownika w jakikolwiek praktyczny sposób.\n\nW każdym razie ruch Google jest znaczącym krokiem w kierunku zakończenia swobodnego, ogólnego celu dla osób fizycznych.\n\nNiecertyfikowane Oses, takie jak GrapheneOS, nie powinny mieć na to wpływu tak długo, jak długo będą mogły istnieć.", "multipleSigners": "Wielu sygnatariuszy", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index 3050866e..91b7ff55 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instância \"sky22333/hubproxy\" para solicitações do GitHub", "includeZips": "Incluir arquivos ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nUma vez que os desenvolvedores deste aplicativo não concordam com este requisito, Updatium não funcionará mais em dispositivos Android certificados após esse tempo.", + "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nDepois disso, Updatium pode parar de funcionar em dispositivos Android certificados.", "googleVerificationWarningP2": "Vá para https://keepandroidopen.org/ para mais informações.", "googleVerificationWarningP3": "Note que, a curto prazo, pode continuar a ser possível instalar aplicativos \"não verificados\" (não conformes) através de um processo de \"fluxo avançado\" que o Google prometeu implementar após uma ampla retrocesso ao seu anúncio, mas eles não detalharam como isso funcionaria então não é claro se ele realmente preservará as liberdades de usuário de alguma forma prática.\n\nEm qualquer caso, o movimento do Google é um passo significativo para o fim da computação gratuita, de propósito geral para os indivíduos.\n\nOS não certificados, como o GrapheneOS, não devem ser afetados por isso enquanto forem autorizados a continuar a existir.", "multipleSigners": "Assinantes Múltiplos", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index 1bd631d1..eeceda1d 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Instância 'sky22333/hubproxy' para pedidos de GitHub", "includeZips": "Incluir ficheiros ZIP", "zippedApkFilterRegEx": "Filtrar APKs dentro do ZIP", - "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nUma vez que os desenvolvedores deste aplicativo não concordam com este requisito, Updatium não funcionará mais em dispositivos Android certificados após esse tempo.", + "googleVerificationWarningP1": "O Google anunciou que, a partir de 2026/2027, todos os aplicativos em dispositivos Android \"certificados\" exigirão que o desenvolvedor envie detalhes de identidade pessoal diretamente ao Google.\n\nDepois disso, Updatium pode parar de funcionar em dispositivos Android certificados.", "googleVerificationWarningP2": "Vá para https://keepandroidopen.org/ para mais informações.", "googleVerificationWarningP3": "Note que, a curto prazo, pode continuar a ser possível instalar aplicativos \"não verificados\" (não conformes) através de um processo de \"fluxo avançado\" que o Google prometeu implementar após uma ampla retrocesso ao seu anúncio, mas eles não detalharam como isso funcionaria então não é claro se ele realmente preservará as liberdades de usuário de alguma forma prática.\n\nEm qualquer caso, o movimento do Google é um passo significativo para o fim da computação gratuita, de propósito geral para os indivíduos.\n\nOS não certificados, como o GrapheneOS, não devem ser afetados por isso enquanto forem autorizados a continuar a existir.", "multipleSigners": "Assinantes Múltiplos", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 3179ed77..210a8782 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Использовать «sky22333/hubproxy» для запросов на GitHub", "includeZips": "Включить ZIP-файлы", "zippedApkFilterRegEx": "Фильтр APK внутри ZIP", - "googleVerificationWarningP1": "Google объявил, что начиная с 2026/2027 года, все приложения на сертифицированных устройствах Android потребуют от разработчика предоставления персональных данных непосредственно Google.\n\nПоскольку разработчики данного приложения не согласны с этим требованием, Updatium не будет работать на сертифицированных устройствах Android после наступления данного события.", + "googleVerificationWarningP1": "Google объявил, что начиная с 2026/2027 года, все приложения на сертифицированных устройствах Android потребуют от разработчика предоставления персональных данных непосредственно Google.\n\nПосле этого, Updatium может перестать работать на сертифицированных устройствах Android.", "googleVerificationWarningP2": "Перейдите на https://keepandroidopen.org/ для получения дополнительной информации.", "googleVerificationWarningP3": "Обратите внимание, что в краткосрочной перспективе возможно установить «непроверенные» (не соответствующие) приложения с помощью процесса «продвинутого потока», который Google пообещал реализовать после широкой негативной реакции на их объявление, но они не уточнили, как это будет работать, поэтому неясно, действительно ли данный метод сохранит свободы пользователей каким-либо практическим способом.\n\nВ любом случае, действие Google является значительным шагом к завершению разработки бесплатных приложений сторонними разработчиками.\n\nНесертифицированные ОС, такие как GrapheneOS, не должны быть подвержены этому влиянию до тех пор, пока им разрешено продолжать существовать.", "multipleSigners": "Несколько подписей", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index c7a2374f..0627295b 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -341,7 +341,7 @@ "GHReqPrefix": "Instansen \"sky22333/hubproxy\" för GitHub-förfrågningar", "includeZips": "Inkludera ZIP-filer", "zippedApkFilterRegEx": "Filtrera APK:er inuti ZIP", - "googleVerificationWarningP1": "Google har meddelat att alla appar på \"certifierade\" Android-enheter kommer att kräva att utvecklaren skickar personuppgifter direkt till Google.\n\nEftersom utvecklarna av denna app inte samtycker till detta krav kommer Updatium inte längre att arbeta med certifierade Android-enheter efter den tiden.", + "googleVerificationWarningP1": "Google har meddelat att alla appar på \"certifierade\" Android-enheter kommer att kräva att utvecklaren skickar personuppgifter direkt till Google.\n\nEfter det kan Updatium sluta fungera på certifierade Android-enheter.", "googleVerificationWarningP2": "Gå till https://keepandroidopen.org/ för mer information.", "googleVerificationWarningP3": "Observera att på kort sikt kan det fortsätta att vara möjligt att installera \"overifierade\" (icke-kompatibla) appar genom en \"avancerad flöde\" -process som Google har lovat att genomföra efter bred backlash till deras tillkännagivande, men de har inte detaljerat hur detta skulle fungera så det är oklart om det verkligen kommer att bevara användarfrihet på något praktiskt sätt.\n\nGoogles flytt är ett viktigt steg mot slutet av gratis, allmänt ändamål datorer för individer.\n\nIcke-certifierade operativsystem, som GrapheneOS, bör inte påverkas av detta så länge de får fortsätta att existera.", "multipleSigners": "Flera signers", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index 73c1340b..bfc50d1d 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -343,7 +343,7 @@ "GHReqPrefix": "GitHub istekleri için 'sky22333/hubproxy' örneği", "includeZips": "ZIP dosyalarını dahil et", "zippedApkFilterRegEx": "ZIP içindeki APK'ları filtrele", - "googleVerificationWarningP1": "Google, 2026/2027'den itibaren \"sertifikalı\" Android cihazlardaki bütün uygulamaların, geliştiricinin kişisel kimlik bilgilerini doğrudan Google'a göndermesini gerektireceğini duyurdu.\n\nBu uygulamanın geliştiricileri bu şartı kabul etmedikleri için, Updatium bu tarihten sonra sertifikalı Android cihazlarda çalışmayacaktır.", + "googleVerificationWarningP1": "Google, 2026/2027'den itibaren \"sertifikalı\" Android cihazlardaki bütün uygulamaların, geliştiricinin kişisel kimlik bilgilerini doğrudan Google'a göndermesini gerektireceğini duyurdu.\n\nBu tarihten sonra, Updatium sertifikalı Android cihazlarda çalışmayı durabilir.", "googleVerificationWarningP2": "Daha fazla bilgi için https://keepandroidopen.org/ adresine gidin.", "googleVerificationWarningP3": "Kısa vadede, Google'ın duyurudan sonra aldığı geniş tepkilerin ardından yapacağına söz verdiği \"gelişmiş akış\" işlemi ile \"doğrulanmamış\" (şartı yerine getirmeyen) uygulamaları yüklemek mümkün olabilir; ancak nasıl çalışacağını detaylandırmadıkları için bunun kullanıcı özgürlüğünü pratik anlamda gerçekten koruyup koruyamayacağı belirsizdir.\n\nHer halükârda Google'ın bu hamlesi; bireyler için ücretsiz, genel amaçlı bilişim hizmetlerinin sonuna doğru atılmış önemli bir adımdır.\n\nVar olmalarına müsaade edildiği sürece, GrapheneOS gibi sertifikasız işletim sistemleri bundan etkilenmemelidir.", "multipleSigners": "Birden fazla imzacı", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index c0af2a98..6061616e 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -341,7 +341,7 @@ "GHReqPrefix": "екземпляр 'sky22333/hubproxy' для запитів на GitHub", "includeZips": "Додайте ZIP-файли", "zippedApkFilterRegEx": "Фільтруйте APK-файли всередині ZIP", - "googleVerificationWarningP1": "Google оголосила, що, починаючи з 2026/2027, всі додатки на \"сертифікованих\" пристроях Android будуть вимагати розробника, щоб подати особисті дані в Інтернеті безпосередньо на Google.\n\nОскільки розробники цієї програми не погоджуються з цією вимогою, Updatium більше не працюватиме на сертифікованих пристроях Android після цього часу.", + "googleVerificationWarningP1": "Google оголосила, що, починаючи з 2026/2027, всі додатки на \"сертифікованих\" пристроях Android будуть вимагати розробника, щоб подати особисті дані в Інтернеті безпосередньо на Google.\n\nПісля цього, Updatium може припинити працювати на сертифікованих пристроях Android.", "googleVerificationWarningP2": "Перейти на https://keepandroidopen.org/ для отримання додаткової інформації.", "googleVerificationWarningP3": "Зауважте, що в короткостроковому терміні вона може продовжувати бути можливою для установки \"необґрунтованих\" (некомпліантних) додатків через процес \"додатковий потік\", який Google обіцяє реалізувати після широкої задньої вії до їх оголошення, але вони не докладно, як це буде працювати так, що це не зрозуміло, чи це буде дійсно зберігати свобод користувачів будь-яким практичним способом.\n\nУ будь-якому випадку, переміщення Google є важливим кроком до кінця безкоштовного, універсального обчислення для фізичних осіб.\n\nНесертифіковані ОС, як GrapheneOS, повинні бути неоцінені цими протягом тривалого часу, щоб вони могли продовжити існування.", "multipleSigners": "Кілька підписників", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 689330c6..294dc839 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -342,7 +342,7 @@ "GHReqPrefix": "Thực thể 'sky22333/hubproxy' cho các yêu cầu GitHub", "includeZips": "Bao gồm các tệp ZIP", "zippedApkFilterRegEx": "Lọc các tệp APK bên trong tệp ZIP", - "googleVerificationWarningP1": "Google đã thông báo rằng, bắt đầu từ năm 2026/2027, tất cả các ứng dụng trên các thiết bị Alpha được ký hiệu sẽ yêu cầu nhà phát triển gửi thông tin cá nhân trực tiếp đến Google.\n\nVì các nhà phát triển của ứng dụng này không đồng ý với yêu cầu này, nên Otainium sẽ không còn làm việc trên các thiết bị được chứng nhận là steroid sau thời gian đó.", + "googleVerificationWarningP1": "Google đã thông báo rằng, bắt đầu từ năm 2026/2027, tất cả các ứng dụng trên các thiết bị Android được chứng nhận sẽ yêu cầu nhà phát triển gửi thông tin cá nhân trực tiếp đến Google.\n\nSau đó, Updatium có thể ngừng hoạt động trên các thiết bị Android được chứng nhận.", "googleVerificationWarningP2": "Truy cập https://keepandroidopen.org/ để biết thêm thông tin.", "googleVerificationWarningP3": "Ghi chú rằng trong ngắn hạn, nó có thể tiếp tục có thể được tiếp tục để cài đặt các ứng dụng \"không xác định\" thông qua một quá trình \"vô hạn dòng chảy\" mà Google đã hứa sẽ thực hiện sau một hồi quy rộng cho thông báo của họ, nhưng họ không có chi tiết làm thế nào điều này sẽ hoạt động như thế nào vì vậy nó không rõ ràng nó sẽ thực sự bảo tồn tự do cho người dùng theo bất kỳ cách thực tế nào.\n\nTrong bất kỳ trường hợp nào, sự di chuyển của Google là một bước tiến đáng kể tới sự kết thúc của máy tính tự do, mục đích chung cho cá nhân.\n\nCác hệ điều hành không được ghi nhận, giống như GreneOS, nên không bị ảnh hưởng bởi điều này miễn là chúng được cho phép tiếp tục tồn tại.", "multipleSigners": "Nhiều người ký", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index b9ce66ac..cb2fba68 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -341,7 +341,7 @@ "GHReqPrefix": "GitHub 請求的 'sky22333/hubproxy' 實例", "includeZips": "包含 ZIP 文件", "zippedApkFilterRegEx": "在 ZIP 內過濾 APK", - "googleVerificationWarningP1": "Google 已宣布,自 2026/2027 年起,所有在「通過認證(certified)」的 Android 裝置上執行的應用程式,都必須由開發者直接向 Google 提交個人身分資訊。\n\n由於本應用程式的開發者不同意此一要求,Updatium 在該時間點之後將無法再於通過認證的 Android 裝置上運作。", + "googleVerificationWarningP1": "Google 已宣布,自 2026/2027 年起,所有在「通過認證(certified)」的 Android 裝置上執行的應用程式,都必須由開發者直接向 Google 提交個人身分資訊。\n\n之後,Updatium 可能會停止在通過認證的 Android 裝置上運作。", "googleVerificationWarningP2": "如需更多資訊,請前往 https://keepandroidopen.org/.", "googleVerificationWarningP3": "請注意,從短期來看,Google 表示在其公告引發廣泛反彈後,可能仍可透過其承諾實作的「進階流程(advanced flow)」來安裝「未經驗證」(不符合規範)的應用程式;然而,Google 尚未說明此流程的具體運作方式,因此無法確定它是否能在實務上真正維護使用者的自由。\n\n無論如何,Google 的這項作法,都是朝向終結個人自由、通用運算的一大步。\n\n只要仍被允許持續存在,像 GrapheneOS 這類未通過認證的作業系統,理論上不會受到此政策影響。", "multipleSigners": "多重簽署者", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index d29c24fe..d9d297ca 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -341,7 +341,7 @@ "GHReqPrefix": "用于 GitHub 请求的 \"sky22333/hubproxy \"实例", "includeZips": "包含 ZIP 文件", "zippedApkFilterRegEx": "过滤 ZIP 内的 APK", - "googleVerificationWarningP1": "Google宣布,从2026/2027年开始,所有在\"认证\"Android设备上的应用程序都将要求开发者直接向Google提交个人身份细节.\n\n由于此应用程序的开发者不同意这一要求,Updatium在此之后将不再在认证的Android设备上工作.", + "googleVerificationWarningP1": "Google宣布,从2026/2027年开始,所有在\"认证\"Android设备上的应用程序都将要求开发者直接向Google提交个人身份细节.\n\n之后,Updatium可能会停止在认证的Android设备上工作.", "googleVerificationWarningP2": "详情请访问https://keepandroidopen.org/.", "googleVerificationWarningP3": "请注意,在短期内,通过谷歌承诺在广泛反对其公告后实施的\"高级流程\"程序,可能继续安装\"未经验证\"(不符合要求)的应用软件,但他们没有详细说明这将如何运作,因此不清楚它是否会以任何实际方式真正维护用户自由.\n\n无论如何,谷歌的这一举动是朝向个人自由、通用计算结束的重要一步.\n\n未经认证的OS,如GrapheneOS,只要允许继续存在,就不应受到影响.", "multipleSigners": "多个签名人", From 1f2edc8985cc4b5f1aae9c9dcc4dcf19be6ee8fa Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 21:25:19 +0200 Subject: [PATCH 34/37] Update strings --- assets/translations/ar.json | 2 +- assets/translations/bs.json | 2 +- assets/translations/ca.json | 2 +- assets/translations/cs.json | 2 +- assets/translations/da.json | 2 +- assets/translations/de.json | 2 +- assets/translations/en-EO.json | 2 +- assets/translations/en.json | 2 +- assets/translations/es.json | 2 +- assets/translations/et.json | 2 +- assets/translations/fa.json | 2 +- assets/translations/fr.json | 2 +- assets/translations/gl.json | 2 +- assets/translations/hu.json | 2 +- assets/translations/id.json | 2 +- assets/translations/it.json | 2 +- assets/translations/ja.json | 2 +- assets/translations/ko.json | 2 +- assets/translations/ml.json | 2 +- assets/translations/nl.json | 2 +- assets/translations/pl.json | 2 +- assets/translations/pt-BR.json | 2 +- assets/translations/pt.json | 2 +- assets/translations/ru.json | 2 +- assets/translations/sv.json | 2 +- assets/translations/tr.json | 2 +- assets/translations/uk.json | 2 +- assets/translations/vi.json | 2 +- assets/translations/zh-Hant-TW.json | 2 +- assets/translations/zh.json | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index 3511daa6..bfe27811 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -24,7 +24,7 @@ "color": "لون", "standard": "قياسي", "custom": "مخصّص", - "useMaterialYou": "استخدم Material You", + "useMaterialYou": "استخدم ألوان Material You", "githubStarredRepos": "مستودعات GitHub المفضلة", "uname": "اسم المستخدم", "wrongArgNum": "عدد وسائط غير صحيح", diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 1e8d49a9..6a68d2f9 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -24,7 +24,7 @@ "color": "Boja", "standard": "Standard", "custom": "Custom", - "useMaterialYou": "Koristi Material You temu", + "useMaterialYou": "Koristi Material You boje", "githubStarredRepos": "GitHub repo-i sa zvjezdicom", "uname": "Korisničko ime", "wrongArgNum": "Naveden je pogrešan broj argumenata", diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 2ca5c69e..4ee34d21 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -24,7 +24,7 @@ "color": "Color", "standard": "Estàndard", "custom": "Personalitzat", - "useMaterialYou": "Usa 'Material You'", + "useMaterialYou": "Usar colors Material You", "githubStarredRepos": "Repositoris favorits de GitHub", "uname": "Nom d'usuari", "wrongArgNum": "Nombre d'arguments proveït invàlid", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 981a3f34..6bd0d470 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -24,7 +24,7 @@ "color": "Barvu", "standard": "Standardní", "custom": "Vlastní", - "useMaterialYou": "Použít Material You", + "useMaterialYou": "Použít barvy Material You", "githubStarredRepos": "Repozitáře na GitHubu označené hvězdičkou", "uname": "Uživatelské jméno", "wrongArgNum": "Nesprávný počet zadaných argumentů", diff --git a/assets/translations/da.json b/assets/translations/da.json index 6805d0cd..be43b425 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -24,7 +24,7 @@ "color": "Farve", "standard": "Standard", "custom": "Brugerdefineret", - "useMaterialYou": "Brug Material You", + "useMaterialYou": "Brug Material You-farver", "githubStarredRepos": "Stjernemarkeret GitHub-repos", "uname": "Brugernavn", "wrongArgNum": "Forkert antal argumenter angivet", diff --git a/assets/translations/de.json b/assets/translations/de.json index 8c5706e7..d5a18407 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -24,7 +24,7 @@ "color": "Farbe", "standard": "Standard", "custom": "Benutzerdefiniert", - "useMaterialYou": "Material You verwenden", + "useMaterialYou": "Material You Farben verwenden", "githubStarredRepos": "GitHub Starred Repos", "uname": "Benutzername", "wrongArgNum": "Falsche Anzahl von Argumenten (Parametern) übermittelt", diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 073f9a80..59b4498e 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -24,7 +24,7 @@ "color": "Koloro", "standard": "Norma", "custom": "Agordita", - "useMaterialYou": "Uzi Material You", + "useMaterialYou": "Uzi Material You kolorojn", "githubStarredRepos": "Stelaj GitHub-deponejoj", "uname": "Uzantnomo", "wrongArgNum": "Malĝusta nombro da provizitaj argumentoj", diff --git a/assets/translations/en.json b/assets/translations/en.json index aaa55e04..70639641 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -24,7 +24,7 @@ "color": "Color", "standard": "Standard", "custom": "Custom", - "useMaterialYou": "Use Material You", + "useMaterialYou": "Use Material You colors", "githubStarredRepos": "GitHub starred repositories", "uname": "Username", "wrongArgNum": "Wrong number of arguments provided", diff --git a/assets/translations/es.json b/assets/translations/es.json index 64d34032..bc4a7cfb 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -24,7 +24,7 @@ "color": "color", "standard": "Estándar", "custom": "A medida", - "useMaterialYou": "Aplicar 'Material You'", + "useMaterialYou": "Aplicar colores Material You", "githubStarredRepos": "repositorios favoritos en GitHub", "uname": "Nombre de usuario", "wrongArgNum": "Número de argumentos provistos inválido", diff --git a/assets/translations/et.json b/assets/translations/et.json index 0cec2722..a269e4cf 100644 --- a/assets/translations/et.json +++ b/assets/translations/et.json @@ -24,7 +24,7 @@ "color": "Värv", "standard": "Standard", "custom": "Kohandatud", - "useMaterialYou": "Kasuta Material You", + "useMaterialYou": "Kasuta Material You värve", "githubStarredRepos": "GitHub'i tärniga repod", "uname": "Kasutajanimi", "wrongArgNum": "Vale arv argumente antud", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 1a57634d..3e299abc 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -24,7 +24,7 @@ "color": "رنگ", "standard": "استاندارد", "custom": "سفارشی", - "useMaterialYou": "از Material You استفاده کنید", + "useMaterialYou": "استفاده از رنگ‌های Material You", "githubStarredRepos": "مخازن ستاره دار گیتهاب", "uname": "نام کاربری", "wrongArgNum": "تعداد آرگومان های ارائه شده اشتباه است", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index f5607cc0..9666d722 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -24,7 +24,7 @@ "color": "Couleur", "standard": "Norme", "custom": "Personnalisé", - "useMaterialYou": "Utiliser Material You", + "useMaterialYou": "Utiliser les couleurs Material You", "githubStarredRepos": "dépôts étoilés GitHub", "uname": "Nom d'utilisateur", "wrongArgNum": "Nombre incorrect des arguments fournis", diff --git a/assets/translations/gl.json b/assets/translations/gl.json index 730903d5..811889c3 100644 --- a/assets/translations/gl.json +++ b/assets/translations/gl.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Estándar", "custom": "Persoal", - "useMaterialYou": "Usar Material You", + "useMaterialYou": "Usar cores Material You", "githubStarredRepos": "Repositorios GitHub con estrela", "uname": "Identificador", "wrongArgNum": "Número de argumentos proporcionados incorrecto", diff --git a/assets/translations/hu.json b/assets/translations/hu.json index 4dc128cc..313fc23c 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -24,7 +24,7 @@ "color": "Szín", "standard": "Általános", "custom": "Egyéni", - "useMaterialYou": "Material You használata", + "useMaterialYou": "Material You színek használata", "githubStarredRepos": "Csillagozott GitHub-tárolók", "uname": "Felhasználónév", "wrongArgNum": "A megadott argumentumok száma nem megfelelő", diff --git a/assets/translations/id.json b/assets/translations/id.json index 904b4e2b..c865035a 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -24,7 +24,7 @@ "color": "Warna", "standard": "Standar", "custom": "Kustom", - "useMaterialYou": "Gunakan Material You", + "useMaterialYou": "Gunakan warna Material You", "githubStarredRepos": "Repositori berbintang GitHub", "uname": "Nama pengguna", "wrongArgNum": "Salah memberikan jumlah argumen", diff --git a/assets/translations/it.json b/assets/translations/it.json index 0bd48bae..34f06fd9 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -24,7 +24,7 @@ "color": "Colore", "standard": "Standard", "custom": "Personalizzato", - "useMaterialYou": "Utilizzate il materiale che avete a disposizione", + "useMaterialYou": "Utilizzate i colori Material You", "githubStarredRepos": "repository stellati da GitHub", "uname": "Nome utente", "wrongArgNum": "Numero di argomenti forniti errato", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 79ad9337..c4250a79 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -24,7 +24,7 @@ "color": "カラー", "standard": "スタンダード", "custom": "カスタム", - "useMaterialYou": "Material Youを使用する", + "useMaterialYou": "Material Youのカラーを使用", "githubStarredRepos": "GitHubでスターしたリポジトリ", "uname": "ユーザー名", "wrongArgNum": "引数の数が間違っています", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 97f0a800..b59099cc 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -24,7 +24,7 @@ "color": "색상", "standard": "표준", "custom": "사용자 정의", - "useMaterialYou": "Material You 사용", + "useMaterialYou": "Material You 색상 사용", "githubStarredRepos": "GitHub 즐겨찾기 저장소", "uname": "사용자 이름", "wrongArgNum": "잘못된 인수 수 제공", diff --git a/assets/translations/ml.json b/assets/translations/ml.json index ff53e1d7..bd0eacce 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -24,7 +24,7 @@ "color": "നിറം", "standard": "സാധാരണ", "custom": "ഇഷ്‌ടാനുസൃതം", - "useMaterialYou": "മെറ്റീരിയൽ യൂ ഉപയോഗിക്കുക", + "useMaterialYou": "Material You നിറങ്ങൾ ഉപയോഗിക്കുക", "githubStarredRepos": "GitHub സ്റ്റാർ ചെയ്ത റെപ്പോസിറ്ററികൾ", "uname": "ഉപയോക്തൃനാമം", "wrongArgNum": "തെറ്റായ എണ്ണം ആർഗ്യുമെന്റുകൾ നൽകി", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index f6acc7d0..ac9a19fb 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -24,7 +24,7 @@ "color": "Kleur", "standard": "Standaard", "custom": "Aangepast", - "useMaterialYou": "Material You gebruiken", + "useMaterialYou": "Material You kleuren gebruiken", "githubStarredRepos": "GitHub-repo's met ster", "uname": "Gebruikersnaam", "wrongArgNum": "Incorrect aantal argumenten.", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 69c73f16..b397dddd 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -24,7 +24,7 @@ "color": "Kolor", "standard": "Domyślny", "custom": "Własny", - "useMaterialYou": "Material You", + "useMaterialYou": "Użyj kolorów Material You", "githubStarredRepos": "Repozytoria GitHub oznaczone gwiazdką", "uname": "Nazwa użytkownika", "wrongArgNum": "Nieprawidłowa liczba podanych argumentów", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index 91b7ff55..7e11891a 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Padrão", "custom": "Personalizado", - "useMaterialYou": "Usar Material You", + "useMaterialYou": "Usar cores Material You", "githubStarredRepos": "Repositórios com estrela do GitHub", "uname": "Nome de usuário", "wrongArgNum": "Número errado de argumentos fornecidos", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index eeceda1d..a54a1ad2 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -24,7 +24,7 @@ "color": "Cor", "standard": "Padrão", "custom": "Personalizado", - "useMaterialYou": "Utilizar o material que", + "useMaterialYou": "Utilizar cores Material You", "githubStarredRepos": "repositórios favoritos no GitHub", "uname": "Nome de usuário", "wrongArgNum": "Número de argumentos errado", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 210a8782..79c2dea5 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -24,7 +24,7 @@ "color": "Цвет", "standard": "Стандартный", "custom": "Индивидуальный", - "useMaterialYou": "Использовать Material You", + "useMaterialYou": "Использовать цвета Material You", "githubStarredRepos": "Избранные репозитории GitHub", "uname": "Имя пользователя", "wrongArgNum": "Неправильное количество предоставленных аргументов", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index 0627295b..9b4e1756 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -24,7 +24,7 @@ "color": "Färg", "standard": "Standard", "custom": "Anpassad", - "useMaterialYou": "Använd material Du", + "useMaterialYou": "Använd Material You-färger", "githubStarredRepos": "GitHub Stjärnmärkta Förråd", "uname": "Användarnamn", "wrongArgNum": "Fel antal argument har angetts", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index bfc50d1d..7b6d7ed0 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -24,7 +24,7 @@ "color": "Renk", "standard": "Standart", "custom": "Özel", - "useMaterialYou": "Material You kullan", + "useMaterialYou": "Material You renklerini kullan", "githubStarredRepos": "GitHub yıldızlı depolar", "uname": "Kullanıcı adı", "wrongArgNum": "Yanlış sayıda argüman sağlandı", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index 6061616e..19caaba3 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -24,7 +24,7 @@ "color": "Колір", "standard": "Стандартний", "custom": "Нестандартний", - "useMaterialYou": "Використовуйте матеріал, який ви", + "useMaterialYou": "Використовуйте кольори Material You", "githubStarredRepos": "Відзначені репозиторії GitHub", "uname": "Ім'я користувача", "wrongArgNum": "Надано неправильну кількість аргументів", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 294dc839..c090d7c8 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -24,7 +24,7 @@ "color": "Màu sắc", "standard": "Mặc định", "custom": "Tùy chỉnh", - "useMaterialYou": "Sử dụng Material You", + "useMaterialYou": "Sử dụng màu Material You", "githubStarredRepos": "Kho lưu trữ có gắn dấu sao GitHub", "uname": "Tên người dùng", "wrongArgNum": "Số lượng đối số được cung cấp sai", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index cb2fba68..528596f7 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -24,7 +24,7 @@ "color": "顏色", "standard": "標準", "custom": "自訂", - "useMaterialYou": "使用 Material You", + "useMaterialYou": "使用 Material You 顏色", "githubStarredRepos": "GitHub 打星星的專案", "uname": "使用者名稱", "wrongArgNum": "提供的參數數量錯誤", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index d9d297ca..72fda44e 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -24,7 +24,7 @@ "color": "配色", "standard": "标准", "custom": "自定义", - "useMaterialYou": "使用 Material You", + "useMaterialYou": "使用 Material You 配色", "githubStarredRepos": "已星标的 GitHub 仓库", "uname": "用户名", "wrongArgNum": "参数数量错误", From ca57e14c7114018f86053e7ba108ae69cb0e2fe0 Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Thu, 12 Feb 2026 21:34:55 +0200 Subject: [PATCH 35/37] Update lib/pages/apps.dart Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- lib/pages/apps.dart | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index d16a52a1..0b242f8f 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -969,13 +969,9 @@ class AppsPageState extends State { : null, ), ), - ), - ), - ], - ), ), - ); - } + ), + ); getCategoryCollapsibleTile(int index) { var tiles = listedApps From 69550455c6f5307b0900934c56b9332de5c76da6 Mon Sep 17 00:00:00 2001 From: "Omer I.S." Date: Thu, 12 Feb 2026 23:00:02 +0200 Subject: [PATCH 36/37] Update ci.yml --- .github/workflows/ci.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e482a02..d4a17f5f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,11 +46,7 @@ jobs: # Handle both .gradle and .gradle.kts files sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle || true sed -i 's/signingConfig = signingConfigs.getByName("release")//g' android/app/build.gradle.kts || true - - - name: Analyze Code - run: | - flutter analyze - + - name: Build APK (Debug with ABI Splitting) run: | # Inject the short SHA into the Application ID to allow side-by-side testing From 60c79bd3bfcccda0fe9c95f8316c82c1772b54cc Mon Sep 17 00:00:00 2001 From: "Omer I.S." <137101815+omeritzics@users.noreply.github.com> Date: Sun, 15 Feb 2026 00:12:03 +0200 Subject: [PATCH 37/37] Update home.dart --- lib/pages/home.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/pages/home.dart b/lib/pages/home.dart index ebef188d..78216054 100644 --- a/lib/pages/home.dart +++ b/lib/pages/home.dart @@ -8,6 +8,7 @@ import 'package:flutter/services.dart'; import 'package:updatium/components/animated_navigation_bar.dart'; import 'package:updatium/components/app_button.dart'; import 'package:updatium/components/generated_form_modal.dart'; +import 'package:updatium/pages/import_export.dart'; import 'package:updatium/custom_errors.dart'; import 'package:updatium/pages/add_app.dart'; import 'package:updatium/pages/apps.dart';