Ver código fonte

Use StyledText to merge strings (#963)

Vishnu Mohandas 2 anos atrás
pai
commit
359dc0c06c

+ 108 - 116
lib/generated/intl/messages_en.dart

@@ -42,135 +42,138 @@ class MessageLookup extends MessageLookupByLibrary {
 
   static String m6(albumName) => "Collaborative link created for ${albumName}";
 
-  static String m7(provider) =>
+  static String m7(familyAdminEmail) =>
+      "Please contact <green>${familyAdminEmail}</green> to manage your subscription";
+
+  static String m8(provider) =>
       "Please contact us at support@ente.io to manage your ${provider} subscription.";
 
-  static String m8(currentlyDeleting, totalCount) =>
+  static String m9(currentlyDeleting, totalCount) =>
       "Deleting ${currentlyDeleting} / ${totalCount}";
 
-  static String m9(albumName) =>
+  static String m10(albumName) =>
       "This will remove the public link for accessing \"${albumName}\".";
 
-  static String m10(supportEmail) =>
+  static String m11(supportEmail) =>
       "Please drop an email to ${supportEmail} from your registered email address";
 
-  static String m11(count, storageSaved) =>
+  static String m12(count, storageSaved) =>
       "Your have cleaned up ${Intl.plural(count, one: '${count} duplicate file', other: '${count} duplicate files')}, saving (${storageSaved}!)";
 
-  static String m12(newEmail) => "Email changed to ${newEmail}";
+  static String m13(newEmail) => "Email changed to ${newEmail}";
 
-  static String m13(email) =>
+  static String m14(email) =>
       "${email} does not have an ente account.\n\nSend them an invite to share photos.";
 
-  static String m14(count, formattedNumber) =>
+  static String m15(count, formattedNumber) =>
       "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} on this device have been backed up safely";
 
-  static String m15(count, formattedNumber) =>
+  static String m16(count, formattedNumber) =>
       "${Intl.plural(count, one: '1 file', other: '${formattedNumber} files')} in this album has been backed up safely";
 
-  static String m16(storageAmountInGB) =>
+  static String m17(storageAmountInGB) =>
       "${storageAmountInGB} GB each time someone signs up for a paid plan and applies your code";
 
-  static String m17(endDate) => "Free trial valid till ${endDate}";
+  static String m18(endDate) => "Free trial valid till ${endDate}";
 
-  static String m18(count) =>
+  static String m19(count) =>
       "You can still access ${Intl.plural(count, one: 'it', other: 'them')} on ente as long as you have an active subscription";
 
-  static String m19(sizeInMBorGB) => "Free up ${sizeInMBorGB}";
+  static String m20(sizeInMBorGB) => "Free up ${sizeInMBorGB}";
 
-  static String m20(count, formattedSize) =>
+  static String m21(count, formattedSize) =>
       "${Intl.plural(count, one: 'It can be deleted from the device to free up ${formattedSize}', other: 'They can be deleted from the device to free up ${formattedSize}')}";
 
-  static String m21(count) =>
+  static String m22(count) =>
       "${Intl.plural(count, one: '${count} item', other: '${count} items')}";
 
-  static String m22(count) => "${count} selected";
+  static String m23(count) => "${count} selected";
 
-  static String m23(expiryTime) => "Link will expire on ${expiryTime}";
+  static String m24(expiryTime) => "Link will expire on ${expiryTime}";
 
-  static String m24(maxValue) =>
+  static String m25(maxValue) =>
       "When set to the maximum (${maxValue}), the device limit will be relaxed to allow for temporary spikes of large number of viewers.";
 
-  static String m25(count) =>
+  static String m26(count) =>
       "${Intl.plural(count, zero: 'no memories', one: '${count} memory', other: '${count} memories')}";
 
-  static String m26(count) =>
+  static String m27(count) =>
       "${Intl.plural(count, one: 'Move item', other: 'Move items')}";
 
-  static String m27(albumName) => "Moved successfully to ${albumName}";
+  static String m28(albumName) => "Moved successfully to ${albumName}";
 
-  static String m28(passwordStrengthValue) =>
+  static String m29(passwordStrengthValue) =>
       "Password strength: ${passwordStrengthValue}";
 
-  static String m29(providerName) =>
+  static String m30(providerName) =>
       "Please talk to ${providerName} support if you were charged";
 
-  static String m30(reason) =>
+  static String m31(reason) =>
       "Unfortunately your payment failed due to ${reason}";
 
-  static String m31(toEmail) => "Please email us at ${toEmail}";
+  static String m32(toEmail) => "Please email us at ${toEmail}";
 
-  static String m32(toEmail) => "Please send the logs to \n${toEmail}";
+  static String m33(toEmail) => "Please send the logs to \n${toEmail}";
 
-  static String m33(storeName) => "Rate us on ${storeName}";
+  static String m34(storeName) => "Rate us on ${storeName}";
 
-  static String m34(storageInGB) =>
+  static String m35(storageInGB) =>
       "3. Both of you get ${storageInGB} GB* free";
 
-  static String m35(userEmail) =>
+  static String m36(userEmail) =>
       "${userEmail} will be removed from this shared album\n\nAny photos added by them will also be removed from the album";
 
-  static String m36(endDate) => "Renews on ${endDate}";
+  static String m37(endDate) => "Renews on ${endDate}";
 
-  static String m37(count) => "${count} selected";
+  static String m38(count) => "${count} selected";
 
-  static String m38(count, yourCount) =>
+  static String m39(count, yourCount) =>
       "${count} selected (${yourCount} yours)";
 
-  static String m39(verificationID) =>
+  static String m40(verificationID) =>
       "Here\'s my verification ID: ${verificationID} for ente.io.";
 
-  static String m40(verificationID) =>
+  static String m41(verificationID) =>
       "Hey, can you confirm that this is your ente.io verification ID: ${verificationID}";
 
-  static String m41(referralCode, referralStorageInGB) =>
+  static String m42(referralCode, referralStorageInGB) =>
       "ente referral code: ${referralCode} \n\nApply it in Settings → General → Referrals to get ${referralStorageInGB} GB free after you signup for a paid plan\n\nhttps://ente.io";
 
-  static String m42(numberOfPeople) =>
+  static String m43(numberOfPeople) =>
       "${Intl.plural(numberOfPeople, zero: 'Share with specific people', one: 'Shared with 1 person', other: 'Shared with ${numberOfPeople} people')}";
 
-  static String m43(emailIDs) => "Shared with ${emailIDs}";
+  static String m44(emailIDs) => "Shared with ${emailIDs}";
 
-  static String m44(fileType) =>
+  static String m45(fileType) =>
       "This ${fileType} will be deleted from your device.";
 
-  static String m45(fileType) =>
+  static String m46(fileType) =>
       "This ${fileType} is in both ente and your device.";
 
-  static String m46(fileType) => "This ${fileType} will be deleted from ente.";
+  static String m47(fileType) => "This ${fileType} will be deleted from ente.";
 
-  static String m47(storageAmountInGB) => "${storageAmountInGB} GB";
+  static String m48(storageAmountInGB) => "${storageAmountInGB} GB";
 
-  static String m48(id) =>
+  static String m49(id) =>
       "Your ${id} is already linked to another ente account.\nIf you would like to use your ${id} with this account, please contact our support\'\'";
 
-  static String m49(endDate) =>
+  static String m50(endDate) =>
       "Your subscription will be cancelled on ${endDate}";
 
-  static String m50(completed, total) =>
+  static String m51(completed, total) =>
       "${completed}/${total} memories preserved";
 
-  static String m51(storageAmountInGB) =>
+  static String m52(storageAmountInGB) =>
       "They also get ${storageAmountInGB} GB";
 
-  static String m52(email) => "This is ${email}\'s Verification ID";
+  static String m53(email) => "This is ${email}\'s Verification ID";
 
-  static String m53(email) => "Verify ${email}";
+  static String m54(email) => "Verify ${email}";
 
-  static String m54(count) =>
+  static String m55(count) =>
       "${Intl.plural(count, one: '${count} year ago', other: '${count} years ago')}";
 
-  static String m55(storageSaved) =>
+  static String m56(storageSaved) =>
       "You have successfully freed up ${storageSaved}!";
 
   final messages = _notInlinedMessages(_notInlinedMessages);
@@ -366,13 +369,10 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Confirm recovery key"),
         "confirmYourRecoveryKey":
             MessageLookupByLibrary.simpleMessage("Confirm your recovery key"),
-        "contactFamilyAdminPart1":
-            MessageLookupByLibrary.simpleMessage("Please contact"),
-        "contactFamilyAdminPart2":
-            MessageLookupByLibrary.simpleMessage("to manage your subscription"),
+        "contactFamilyAdmin": m7,
         "contactSupport":
             MessageLookupByLibrary.simpleMessage("Contact support"),
-        "contactToManageSubscription": m7,
+        "contactToManageSubscription": m8,
         "continueLabel": MessageLookupByLibrary.simpleMessage("Continue"),
         "continueOnFreeTrial":
             MessageLookupByLibrary.simpleMessage("Continue on free trial"),
@@ -418,17 +418,15 @@ class MessageLookup extends MessageLookupByLibrary {
         "deleteAccountPermanentlyButton":
             MessageLookupByLibrary.simpleMessage("Delete Account Permanently"),
         "deleteAlbum": MessageLookupByLibrary.simpleMessage("Delete album"),
-        "deleteAlbumDialogPart1": MessageLookupByLibrary.simpleMessage(
-            "Also delete the photos (and videos) present in this album from "),
-        "deleteAlbumDialogPart2Bold":
-            MessageLookupByLibrary.simpleMessage("all"),
-        "deleteAlbumDialogPart3": MessageLookupByLibrary.simpleMessage(
-            " other albums they are part of?"),
+        "deleteAlbumDialog": MessageLookupByLibrary.simpleMessage(
+            "Also delete the photos (and videos) present in this album from <bold>all</bold> other albums they are part of?"),
         "deleteAlbumsDialogBody": MessageLookupByLibrary.simpleMessage(
             "This will delete all empty albums. This is useful when you want to reduce the clutter in your album list."),
         "deleteAll": MessageLookupByLibrary.simpleMessage("Delete All"),
         "deleteConfirmDialogBody": MessageLookupByLibrary.simpleMessage(
             "You are about to permanently delete your account and all its data.\nThis action is irreversible."),
+        "deleteEmailRequest": MessageLookupByLibrary.simpleMessage(
+            "Please send an email to <warning>account-deletion@ente.io</warning> from your registered email address."),
         "deleteEmptyAlbums":
             MessageLookupByLibrary.simpleMessage("Delete empty albums"),
         "deleteEmptyAlbumsWithQuestionMark":
@@ -440,7 +438,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "deleteFromEnte":
             MessageLookupByLibrary.simpleMessage("Delete from ente"),
         "deletePhotos": MessageLookupByLibrary.simpleMessage("Delete photos"),
-        "deleteProgress": m8,
+        "deleteProgress": m9,
         "deleteReason1": MessageLookupByLibrary.simpleMessage(
             "It’s missing a key feature that I need"),
         "deleteReason2": MessageLookupByLibrary.simpleMessage(
@@ -472,7 +470,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "Viewers can still take screenshots or save a copy of your photos using external tools"),
         "disableDownloadWarningTitle":
             MessageLookupByLibrary.simpleMessage("Please note"),
-        "disableLinkMessage": m9,
+        "disableLinkMessage": m10,
         "disableTwofactor":
             MessageLookupByLibrary.simpleMessage("Disable two-factor"),
         "disablingTwofactorAuthentication":
@@ -488,12 +486,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "downloadFailed":
             MessageLookupByLibrary.simpleMessage("Download failed"),
         "downloading": MessageLookupByLibrary.simpleMessage("Downloading..."),
-        "dropSupportEmail": m10,
-        "duplicateFileCountWithStorageSaved": m11,
+        "dropSupportEmail": m11,
+        "duplicateFileCountWithStorageSaved": m12,
         "eligible": MessageLookupByLibrary.simpleMessage("eligible"),
         "email": MessageLookupByLibrary.simpleMessage("Email"),
-        "emailChangedTo": m12,
-        "emailNoEnteAccount": m13,
+        "emailChangedTo": m13,
+        "emailNoEnteAccount": m14,
         "emailYourLogs":
             MessageLookupByLibrary.simpleMessage("Email your logs"),
         "empty": MessageLookupByLibrary.simpleMessage("Empty"),
@@ -570,8 +568,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "feedback": MessageLookupByLibrary.simpleMessage("Feedback"),
         "fileSavedToGallery":
             MessageLookupByLibrary.simpleMessage("File saved to gallery"),
-        "filesBackedUpFromDevice": m14,
-        "filesBackedUpInAlbum": m15,
+        "filesBackedUpFromDevice": m15,
+        "filesBackedUpInAlbum": m16,
         "filesDeleted": MessageLookupByLibrary.simpleMessage("Files deleted"),
         "forYourMemories":
             MessageLookupByLibrary.simpleMessage("for your memories"),
@@ -579,19 +577,17 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Forgot password"),
         "freeStorageClaimed":
             MessageLookupByLibrary.simpleMessage("Free storage claimed"),
-        "freeStorageOnReferralSuccess": m16,
+        "freeStorageOnReferralSuccess": m17,
         "freeStorageUsable":
             MessageLookupByLibrary.simpleMessage("Free storage usable"),
         "freeTrial": MessageLookupByLibrary.simpleMessage("Free trial"),
-        "freeTrialValidTill": m17,
-        "freeUpAccessPostDelete": m18,
-        "freeUpAmount": m19,
+        "freeTrialValidTill": m18,
+        "freeUpAccessPostDelete": m19,
+        "freeUpAmount": m20,
         "freeUpDeviceSpace":
             MessageLookupByLibrary.simpleMessage("Free up device space"),
         "freeUpSpace": MessageLookupByLibrary.simpleMessage("Free up space"),
-        "freeUpSpaceSaving": m20,
-        "fromYourRegisteredEmailAddress": MessageLookupByLibrary.simpleMessage(
-            "from your registered email address."),
+        "freeUpSpaceSaving": m21,
         "general": MessageLookupByLibrary.simpleMessage("General"),
         "generatingEncryptionKeys": MessageLookupByLibrary.simpleMessage(
             "Generating encryption keys..."),
@@ -631,8 +627,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "itLooksLikeSomethingWentWrongPleaseRetryAfterSome":
             MessageLookupByLibrary.simpleMessage(
                 "It looks like something went wrong. Please retry after some time. If the error persists, please contact our support team."),
-        "itemCount": m21,
-        "itemSelectedCount": m22,
+        "itemCount": m22,
+        "itemSelectedCount": m23,
         "itemsShowTheNumberOfDaysRemainingBeforePermanentDeletion":
             MessageLookupByLibrary.simpleMessage(
                 "Items show the number of days remaining before permanent deletion"),
@@ -653,7 +649,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "linkDeviceLimit": MessageLookupByLibrary.simpleMessage("Device limit"),
         "linkEnabled": MessageLookupByLibrary.simpleMessage("Enabled"),
         "linkExpired": MessageLookupByLibrary.simpleMessage("Expired"),
-        "linkExpiresOn": m23,
+        "linkExpiresOn": m24,
         "linkExpiry": MessageLookupByLibrary.simpleMessage("Link expiry"),
         "linkHasExpired":
             MessageLookupByLibrary.simpleMessage("Link has expired"),
@@ -706,16 +702,16 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Manage subscription"),
         "mastodon": MessageLookupByLibrary.simpleMessage("Mastodon"),
         "matrix": MessageLookupByLibrary.simpleMessage("Matrix"),
-        "maxDeviceLimitSpikeHandling": m24,
-        "memoryCount": m25,
+        "maxDeviceLimitSpikeHandling": m25,
+        "memoryCount": m26,
         "merchandise": MessageLookupByLibrary.simpleMessage("Merchandise"),
         "mobileWebDesktop":
             MessageLookupByLibrary.simpleMessage("Mobile, Web, Desktop"),
         "moderateStrength": MessageLookupByLibrary.simpleMessage("Moderate"),
         "monthly": MessageLookupByLibrary.simpleMessage("Monthly"),
-        "moveItem": m26,
+        "moveItem": m27,
         "moveToAlbum": MessageLookupByLibrary.simpleMessage("Move to album"),
-        "movedSuccessfullyTo": m27,
+        "movedSuccessfullyTo": m28,
         "movedToTrash": MessageLookupByLibrary.simpleMessage("Moved to trash"),
         "movingFilesToAlbum":
             MessageLookupByLibrary.simpleMessage("Moving files to album..."),
@@ -731,10 +727,6 @@ class MessageLookup extends MessageLookupByLibrary {
         "noExifData": MessageLookupByLibrary.simpleMessage("No EXIF data"),
         "noHiddenPhotosOrVideos":
             MessageLookupByLibrary.simpleMessage("No hidden photos or videos"),
-        "noPasswordWarningPart1": MessageLookupByLibrary.simpleMessage(
-            "We don\'t store this password, so if you forget,"),
-        "noPasswordWarningPart2":
-            MessageLookupByLibrary.simpleMessage("we cannot decrypt your data"),
         "noPhotosAreBeingBackedUpRightNow":
             MessageLookupByLibrary.simpleMessage(
                 "No photos are being backed up right now"),
@@ -760,12 +752,14 @@ class MessageLookup extends MessageLookupByLibrary {
         "passwordChangedSuccessfully": MessageLookupByLibrary.simpleMessage(
             "Password changed successfully"),
         "passwordLock": MessageLookupByLibrary.simpleMessage("Password lock"),
-        "passwordStrength": m28,
+        "passwordStrength": m29,
+        "passwordWarning": MessageLookupByLibrary.simpleMessage(
+            "We don\'t store this password, so if you forget, <underline>we cannot decrypt your data</underline>"),
         "paymentDetails":
             MessageLookupByLibrary.simpleMessage("Payment details"),
         "paymentFailed": MessageLookupByLibrary.simpleMessage("Payment failed"),
-        "paymentFailedTalkToProvider": m29,
-        "paymentFailedWithReason": m30,
+        "paymentFailedTalkToProvider": m30,
+        "paymentFailedWithReason": m31,
         "pendingSync": MessageLookupByLibrary.simpleMessage("Pending sync"),
         "peopleUsingYourCode":
             MessageLookupByLibrary.simpleMessage("People using your code"),
@@ -789,14 +783,12 @@ class MessageLookup extends MessageLookupByLibrary {
         "pleaseContactSupportIfTheProblemPersists":
             MessageLookupByLibrary.simpleMessage(
                 "Please contact support if the problem persists"),
-        "pleaseEmailUsAt": m31,
+        "pleaseEmailUsAt": m32,
         "pleaseGrantPermissions":
             MessageLookupByLibrary.simpleMessage("Please grant permissions"),
         "pleaseLoginAgain":
             MessageLookupByLibrary.simpleMessage("Please login again"),
-        "pleaseSendAnEmailTo":
-            MessageLookupByLibrary.simpleMessage("Please send an email to"),
-        "pleaseSendTheLogsTo": m32,
+        "pleaseSendTheLogsTo": m33,
         "pleaseTryAgain":
             MessageLookupByLibrary.simpleMessage("Please try again"),
         "pleaseVerifyTheCodeYouHaveEntered":
@@ -828,7 +820,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "raiseTicket": MessageLookupByLibrary.simpleMessage("Raise ticket"),
         "rateTheApp": MessageLookupByLibrary.simpleMessage("Rate the app"),
         "rateUs": MessageLookupByLibrary.simpleMessage("Rate us"),
-        "rateUsOnStore": m33,
+        "rateUsOnStore": m34,
         "recover": MessageLookupByLibrary.simpleMessage("Recover"),
         "recoverAccount":
             MessageLookupByLibrary.simpleMessage("Recover account"),
@@ -859,7 +851,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "1. Give this code to your friends"),
         "referralStep2": MessageLookupByLibrary.simpleMessage(
             "2. They sign up for a paid plan"),
-        "referralStep3": m34,
+        "referralStep3": m35,
         "referrals": MessageLookupByLibrary.simpleMessage("Referrals"),
         "referralsAreCurrentlyPaused": MessageLookupByLibrary.simpleMessage(
             "Referrals are currently paused"),
@@ -883,7 +875,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "removeLink": MessageLookupByLibrary.simpleMessage("Remove link"),
         "removeParticipant":
             MessageLookupByLibrary.simpleMessage("Remove participant"),
-        "removeParticipantBody": m35,
+        "removeParticipantBody": m36,
         "removePublicLink":
             MessageLookupByLibrary.simpleMessage("Remove public link"),
         "removeShareItemsWarning": MessageLookupByLibrary.simpleMessage(
@@ -897,7 +889,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "renameFile": MessageLookupByLibrary.simpleMessage("Rename file"),
         "renewSubscription":
             MessageLookupByLibrary.simpleMessage("Renew subscription"),
-        "renewsOn": m36,
+        "renewsOn": m37,
         "reportABug": MessageLookupByLibrary.simpleMessage("Report a bug"),
         "reportBug": MessageLookupByLibrary.simpleMessage("Report bug"),
         "resendEmail": MessageLookupByLibrary.simpleMessage("Resend email"),
@@ -944,8 +936,8 @@ class MessageLookup extends MessageLookupByLibrary {
         "selectedItemsWillBeDeletedFromAllAlbumsAndMoved":
             MessageLookupByLibrary.simpleMessage(
                 "Selected items will be deleted from all albums and moved to trash."),
-        "selectedPhotos": m37,
-        "selectedPhotosWithYours": m38,
+        "selectedPhotos": m38,
+        "selectedPhotosWithYours": m39,
         "send": MessageLookupByLibrary.simpleMessage("Send"),
         "sendEmail": MessageLookupByLibrary.simpleMessage("Send email"),
         "sendInvite": MessageLookupByLibrary.simpleMessage("Send invite"),
@@ -964,29 +956,29 @@ class MessageLookup extends MessageLookupByLibrary {
         "shareAnAlbumNow":
             MessageLookupByLibrary.simpleMessage("Share an album now"),
         "shareLink": MessageLookupByLibrary.simpleMessage("Share link"),
-        "shareMyVerificationID": m39,
+        "shareMyVerificationID": m40,
         "shareOnlyWithThePeopleYouWant": MessageLookupByLibrary.simpleMessage(
             "Share only with the people you want"),
-        "shareTextConfirmOthersVerificationID": m40,
+        "shareTextConfirmOthersVerificationID": m41,
         "shareTextRecommendUsingEnte": MessageLookupByLibrary.simpleMessage(
             "Download ente so we can easily share original quality photos and videos\n\nhttps://ente.io/#download"),
-        "shareTextReferralCode": m41,
+        "shareTextReferralCode": m42,
         "shareWithNonenteUsers":
             MessageLookupByLibrary.simpleMessage("Share with non-ente users"),
-        "shareWithPeopleSectionTitle": m42,
+        "shareWithPeopleSectionTitle": m43,
         "shareYourFirstAlbum":
             MessageLookupByLibrary.simpleMessage("Share your first album"),
         "sharedAlbumSectionDescription": MessageLookupByLibrary.simpleMessage(
             "Create shared and collaborative albums with other ente users, including users on free plans."),
         "sharedByMe": MessageLookupByLibrary.simpleMessage("Shared by me"),
-        "sharedWith": m43,
+        "sharedWith": m44,
         "sharedWithMe": MessageLookupByLibrary.simpleMessage("Shared with me"),
         "sharing": MessageLookupByLibrary.simpleMessage("Sharing..."),
-        "singleFileDeleteFromDevice": m44,
+        "singleFileDeleteFromDevice": m45,
         "singleFileDeleteHighlight": MessageLookupByLibrary.simpleMessage(
             "It will be deleted from all albums."),
-        "singleFileInBothLocalAndRemote": m45,
-        "singleFileInRemoteOnly": m46,
+        "singleFileInBothLocalAndRemote": m46,
+        "singleFileInRemoteOnly": m47,
         "skip": MessageLookupByLibrary.simpleMessage("Skip"),
         "social": MessageLookupByLibrary.simpleMessage("Social"),
         "someItemsAreInBothEnteAndYourDevice":
@@ -1017,12 +1009,12 @@ class MessageLookup extends MessageLookupByLibrary {
                 "Sorry, we could not generate secure keys on this device.\n\nplease sign up from a different device."),
         "sparkleSuccess": MessageLookupByLibrary.simpleMessage("✨ Success"),
         "startBackup": MessageLookupByLibrary.simpleMessage("Start backup"),
-        "storageInGB": m47,
+        "storageInGB": m48,
         "storageLimitExceeded":
             MessageLookupByLibrary.simpleMessage("Storage limit exceeded"),
         "strongStrength": MessageLookupByLibrary.simpleMessage("Strong"),
-        "subAlreadyLinkedErrMessage": m48,
-        "subWillBeCancelledOn": m49,
+        "subAlreadyLinkedErrMessage": m49,
+        "subWillBeCancelledOn": m50,
         "subscribe": MessageLookupByLibrary.simpleMessage("Subscribe"),
         "subscribeToEnableSharing": MessageLookupByLibrary.simpleMessage(
             "Looks like your subscription has expired. Please subscribe to enable sharing."),
@@ -1035,7 +1027,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "suggestFeatures":
             MessageLookupByLibrary.simpleMessage("Suggest features"),
         "support": MessageLookupByLibrary.simpleMessage("Support"),
-        "syncProgress": m50,
+        "syncProgress": m51,
         "syncStopped": MessageLookupByLibrary.simpleMessage("Sync stopped"),
         "syncing": MessageLookupByLibrary.simpleMessage("Syncing..."),
         "systemTheme": MessageLookupByLibrary.simpleMessage("System"),
@@ -1065,7 +1057,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "theseItemsWillBeDeletedFromYourDevice":
             MessageLookupByLibrary.simpleMessage(
                 "These items will be deleted from your device."),
-        "theyAlsoGetXGb": m51,
+        "theyAlsoGetXGb": m52,
         "theyWillBeDeletedFromAllAlbums": MessageLookupByLibrary.simpleMessage(
             "They will be deleted from all albums."),
         "thisActionCannotBeUndone": MessageLookupByLibrary.simpleMessage(
@@ -1081,7 +1073,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "This email is already in use"),
         "thisImageHasNoExifData":
             MessageLookupByLibrary.simpleMessage("This image has no exif data"),
-        "thisIsPersonVerificationId": m52,
+        "thisIsPersonVerificationId": m53,
         "thisIsYourVerificationId": MessageLookupByLibrary.simpleMessage(
             "This is your Verification ID"),
         "thisWillLogYouOutOfTheFollowingDevice":
@@ -1147,7 +1139,7 @@ class MessageLookup extends MessageLookupByLibrary {
             MessageLookupByLibrary.simpleMessage("Verification ID"),
         "verify": MessageLookupByLibrary.simpleMessage("Verify"),
         "verifyEmail": MessageLookupByLibrary.simpleMessage("Verify email"),
-        "verifyEmailID": m53,
+        "verifyEmailID": m54,
         "verifyPassword":
             MessageLookupByLibrary.simpleMessage("Verify password"),
         "verifying": MessageLookupByLibrary.simpleMessage("Verifying..."),
@@ -1174,7 +1166,7 @@ class MessageLookup extends MessageLookupByLibrary {
         "weveSentAMailTo":
             MessageLookupByLibrary.simpleMessage("We\'ve sent a mail to"),
         "yearly": MessageLookupByLibrary.simpleMessage("Yearly"),
-        "yearsAgo": m54,
+        "yearsAgo": m55,
         "yes": MessageLookupByLibrary.simpleMessage("Yes"),
         "yesCancel": MessageLookupByLibrary.simpleMessage("Yes, cancel"),
         "yesConvertToViewer":
@@ -1202,7 +1194,7 @@ class MessageLookup extends MessageLookupByLibrary {
             "You cannot share with yourself"),
         "youDontHaveAnyArchivedItems": MessageLookupByLibrary.simpleMessage(
             "You don\'t have any archived items."),
-        "youHaveSuccessfullyFreedUp": m55,
+        "youHaveSuccessfullyFreedUp": m56,
         "yourAccountHasBeenDeleted": MessageLookupByLibrary.simpleMessage(
             "Your account has been deleted"),
         "yourPlanWasSuccessfullyDowngraded":

+ 21 - 80
lib/generated/l10n.dart

@@ -290,24 +290,12 @@ class S {
     );
   }
 
-  /// `Please send an email to`
-  String get pleaseSendAnEmailTo {
+  /// `Please send an email to <warning>account-deletion@ente.io</warning> from your registered email address.`
+  String get deleteEmailRequest {
     return Intl.message(
-      'Please send an email to',
-      name: 'pleaseSendAnEmailTo',
-      desc:
-          'This text is part of the sentence \'Please send an email to email@ente.io from your registered email address.\'',
-      args: [],
-    );
-  }
-
-  /// `from your registered email address.`
-  String get fromYourRegisteredEmailAddress {
-    return Intl.message(
-      'from your registered email address.',
-      name: 'fromYourRegisteredEmailAddress',
-      desc:
-          'This text is part of the sentence \'Please send an email to email@ente.io from your registered email address.\'',
+      'Please send an email to <warning>account-deletion@ente.io</warning> from your registered email address.',
+      name: 'deleteEmailRequest',
+      desc: '',
       args: [],
     );
   }
@@ -632,24 +620,12 @@ class S {
     );
   }
 
-  /// `We don't store this password, so if you forget,`
-  String get noPasswordWarningPart1 {
-    return Intl.message(
-      'We don\'t store this password, so if you forget,',
-      name: 'noPasswordWarningPart1',
-      desc:
-          'This text is part1 the sentence \'We don\'t store this password, so if you forget, we cannot decrypt your data.\'',
-      args: [],
-    );
-  }
-
-  /// `we cannot decrypt your data`
-  String get noPasswordWarningPart2 {
+  /// `We don't store this password, so if you forget, <underline>we cannot decrypt your data</underline>`
+  String get passwordWarning {
     return Intl.message(
-      'we cannot decrypt your data',
-      name: 'noPasswordWarningPart2',
-      desc:
-          'This text is part2 the sentence \'We don\'t store this password, so if you forget, we cannot decrypt your data.\'',
+      'We don\'t store this password, so if you forget, <underline>we cannot decrypt your data</underline>',
+      name: 'passwordWarning',
+      desc: '',
       args: [],
     );
   }
@@ -2497,35 +2473,12 @@ class S {
     );
   }
 
-  /// `Also delete the photos (and videos) present in this album from `
-  String get deleteAlbumDialogPart1 {
+  /// `Also delete the photos (and videos) present in this album from <bold>all</bold> other albums they are part of?`
+  String get deleteAlbumDialog {
     return Intl.message(
-      'Also delete the photos (and videos) present in this album from ',
-      name: 'deleteAlbumDialogPart1',
-      desc:
-          'Part of this string \'Also delete the photos (and videos) present in this album from all other albums they are part of?\'',
-      args: [],
-    );
-  }
-
-  /// `all`
-  String get deleteAlbumDialogPart2Bold {
-    return Intl.message(
-      'all',
-      name: 'deleteAlbumDialogPart2Bold',
-      desc:
-          'Part of this string \'Also delete the photos (and videos) present in this album from all other albums they are part of?\'',
-      args: [],
-    );
-  }
-
-  /// ` other albums they are part of?`
-  String get deleteAlbumDialogPart3 {
-    return Intl.message(
-      ' other albums they are part of?',
-      name: 'deleteAlbumDialogPart3',
-      desc:
-          'Part of this string \'Also delete the photos (and videos) present in this album from all other albums they are part of?\'',
+      'Also delete the photos (and videos) present in this album from <bold>all</bold> other albums they are part of?',
+      name: 'deleteAlbumDialog',
+      desc: '',
       args: [],
     );
   }
@@ -4341,25 +4294,13 @@ class S {
     );
   }
 
-  /// `Please contact`
-  String get contactFamilyAdminPart1 {
+  /// `Please contact <green>{familyAdminEmail}</green> to manage your subscription`
+  String contactFamilyAdmin(Object familyAdminEmail) {
     return Intl.message(
-      'Please contact',
-      name: 'contactFamilyAdminPart1',
-      desc:
-          'Part1 of the sentence \'Please contact {familyAdminName} to manage your subscription\'',
-      args: [],
-    );
-  }
-
-  /// `to manage your subscription`
-  String get contactFamilyAdminPart2 {
-    return Intl.message(
-      'to manage your subscription',
-      name: 'contactFamilyAdminPart2',
-      desc:
-          'Part2 of the sentence \'Please contact {familyAdminName} to manage your subscription\'',
-      args: [],
+      'Please contact <green>$familyAdminEmail</green> to manage your subscription',
+      name: 'contactFamilyAdmin',
+      desc: '',
+      args: [familyAdminEmail],
     );
   }
 

+ 4 - 38
lib/l10n/intl_en.arb

@@ -23,14 +23,7 @@
   "deleteReason4": "My reason isn’t listed",
   "sendEmail": "Send email",
   "deleteRequestSLAText": "Your request will be processed within 72 hours.",
-  "pleaseSendAnEmailTo": "Please send an email to",
-  "@pleaseSendAnEmailTo": {
-    "description": "This text is part of the sentence 'Please send an email to email@ente.io from your registered email address.'"
-  },
-  "fromYourRegisteredEmailAddress": "from your registered email address.",
-  "@fromYourRegisteredEmailAddress": {
-    "description": "This text is part of the sentence 'Please send an email to email@ente.io from your registered email address.'"
-  },
+  "deleteEmailRequest": "Please send an email to <warning>account-deletion@ente.io</warning> from your registered email address.",
   "ok": "Ok",
   "createAccount": "Create account",
   "createNewAccount": "Create new account",
@@ -63,14 +56,7 @@
   "changePasswordTitle": "Change password",
   "resetPasswordTitle": "Reset password",
   "encryptionKeys": "Encryption keys",
-  "noPasswordWarningPart1": "We don't store this password, so if you forget,",
-  "@noPasswordWarningPart1": {
-    "description": "This text is part1 the sentence 'We don't store this password, so if you forget, we cannot decrypt your data.'"
-  },
-  "noPasswordWarningPart2": "we cannot decrypt your data",
-  "@noPasswordWarningPart2": {
-    "description": "This text is part2 the sentence 'We don't store this password, so if you forget, we cannot decrypt your data.'"
-  },
+  "passwordWarning": "We don't store this password, so if you forget, <underline>we cannot decrypt your data</underline>",
   "enterPasswordToEncrypt": "Enter a password we can use to encrypt your data",
   "enterNewPasswordToEncrypt": "Enter a new password we can use to encrypt your data",
   "weakStrength": "Weak",
@@ -340,18 +326,7 @@
   "canOnlyRemoveFilesOwnedByYou": "Can only remove files owned by you",
   "deleteSharedAlbum": "Delete shared album?",
   "deleteAlbum": "Delete album",
-  "deleteAlbumDialogPart1": "Also delete the photos (and videos) present in this album from ",
-  "@deleteAlbumDialogPart1": {
-    "description": "Part of this string 'Also delete the photos (and videos) present in this album from all other albums they are part of?'"
-  },
-  "deleteAlbumDialogPart2Bold": "all",
-  "@deleteAlbumDialogPart2Bold": {
-    "description": "Part of this string 'Also delete the photos (and videos) present in this album from all other albums they are part of?'"
-  },
-  "deleteAlbumDialogPart3": " other albums they are part of?",
-  "@deleteAlbumDialogPart3": {
-    "description": "Part of this string 'Also delete the photos (and videos) present in this album from all other albums they are part of?'"
-  },
+  "deleteAlbumDialog": "Also delete the photos (and videos) present in this album from <bold>all</bold> other albums they are part of?",
   "deleteSharedAlbumDialogBody": "The album will be deleted for everyone\n\nYou will lose access to shared photos in this album that are owned by others",
   "yesRemove": "Yes, remove",
   "creatingLink": "Creating link...",
@@ -628,16 +603,7 @@
   "pleaseWaitForSometimeBeforeRetrying": "Please wait for sometime before retrying",
   "paymentFailedWithReason": "Unfortunately your payment failed due to {reason}",
   "youAreOnAFamilyPlan": "You are on a family plan!",
-  "contactFamilyAdminPart1": "Please contact",
-  "@contactFamilyAdminPart1": {
-    "description": "Part1 of the sentence 'Please contact {familyAdminName} to manage your subscription'",
-    "type": "text"
-  },
-  "contactFamilyAdminPart2": "to manage your subscription",
-  "@contactFamilyAdminPart2": {
-    "description": "Part2 of the sentence 'Please contact {familyAdminName} to manage your subscription'",
-    "type": "text"
-  },
+  "contactFamilyAdmin": "Please contact <green>{familyAdminEmail}</green> to manage your subscription",
   "leaveFamily": "Leave family",
   "areYouSureThatYouWantToLeaveTheFamily": "Are you sure that you want to leave the family plan?",
   "leave": "Leave",

+ 25 - 9
lib/services/user_service.dart

@@ -340,8 +340,11 @@ class UserService {
     } catch (e) {
       await dialog.hide();
       _logger.severe(e);
-      showErrorDialog(context, S.of(context).oops,
-          S.of(context).verificationFailedPleaseTryAgain);
+      showErrorDialog(
+        context,
+        S.of(context).oops,
+        S.of(context).verificationFailedPleaseTryAgain,
+      );
     }
   }
 
@@ -373,13 +376,19 @@ class UserService {
         Bus.instance.fire(UserDetailsChangedEvent());
         return;
       }
-      showErrorDialog(context, S.of(context).oops,
-          S.of(context).verificationFailedPleaseTryAgain);
+      showErrorDialog(
+        context,
+        S.of(context).oops,
+        S.of(context).verificationFailedPleaseTryAgain,
+      );
     } on DioError catch (e) {
       await dialog.hide();
       if (e.response != null && e.response!.statusCode == 403) {
         showErrorDialog(
-            context, S.of(context).oops, S.of(context).thisEmailIsAlreadyInUse);
+          context,
+          S.of(context).oops,
+          S.of(context).thisEmailIsAlreadyInUse,
+        );
       } else {
         showErrorDialog(
           context,
@@ -390,8 +399,11 @@ class UserService {
     } catch (e) {
       await dialog.hide();
       _logger.severe(e);
-      showErrorDialog(context, S.of(context).oops,
-          S.of(context).verificationFailedPleaseTryAgain);
+      showErrorDialog(
+        context,
+        S.of(context).oops,
+        S.of(context).verificationFailedPleaseTryAgain,
+      );
     }
   }
 
@@ -612,7 +624,9 @@ class UserService {
       );
       if (response.statusCode == 200) {
         showShortToast(
-            context, S.of(context).twofactorAuthenticationSuccessfullyReset);
+          context,
+          S.of(context).twofactorAuthenticationSuccessfullyReset,
+        );
         await _saveConfiguration(response);
         Navigator.of(context).pushAndRemoveUntil(
           MaterialPageRoute(
@@ -733,7 +747,9 @@ class UserService {
 
   Future<void> disableTwoFactor(BuildContext context) async {
     final dialog = createProgressDialog(
-        context, S.of(context).disablingTwofactorAuthentication);
+      context,
+      S.of(context).disablingTwofactorAuthentication,
+    );
     await dialog.show();
     try {
       await _enteDio.post(

+ 10 - 21
lib/ui/account/delete_account_page.dart

@@ -14,6 +14,7 @@ import 'package:photos/utils/crypto_util.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/email_util.dart';
 import "package:photos/utils/toast_util.dart";
+import "package:styled_text/styled_text.dart";
 
 class DeleteAccountPage extends StatefulWidget {
   const DeleteAccountPage({
@@ -280,29 +281,17 @@ class _DeleteAccountPageState extends State<DeleteAccountPage> {
           color: Colors.red,
         ),
       ),
-      content: RichText(
-        text: TextSpan(
-          children: [
-            TextSpan(
-              text: S.of(context).pleaseSendAnEmailTo,
-            ),
-            TextSpan(
-              text: "account-deletion@ente.io",
-              style: TextStyle(
-                color: Colors.orange[300],
-              ),
-            ),
-            TextSpan(
-              text:
-                  " ${S.of(context).fromYourRegisteredEmailAddress}\n\n${S.of(context).deleteRequestSLAText}",
+      content: StyledText(
+        text:
+            "${S.of(context).deleteEmailRequest}\n\n${S.of(context).deleteRequestSLAText}",
+        tags: {
+          'warning': StyledTextTag(
+            style: TextStyle(
+              fontWeight: FontWeight.bold,
+              color: Colors.orange[300],
             ),
-          ],
-          style: TextStyle(
-            color: Theme.of(context).colorScheme.onSurface,
-            height: 1.5,
-            fontSize: 16,
           ),
-        ),
+        },
       ),
       actions: [
         TextButton(

+ 15 - 20
lib/ui/account/password_entry_page.dart

@@ -15,6 +15,7 @@ import 'package:photos/ui/payment/subscription.dart';
 import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/navigation_util.dart';
 import 'package:photos/utils/toast_util.dart';
+import "package:styled_text/styled_text.dart";
 
 enum PasswordEntryMode {
   set,
@@ -173,26 +174,20 @@ class _PasswordEntryPageState extends State<PasswordEntryPage> {
                 const Padding(padding: EdgeInsets.all(8)),
                 Padding(
                   padding: const EdgeInsets.symmetric(horizontal: 20),
-                  child: RichText(
-                    text: TextSpan(
-                      style: Theme.of(context)
-                          .textTheme
-                          .subtitle1!
-                          .copyWith(fontSize: 14),
-                      children: [
-                        TextSpan(
-                          text: '${S.of(context).noPasswordWarningPart1} ',
-                        ),
-                        TextSpan(
-                          text: S.of(context).noPasswordWarningPart2,
-                          style:
-                              Theme.of(context).textTheme.subtitle1!.copyWith(
-                                    fontSize: 14,
-                                    decoration: TextDecoration.underline,
-                                  ),
-                        ),
-                      ],
-                    ),
+                  child: StyledText(
+                    text: S.of(context).passwordWarning,
+                    style: Theme.of(context)
+                        .textTheme
+                        .subtitle1!
+                        .copyWith(fontSize: 14),
+                    tags: {
+                      'underline': StyledTextTag(
+                        style: Theme.of(context).textTheme.subtitle1!.copyWith(
+                              fontSize: 14,
+                              decoration: TextDecoration.underline,
+                            ),
+                      ),
+                    },
                   ),
                 ),
                 const Padding(padding: EdgeInsets.all(12)),

+ 50 - 47
lib/ui/actions/collection/collection_sharing_actions.dart

@@ -25,6 +25,7 @@ import 'package:photos/utils/dialog_util.dart';
 import 'package:photos/utils/email_util.dart';
 import 'package:photos/utils/share_util.dart';
 import 'package:photos/utils/toast_util.dart';
+import "package:styled_text/styled_text.dart";
 
 class CollectionActions {
   final Logger logger = Logger((CollectionActions).toString());
@@ -96,8 +97,11 @@ class CollectionActions {
     BuildContext context,
     List<File> files,
   ) async {
-    final dialog = createProgressDialog(context, S.of(context).creatingLink,
-        isDismissible: true);
+    final dialog = createProgressDialog(
+      context,
+      S.of(context).creatingLink,
+      isDismissible: true,
+    );
     dialog.show();
     try {
       // create album with emptyName, use collectionCreationTime on UI to
@@ -143,31 +147,32 @@ class CollectionActions {
     User user,
   ) async {
     final actionResult = await showActionSheet(
-        context: context,
-        buttons: [
-          ButtonWidget(
-            buttonType: ButtonType.critical,
-            isInAlert: true,
-            shouldStickToDarkTheme: true,
-            buttonAction: ButtonAction.first,
-            shouldSurfaceExecutionStates: true,
-            labelText: S.of(context).yesRemove,
-            onTap: () async {
-              final newSharees = await CollectionsService.instance
-                  .unshare(collection.id, user.email);
-              collection.updateSharees(newSharees);
-            },
-          ),
-          ButtonWidget(
-            buttonType: ButtonType.secondary,
-            buttonAction: ButtonAction.cancel,
-            isInAlert: true,
-            shouldStickToDarkTheme: true,
-            labelText: S.of(context).cancel,
-          )
-        ],
-        title: S.of(context).removeWithQuestionMark,
-        body: S.of(context).removeParticipantBody(user.email));
+      context: context,
+      buttons: [
+        ButtonWidget(
+          buttonType: ButtonType.critical,
+          isInAlert: true,
+          shouldStickToDarkTheme: true,
+          buttonAction: ButtonAction.first,
+          shouldSurfaceExecutionStates: true,
+          labelText: S.of(context).yesRemove,
+          onTap: () async {
+            final newSharees = await CollectionsService.instance
+                .unshare(collection.id, user.email);
+            collection.updateSharees(newSharees);
+          },
+        ),
+        ButtonWidget(
+          buttonType: ButtonType.secondary,
+          buttonAction: ButtonAction.cancel,
+          isInAlert: true,
+          shouldStickToDarkTheme: true,
+          labelText: S.of(context).cancel,
+        )
+      ],
+      title: S.of(context).removeWithQuestionMark,
+      body: S.of(context).removeParticipantBody(user.email),
+    );
     if (actionResult?.action != null) {
       if (actionResult!.action == ButtonAction.error) {
         showGenericErrorDialog(context: context);
@@ -193,16 +198,22 @@ class CollectionActions {
       );
       return false;
     } else if (email.trim() == Configuration.instance.getEmail()) {
-      await showErrorDialog(context, S.of(context).oops,
-          S.of(context).youCannotShareWithYourself);
+      await showErrorDialog(
+        context,
+        S.of(context).oops,
+        S.of(context).youCannotShareWithYourself,
+      );
       return false;
     }
 
     ProgressDialog? dialog;
     String? publicKey;
     if (showProgress) {
-      dialog = createProgressDialog(context, S.of(context).sharing,
-          isDismissible: true);
+      dialog = createProgressDialog(
+        context,
+        S.of(context).sharing,
+        isDismissible: true,
+      );
       await dialog.show();
     }
 
@@ -325,22 +336,14 @@ class CollectionActions {
           isInAlert: true,
         ),
       ],
-      bodyWidget: RichText(
-        text: TextSpan(
-          style: textTheme.body.copyWith(color: textMutedDark),
-          children: <TextSpan>[
-            TextSpan(
-              text: S.of(bContext).deleteAlbumDialogPart1,
-            ),
-            TextSpan(
-              text: S.of(bContext).deleteAlbumDialogPart2Bold,
-              style: textTheme.body.copyWith(color: textBaseDark),
-            ),
-            TextSpan(
-              text: S.of(bContext).deleteAlbumDialogPart3,
-            ),
-          ],
-        ),
+      bodyWidget: StyledText(
+        text: S.of(bContext).deleteAlbumDialog,
+        style: textTheme.body.copyWith(color: textMutedDark),
+        tags: {
+          'bold': StyledTextTag(
+            style: textTheme.body.copyWith(color: textBaseDark),
+          ),
+        },
       ),
       actionSheetType: ActionSheetType.defaultActionSheet,
     );

+ 25 - 28
lib/ui/payment/child_subscription_widget.dart

@@ -3,8 +3,10 @@ import 'package:logging/logging.dart';
 import "package:photos/generated/l10n.dart";
 import 'package:photos/models/user_details.dart';
 import 'package:photos/services/user_service.dart';
+import "package:photos/theme/ente_theme.dart";
 import 'package:photos/ui/components/buttons/button_widget.dart';
 import 'package:photos/utils/dialog_util.dart';
+import "package:styled_text/styled_text.dart";
 
 class ChildSubscriptionWidget extends StatelessWidget {
   const ChildSubscriptionWidget({
@@ -35,24 +37,16 @@ class ChildSubscriptionWidget extends StatelessWidget {
           ),
           Padding(
             padding: const EdgeInsets.symmetric(horizontal: 16),
-            child: RichText(
-              textAlign: TextAlign.center,
-              text: TextSpan(
-                children: [
-                  TextSpan(
-                    text: S.of(context).contactFamilyAdminPart1 + " ",
-                  ),
-                  TextSpan(
-                    text: familyAdmin,
-                    style:
-                        const TextStyle(color: Color.fromRGBO(29, 185, 84, 1)),
-                  ),
-                  TextSpan(
-                    text: " " + S.of(context).contactFamilyAdminPart2,
+            child: StyledText(
+              text: S.of(context).contactFamilyAdmin(familyAdmin),
+              style: Theme.of(context).textTheme.bodyText1,
+              tags: {
+                'green': StyledTextTag(
+                  style: TextStyle(
+                    color: getEnteColorScheme(context).primary500,
                   ),
-                ],
-                style: Theme.of(context).textTheme.bodyText1,
-              ),
+                ),
+              },
             ),
           ),
           const Padding(
@@ -90,17 +84,20 @@ class ChildSubscriptionWidget extends StatelessWidget {
           Expanded(
             child: Align(
               alignment: Alignment.bottomCenter,
-              child: RichText(
-                textAlign: TextAlign.center,
-                text: TextSpan(
-                  children: [
-                    TextSpan(
-                      text: S
-                          .of(context)
-                          .pleaseContactSupportAndWeWillBeHappyToHelp,
-                      style: Theme.of(context).textTheme.bodyText2,
-                    ),
-                  ],
+              child: Padding(
+                padding: const EdgeInsets.all(20),
+                child: RichText(
+                  textAlign: TextAlign.center,
+                  text: TextSpan(
+                    children: [
+                      TextSpan(
+                        text: S
+                            .of(context)
+                            .pleaseContactSupportAndWeWillBeHappyToHelp,
+                        style: Theme.of(context).textTheme.bodyText2,
+                      ),
+                    ],
+                  ),
                 ),
               ),
             ),

+ 16 - 0
pubspec.lock

@@ -1634,6 +1634,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "1.2.0"
+  styled_text:
+    dependency: "direct main"
+    description:
+      name: styled_text
+      sha256: f72928d1ebe8cb149e3b34a689cb1ddca696b808187cf40ac3a0bd183dff379c
+      url: "https://pub.dev"
+    source: hosted
+    version: "7.0.0"
   syncfusion_flutter_core:
     dependency: "direct main"
     description:
@@ -1984,6 +1992,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "6.2.2"
+  xmlstream:
+    dependency: transitive
+    description:
+      name: xmlstream
+      sha256: "2d10c69a9d5fc46f71798b80ee6db15bc0d5bf560fdbdd264776cbeee0c83631"
+      url: "https://pub.dev"
+    source: hosted
+    version: "1.0.0"
   yaml:
     dependency: transitive
     description:

+ 1 - 0
pubspec.yaml

@@ -107,6 +107,7 @@ dependencies:
   sqflite: ^2.0.0+3
   sqflite_migration: ^0.3.0
   step_progress_indicator: ^1.0.2
+  styled_text: ^7.0.0
   syncfusion_flutter_core: ^19.2.49
   syncfusion_flutter_sliders: ^19.2.49
   tflite_flutter: ^0.9.0