Implement gradle task for Mollyify translations

This commit is contained in:
Oscar Mira 2024-04-22 18:58:05 +02:00
parent 7ba7b031b9
commit 9117a15736
No known key found for this signature in database
GPG key ID: B371B98C5DC32237
4 changed files with 200 additions and 250 deletions

View file

@ -9,7 +9,7 @@ plugins {
id("app.cash.exhaustive")
id("kotlin-parcelize")
id("com.squareup.wire")
id("translations")
id("molly")
id("licenses")
}

View file

@ -38,12 +38,12 @@
<string name="AlbumThumbnailView_plus" translatable="false">\+%d</string>
<!-- ApplicationMigrationActivity -->
<string name="ApplicationMigrationActivity__signal_is_updating">Molly is updating…</string>
<string mollyify="true" name="ApplicationMigrationActivity__signal_is_updating">Molly is updating…</string>
<!-- ApplicationPreferencesActivity -->
<string name="ApplicationPreferenceActivity_you_havent_set_a_passphrase_yet">You haven\'t set a passphrase yet!</string>
<string name="ApplicationPreferencesActivity_disable_passphrase">Disable passphrase?</string>
<string name="ApplicationPreferencesActivity_this_will_permanently_unlock_signal_and_message_notifications">This will permanently unlock Molly and message notifications.</string>
<string mollyify="true" name="ApplicationPreferencesActivity_this_will_permanently_unlock_signal_and_message_notifications">This will permanently unlock Molly and message notifications.</string>
<string name="ApplicationPreferencesActivity_disable">Disable</string>
<string name="ApplicationPreferencesActivity_error_connecting_to_server">Error connecting to server!</string>
<string name="ApplicationPreferencesActivity_pins_are_required_for_registration_lock">PINs are required for registration lock. To disable PINs, please first disable registration lock.</string>
@ -80,15 +80,15 @@
<string name="AttachmentKeyboard_file">File</string>
<string name="AttachmentKeyboard_contact">Contact</string>
<string name="AttachmentKeyboard_location">Location</string>
<string name="AttachmentKeyboard_Signal_needs_permission_to_show_your_photos_and_videos">Molly needs permission to show your photos and videos.</string>
<string mollyify="true" name="AttachmentKeyboard_Signal_needs_permission_to_show_your_photos_and_videos">Molly needs permission to show your photos and videos.</string>
<string name="AttachmentKeyboard_give_access">Give Access</string>
<string name="AttachmentKeyboard_payment">Payment</string>
<!-- AttachmentManager -->
<string name="AttachmentManager_cant_open_media_selection">Can\'t find an app to select media.</string>
<string name="AttachmentManager_signal_requires_the_external_storage_permission_in_order_to_attach_photos_videos_or_audio">Molly requires the Storage permission in order to attach photos, videos, or audio, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Storage\".</string>
<string name="AttachmentManager_signal_requires_contacts_permission_in_order_to_attach_contact_information">Molly requires Contacts permission in order to attach contact information, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Contacts\".</string>
<string name="AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location">Molly requires Location permission in order to attach a location, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Location\".</string>
<string mollyify="true" name="AttachmentManager_signal_requires_the_external_storage_permission_in_order_to_attach_photos_videos_or_audio">Molly requires the Storage permission in order to attach photos, videos, or audio, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Storage\".</string>
<string mollyify="true" name="AttachmentManager_signal_requires_contacts_permission_in_order_to_attach_contact_information">Molly requires Contacts permission in order to attach contact information, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Contacts\".</string>
<string mollyify="true" name="AttachmentManager_signal_requires_location_information_in_order_to_attach_a_location">Molly requires Location permission in order to attach a location, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Location\".</string>
<!-- Alert dialog title to show the recipient has not activated payments -->
<string name="AttachmentManager__not_activated_payments">%1$s hasn\'t activated Payments </string>
<!-- Alert dialog description to send the recipient a request to activate payments -->
@ -222,7 +222,7 @@
<string name="CameraContacts_no_signal_contacts">No Signal contacts</string>
<string name="CameraContacts_you_can_only_use_the_camera_button">You can only use the camera button to send photos to Signal contacts. </string>
<string name="CameraContacts_cant_find_who_youre_looking_for">Can\'t find who you\'re looking for?</string>
<string name="CameraContacts_invite_a_contact_to_join_signal">Invite a contact to join Molly</string>
<string mollyify="true" name="CameraContacts_invite_a_contact_to_join_signal">Invite a contact to join Molly</string>
<string name="CameraContacts__menu_search">Search</string>
<!-- Censorship Circumvention Megaphone -->
@ -236,12 +236,12 @@
<string name="CensorshipCircumventionMegaphone_no_thanks">No thanks</string>
<!-- ClientDeprecatedActivity -->
<string name="ClientDeprecatedActivity_update_signal">Update Molly</string>
<string mollyify="true" name="ClientDeprecatedActivity_update_signal">Update Molly</string>
<string name="ClientDeprecatedActivity_this_version_of_the_app_is_no_longer_supported">This version of the app is no longer supported. To continue sending and receiving messages, update to the latest version.</string>
<string name="ClientDeprecatedActivity_update">Update</string>
<string name="ClientDeprecatedActivity_dont_update">Don\'t Update</string>
<string name="ClientDeprecatedActivity_warning">Warning</string>
<string name="ClientDeprecatedActivity_your_version_of_signal_has_expired_you_can_view_your_message_history">Your version of Signal has expired. You can view your message history but you won\'t be able to send or receive messages until you update.</string>
<string mollyify="true" name="ClientDeprecatedActivity_your_version_of_signal_has_expired_you_can_view_your_message_history">Your version of Molly has expired. You can view your message history but you won\'t be able to send or receive messages until you update.</string>
<!-- CommunicationActions -->
<string name="CommunicationActions_no_browser_found">No web browser found.</string>
@ -372,7 +372,7 @@
<string name="ConversationActivity_transport_signal">Signal message</string>
<!-- The content description for button to send a message in a conversation -->
<string name="ConversationActivity_send_message_content_description">Send message</string>
<string name="ConversationActivity_lets_switch_to_signal">Let\'s switch to Molly %1$s</string>
<string mollyify="true" name="ConversationActivity_lets_switch_to_signal">Let\'s switch to Molly %1$s</string>
<string name="ConversationActivity_specify_recipient">Please choose a contact</string>
<string name="ConversationActivity_attachment_exceeds_size_limits">Attachment exceeds size limits for the type of message you\'re sending.</string>
<string name="ConversationActivity_unable_to_record_audio">Unable to record audio!</string>
@ -386,15 +386,15 @@
<string name="ConversationActivity_your_request_to_join_has_been_sent_to_the_group_admin">Your request to join has been sent to the group admin. You\'ll be notified when they take action.</string>
<string name="ConversationActivity_cancel_request">Cancel Request</string>
<string name="ConversationActivity_to_send_audio_messages_allow_signal_access_to_your_microphone">To send audio messages, allow Molly access to your microphone.</string>
<string name="ConversationActivity_signal_requires_the_microphone_permission_in_order_to_send_audio_messages">Molly requires the Microphone permission in order to send audio messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\".</string>
<string name="ConversationActivity_signal_needs_the_microphone_and_camera_permissions_in_order_to_call_s">Molly needs the Microphone and Camera permissions in order to call %s, but they have been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string name="ConversationActivity_to_capture_photos_and_video_allow_signal_access_to_the_camera">To capture photos and video, allow Molly access to the camera.</string>
<string name="ConversationActivity_signal_needs_the_camera_permission_to_take_photos_or_video">Molly needs the Camera permission to take photos or video, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string name="ConversationActivity_signal_needs_camera_permissions_to_take_photos_or_video">Molly needs Camera permissions to take photos or video</string>
<string mollyify="true" name="ConversationActivity_to_send_audio_messages_allow_signal_access_to_your_microphone">To send audio messages, allow Molly access to your microphone.</string>
<string mollyify="true" name="ConversationActivity_signal_requires_the_microphone_permission_in_order_to_send_audio_messages">Molly requires the Microphone permission in order to send audio messages, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\".</string>
<string mollyify="true" name="ConversationActivity_signal_needs_the_microphone_and_camera_permissions_in_order_to_call_s">Molly needs the Microphone and Camera permissions in order to call %s, but they have been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string mollyify="true" name="ConversationActivity_to_capture_photos_and_video_allow_signal_access_to_the_camera">To capture photos and video, allow Molly access to the camera.</string>
<string mollyify="true" name="ConversationActivity_signal_needs_the_camera_permission_to_take_photos_or_video">Molly needs the Camera permission to take photos or video, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string mollyify="true" name="ConversationActivity_signal_needs_camera_permissions_to_take_photos_or_video">Molly needs Camera permissions to take photos or video</string>
<string name="ConversationActivity_enable_the_microphone_permission_to_capture_videos_with_sound">Enable the microphone permission to capture videos with sound.</string>
<string name="ConversationActivity_signal_needs_the_recording_permissions_to_capture_video">Molly needs microphone permissions to record videos, but they have been denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string name="ConversationActivity_signal_needs_recording_permissions_to_capture_video">Molly needs microphone permissions to record videos.</string>
<string mollyify="true" name="ConversationActivity_signal_needs_the_recording_permissions_to_capture_video">Molly needs microphone permissions to record videos, but they have been denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string mollyify="true" name="ConversationActivity_signal_needs_recording_permissions_to_capture_video">Molly needs microphone permissions to record videos.</string>
<string name="ConversationActivity_quoted_contact_message">%1$s %2$s</string>
<string name="ConversationActivity_no">No</string>
@ -411,7 +411,7 @@
<string name="ConversationActivity_you_will_leave_this_group_and_it_will_be_deleted_from_all_of_your_devices">You will leave this group, and it will be deleted from all your devices.</string>
<string name="ConversationActivity_delete">Delete</string>
<string name="ConversationActivity_delete_and_leave">Delete and leave</string>
<string name="ConversationActivity__to_call_s_signal_needs_access_to_your_microphone">To call %1$s, Molly needs access to your microphone</string>
<string mollyify="true" name="ConversationActivity__to_call_s_signal_needs_access_to_your_microphone">To call %1$s, Molly needs access to your microphone</string>
<string name="ConversationActivity_join">Join</string>
@ -424,9 +424,9 @@
<!-- Message shown when opening an SMS conversation with SMS disabled and there are no exported messages -->
<string name="ConversationActivity__sms_messaging_is_no_longer_supported_in_signal_invite_s_to_to_signal_to_keep_the_conversation_here">SMS messaging is no longer supported in Signal. Invite %1$s to Signal to keep the conversation here.</string>
<!-- Message shown when opening a conversation with an unregistered user who used to be on Signal -->
<string name="ConversationActivity__this_person_is_no_longer_using_signal">This person is no longer using Molly. Invite them to Molly to keep the conversation here.</string>
<string mollyify="true" name="ConversationActivity__this_person_is_no_longer_using_signal">This person is no longer using Molly. Invite them to Molly to keep the conversation here.</string>
<!-- Action button shown when opening an SMS conversation with SMS disabled and there are no exported messages -->
<string name="ConversationActivity__invite_to_signal">Invite to Molly</string>
<string mollyify="true" name="ConversationActivity__invite_to_signal">Invite to Molly</string>
<!-- Snackbar message shown after dismissing the full screen sms export megaphone indicating we\'ll do it again soon -->
<string name="ConversationActivity__you_will_be_reminded_again_soon">You will be reminded again soon.</string>
@ -511,13 +511,13 @@
<!-- Message shown after successfully blocking join requests for a user -->
<string name="ConversationFragment__blocked">Blocked</string>
<!-- Action shown to allow a user to update their application because it has expired -->
<string name="ConversationFragment__update_build">Update Molly</string>
<string mollyify="true" name="ConversationFragment__update_build">Update Molly</string>
<!-- Action shown to allow a user to re-register as they are no longer registered -->
<string name="ConversationFragment__reregister_signal">Re-register Molly</string>
<string mollyify="true" name="ConversationFragment__reregister_signal">Re-register Molly</string>
<!-- Label for a button displayed in the conversation toolbar to return to the previous screen. -->
<string name="ConversationFragment__content_description_back_button">Navigate back.</string>
<!-- Label for a button displayed in the conversation toolbar to open the main screen of the app. -->
<string name="ConversationFragment__content_description_launch_signal_button">Open Molly</string>
<string mollyify="true" name="ConversationFragment__content_description_launch_signal_button">Open Molly</string>
<!-- Dialog title shown when more than one contact in a group conversation is no longer verified -->
<string name="ConversationFragment__no_longer_verified">No longer verified</string>
<!-- Button shown in conversation header when in a message request state and no groups in common to show new message safety tips -->
@ -706,7 +706,7 @@
<string name="BackupsPreferenceFragment__test_your_backup_passphrase">Test your backup passphrase and verify that it matches</string>
<string name="BackupsPreferenceFragment__turn_on">Turn on</string>
<string name="BackupsPreferenceFragment__turn_off">Turn off</string>
<string name="BackupsPreferenceFragment__to_restore_a_backup">To restore a backup, install a new copy of Molly. Open the app and tap "Restore backup", then locate a backup file. %1$s</string>
<string mollyify="true" name="BackupsPreferenceFragment__to_restore_a_backup">To restore a backup, install a new copy of Molly. Open the app and tap "Restore backup", then locate a backup file. %1$s</string>
<string name="BackupsPreferenceFragment__learn_more">Learn more</string>
<string name="BackupsPreferenceFragment__in_progress">In progress…</string>
<!-- Status text shown in backup preferences when verifying a backup -->
@ -714,7 +714,7 @@
<string name="BackupsPreferenceFragment__d_so_far">%1$d so far…</string>
<!-- Show percentage of completion of backup -->
<string name="BackupsPreferenceFragment__s_so_far">%1$s%% so far…</string>
<string name="BackupsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups">Molly requires external storage permission in order to create backups, but it has been permanently denied. Please continue to app settings, select \"Permissions\" and enable \"Storage\".</string>
<string mollyify="true" name="BackupsPreferenceFragment_signal_requires_external_storage_permission_in_order_to_create_backups">Molly requires external storage permission in order to create backups, but it has been permanently denied. Please continue to app settings, select \"Permissions\" and enable \"Storage\".</string>
<!-- Title of dialog shown when picking the time to perform a chat backup -->
<string name="BackupsPreferenceFragment__set_backup_time">Set backup time</string>
@ -803,7 +803,7 @@
<!-- DozeReminder -->
<string name="DozeReminder_optimize_for_missing_play_services">Optimize for missing Play Services</string>
<string name="DozeReminder_this_device_does_not_support_play_services_tap_to_disable_system_battery">This device does not support Play Services. Tap to disable system battery optimizations that prevent Molly from retrieving messages while inactive.</string>
<string mollyify="true" name="DozeReminder_this_device_does_not_support_play_services_tap_to_disable_system_battery">This device does not support Play Services. Tap to disable system battery optimizations that prevent Molly from retrieving messages while inactive.</string>
<!-- ExpiredBuildReminder -->
<string name="ExpiredBuildReminder_this_version_of_signal_has_expired">This version of Signal has expired. Update now to send and receive messages.</string>
@ -817,8 +817,8 @@
<string name="PendingGroupJoinRequestsReminder_view">View</string>
<!-- GcmRefreshJob -->
<string name="GcmRefreshJob_Permanent_Signal_communication_failure">Permanent Molly communication failure!</string>
<string name="GcmRefreshJob_Signal_was_unable_to_register_with_Google_Play_Services">Molly was unable to register with Google Play Services. Molly messages and calls have been disabled, please try re-registering in Settings &gt; Advanced.</string>
<string mollyify="true" name="GcmRefreshJob_Permanent_Signal_communication_failure">Permanent Molly communication failure!</string>
<string mollyify="true" name="GcmRefreshJob_Signal_was_unable_to_register_with_Google_Play_Services">Molly was unable to register with Google Play Services. Molly messages and calls have been disabled, please try re-registering in Settings &gt; Advanced.</string>
<!-- GiphyActivity -->
@ -956,12 +956,12 @@
<!-- Message for dialog asking user to submit logs for debugging a crash -->
<string name="PromptLogsSlowNotificationsDialog__message">Debug logs helps us diagnose and fix the issue, and do not contain identifying information.</string>
<!-- Title for dialog asking user to submit logs for debugging slow notification issues -->
<string name="PromptLogsSlowNotificationsDialog__title_crash">Molly encountered a problem. Submit debug log?</string>
<string mollyify="true" name="PromptLogsSlowNotificationsDialog__title_crash">Molly encountered a problem. Submit debug log?</string>
<!-- Title for dialog asking user to submit logs for debugging slow notification issues -->
<string name="PromptBatterySaverBottomSheet__title">Notifications may be delayed due to battery optimizations</string>
<!-- Message explaining that battery saver may delay notifications -->
<string name="PromptBatterySaverBottomSheet__message">You can disable battery optimizations for Molly to ensure that message notifications will not be delayed.</string>
<string mollyify="true" name="PromptBatterySaverBottomSheet__message">You can disable battery optimizations for Molly to ensure that message notifications will not be delayed.</string>
<!-- Button to continue to try and disable battery saver -->
<string name="PromptBatterySaverBottomSheet__continue">Continue</string>
@ -1214,13 +1214,13 @@
<string name="InviteActivity_cancel">Cancel</string>
<string name="InviteActivity_sending">Sending…</string>
<string name="InviteActivity_invitations_sent">Invitations sent!</string>
<string name="InviteActivity_invite_to_signal">Invite to Molly</string>
<string mollyify="true" name="InviteActivity_invite_to_signal">Invite to Molly</string>
<string name="InviteActivity_send_sms">Send SMS (%d)</string>
<plurals name="InviteActivity_send_sms_invites">
<item quantity="one">Send %d SMS invite?</item>
<item quantity="other">Send %d SMS invites?</item>
</plurals>
<string name="InviteActivity_lets_switch_to_signal">Let\'s switch to Molly: %1$s</string>
<string mollyify="true" name="InviteActivity_lets_switch_to_signal">Let\'s switch to Molly: %1$s</string>
<string name="InviteActivity_no_app_to_share_to">It looks like you don\'t have any apps to share to.</string>
<!-- LearnMoreTextView -->
@ -1234,7 +1234,7 @@
<string name="LongMessageActivity_your_message">Your message</string>
<!-- MessageRetrievalService -->
<string name="MessageRetrievalService_signal">Molly</string>
<string mollyify="true" name="MessageRetrievalService_signal">Molly</string>
<string name="MessageRetrievalService_background_connection_enabled">Background connection enabled</string>
<!-- MediaOverviewActivity -->
@ -1304,8 +1304,8 @@
<!-- NotificationBarManager -->
<string name="NotificationBarManager__establishing_signal_call">Establishing Signal call</string>
<!-- Temporary notification shown when starting the calling service -->
<string name="NotificationBarManager__starting_signal_call_service">Starting Molly call service</string>
<string name="NotificationBarManager__stopping_signal_call_service">Stopping Molly call service</string>
<string mollyify="true" name="NotificationBarManager__starting_signal_call_service">Starting Molly call service</string>
<string mollyify="true" name="NotificationBarManager__stopping_signal_call_service">Stopping Molly call service</string>
<string name="NotificationBarManager__cancel_call">Cancel call</string>
<!-- NotificationsMegaphone -->
@ -1596,7 +1596,7 @@
<!-- In-conversation update message to indicate that the current contact is sms only and will need to migrate to signal to continue the conversation in signal. -->
<string name="MessageRecord__you_will_no_longer_be_able_to_send_sms_messages_from_signal_soon">You will no longer be able to send SMS messages from Signal soon. Invite %1$s to Signal to keep the conversation here.</string>
<!-- In-conversation update message to indicate that the current contact is sms only and will need to migrate to signal to continue the conversation in signal. -->
<string name="MessageRecord__you_can_no_longer_send_sms_messages_in_signal">You can no longer send SMS messages in Molly. Invite %1$s to Molly to keep the conversation here.</string>
<string mollyify="true" name="MessageRecord__you_can_no_longer_send_sms_messages_in_signal">You can no longer send SMS messages in Molly. Invite %1$s to Molly to keep the conversation here.</string>
<!-- Body for quote when message being quoted is an in-app payment message -->
<string name="MessageRecord__payment_s">Payment: %1$s</string>
<!-- Update message shown in chat after reporting it as spam -->
@ -1677,7 +1677,7 @@
<string name="DeviceProvisioningActivity_link_a_signal_device">Link a Signal device?</string>
<string name="DeviceProvisioningActivity_it_looks_like_youre_trying_to_link_a_signal_device_using_a_3rd_party_scanner">It looks like you\'re trying to link a Signal device using a 3rd party scanner. For your protection, please scan the code again from within Signal.</string>
<string name="DeviceActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code">Molly needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string mollyify="true" name="DeviceActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code">Molly needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string name="DeviceActivity_unable_to_scan_a_qr_code_without_the_camera_permission">Unable to scan a QR code without the Camera permission</string>
<!-- OutdatedBuildReminder -->
@ -1690,11 +1690,11 @@
<!-- PassphrasePromptActivity -->
<string name="PassphrasePromptActivity_enter_passphrase">Enter passphrase</string>
<string name="PassphrasePromptActivity_watermark_content_description">Molly icon</string>
<string mollyify="true" name="PassphrasePromptActivity_watermark_content_description">Molly icon</string>
<string name="PassphrasePromptActivity_ok_button_content_description">Submit passphrase</string>
<string name="PassphrasePromptActivity_invalid_passphrase_exclamation">Invalid passphrase!</string>
<string name="PassphrasePromptActivity_unlock_signal">Unlock Molly</string>
<string name="PassphrasePromptActivity_signal_android_lock_screen">Molly Android - Lock Screen</string>
<string mollyify="true" name="PassphrasePromptActivity_unlock_signal">Unlock Molly</string>
<string mollyify="true" name="PassphrasePromptActivity_signal_android_lock_screen">Molly Android - Lock Screen</string>
<!-- PlacePickerActivity -->
<string name="PlacePickerActivity_title">Map</string>
@ -1761,7 +1761,7 @@
<!-- RecaptchaRequiredBottomSheetFragment -->
<string name="RecaptchaRequiredBottomSheetFragment_verify_to_continue_messaging">Verify to continue messaging</string>
<string name="RecaptchaRequiredBottomSheetFragment_to_help_prevent_spam_on_signal">To help prevent spam on Molly, please complete verification.</string>
<string mollyify="true" name="RecaptchaRequiredBottomSheetFragment_to_help_prevent_spam_on_signal">To help prevent spam on Molly, please complete verification.</string>
<string name="RecaptchaRequiredBottomSheetFragment_after_verifying_you_can_continue_messaging">After verifying, you can continue messaging. Any paused messages will automatically be sent.</string>
<!-- Recipient -->
@ -1769,7 +1769,7 @@
<!-- Name of recipient representing user\'s \'My Story\' -->
<string name="Recipient_my_story">My Story</string>
<!-- Name of recipient for a call link without a name -->
<string name="Recipient_signal_call">Molly call</string>
<string mollyify="true" name="Recipient_signal_call">Molly call</string>
<!-- RecipientPreferencesActivity -->
<string name="RecipientPreferenceActivity_block">Block</string>
@ -1794,8 +1794,8 @@
<!-- WebRtcCallActivity -->
<string name="WebRtcCallActivity__tap_here_to_turn_on_your_video">Tap here to turn on your video</string>
<string name="WebRtcCallActivity__to_call_s_signal_needs_access_to_your_camera">To call %1$s, Molly needs access to your camera</string>
<string name="WebRtcCallActivity__signal_s">Molly %1$s</string>
<string mollyify="true" name="WebRtcCallActivity__to_call_s_signal_needs_access_to_your_camera">To call %1$s, Molly needs access to your camera</string>
<string mollyify="true" name="WebRtcCallActivity__signal_s">Molly %1$s</string>
<string name="WebRtcCallActivity__calling">Calling…</string>
<!-- Call status shown when an active call was disconnected (e.g., network hiccup) and is trying to reconnect -->
<string name="WebRtcCallActivity__reconnecting">Reconnecting…</string>
@ -2050,13 +2050,13 @@
<string name="RegistrationActivity_you_will_receive_a_call_to_verify_this_number">You\'ll receive a call to verify this number.</string>
<string name="RegistrationActivity_edit_number">Edit number</string>
<string name="RegistrationActivity_missing_google_play_services">Missing Google Play Services</string>
<string name="RegistrationActivity_this_device_is_missing_google_play_services">This device is missing Google Play Services. You can still use Molly, but this configuration may result in reduced reliability or performance.\n\nIf you are not an advanced user, are not running an aftermarket Android ROM, or believe that you are seeing this in error, please contact support@molly.im for help troubleshooting.</string>
<string mollyify="true" name="RegistrationActivity_this_device_is_missing_google_play_services">This device is missing Google Play Services. You can still use Molly, but this configuration may result in reduced reliability or performance.\n\nIf you are not an advanced user, are not running an aftermarket Android ROM, or believe that you are seeing this in error, please contact support@molly.im for help troubleshooting.</string>
<string name="RegistrationActivity_i_understand">I understand</string>
<string name="RegistrationActivity_play_services_error">Play Services Error</string>
<string name="RegistrationActivity_google_play_services_is_updating_or_unavailable">Google Play Services is updating or temporarily unavailable. Please try again.</string>
<string name="RegistrationActivity_terms_and_privacy">Terms &amp; Privacy Policy</string>
<string name="RegistrationActivity_signal_needs_access_to_your_contacts_and_media_in_order_to_connect_with_friends">Signal needs the contacts and media permissions to help you connect with friends and send messages. Your contacts are uploaded using Signal\'s private contact discovery, which means they are end-to-end encrypted and never visible to the Signal service.</string>
<string name="RegistrationActivity_signal_needs_access_to_your_contacts_in_order_to_connect_with_friends">Signal needs the contacts permission to help you connect with friends. Your contacts are uploaded using Signal\'s private contact discovery, which means they are end-to-end encrypted and never visible to the Signal service.</string>
<string name="RegistrationActivity_signal_needs_access_to_your_contacts_and_media_in_order_to_connect_with_friends">Molly needs the contacts and media permissions to help you connect with friends and send messages. Your contacts are uploaded using Signal\'s private contact discovery, which means they are end-to-end encrypted and never visible to the Signal service.</string>
<string name="RegistrationActivity_signal_needs_access_to_your_contacts_in_order_to_connect_with_friends">Molly needs the contacts permission to help you connect with friends. Your contacts are uploaded using Signal\'s private contact discovery, which means they are end-to-end encrypted and never visible to the Signal service.</string>
<string name="RegistrationActivity_rate_limited_to_service">You\'ve made too many attempts to register this number. Please try again later.</string>
<!-- During registration, if the user attempts (and fails) to register, we display this error message with a number of minutes timer they are allowed to try again.-->
<string name="RegistrationActivity_rate_limited_to_try_again">You\'ve made too many attempts to register this number. Please try again in %s.</string>
@ -2067,7 +2067,7 @@
<string name="RegistrationActivity_unable_to_request_verification_code">Unable to request a verification code. Please check network connection and try again.</string>
<string name="RegistrationActivity_non_standard_number_format">Non-standard number format</string>
<string name="RegistrationActivity_the_number_you_entered_appears_to_be_a_non_standard">The number you entered (%1$s) appears to be a non-standard format.\n\nDid you mean %2$s?</string>
<string name="RegistrationActivity_signal_android_phone_number_format">Molly Android - Phone Number Format</string>
<string mollyify="true" name="RegistrationActivity_signal_android_phone_number_format">Molly Android - Phone Number Format</string>
<!-- Small "toast" notification to the user confirming that they have requested a new code via voice call.-->
<string name="RegistrationActivity_call_requested">Call requested</string>
<!-- Small "toast" notification to the user confirming that they have requested a new code via SMS.-->
@ -2140,13 +2140,13 @@
<!-- SharedContactDetailsActivity -->
<string name="SharedContactDetailsActivity_add_to_contacts">Add to Contacts</string>
<string name="SharedContactDetailsActivity_invite_to_signal">Invite to Molly</string>
<string mollyify="true" name="SharedContactDetailsActivity_invite_to_signal">Invite to Molly</string>
<string name="SharedContactDetailsActivity_signal_message">Signal Message</string>
<string name="SharedContactDetailsActivity_signal_call">Signal Call</string>
<!-- SharedContactView -->
<string name="SharedContactView_add_to_contacts">Add to Contacts</string>
<string name="SharedContactView_invite_to_signal">Invite to Molly</string>
<string mollyify="true" name="SharedContactView_invite_to_signal">Invite to Molly</string>
<string name="SharedContactView_message">Signal Message</string>
<!-- SignalBottomActionBar -->
@ -2210,12 +2210,12 @@
<string name="SubmitDebugLogActivity_this_log_will_be_posted_publicly_online_for_contributors">This log will be posted publicly online for contributors to view. You may examine it before uploading.</string>
<!-- SupportEmailUtil -->
<string name="SupportEmailUtil_support_email" translatable="false">support@molly.im</string>
<string mollyify="true" name="SupportEmailUtil_support_email" translatable="false">support@molly.im</string>
<string name="SupportEmailUtil_filter">Filter:</string>
<string name="SupportEmailUtil_device_info">Device info:</string>
<string name="SupportEmailUtil_android_version">Android version:</string>
<string name="SupportEmailUtil_signal_version">Molly version:</string>
<string name="SupportEmailUtil_signal_package">Molly package:</string>
<string mollyify="true" name="SupportEmailUtil_signal_version">Molly version:</string>
<string mollyify="true" name="SupportEmailUtil_signal_package">Molly package:</string>
<string name="SupportEmailUtil_registration_lock">Registration lock:</string>
<string name="SupportEmailUtil_locale">Locale:</string>
@ -2277,11 +2277,11 @@
<string name="ThreadRecord_s_belongs_to_s">%1$s belongs to %2$s</string>
<!-- ApkUpdateNotifications -->
<string name="ApkUpdateNotifications_prompt_install_title">Molly update</string>
<string name="ApkUpdateNotifications_prompt_install_body">A new version of Molly is available. Tap to update.</string>
<string name="ApkUpdateNotifications_failed_general_title">Molly failed to update</string>
<string mollyify="true" name="ApkUpdateNotifications_prompt_install_title">Molly update</string>
<string mollyify="true" name="ApkUpdateNotifications_prompt_install_body">A new version of Molly is available. Tap to update.</string>
<string mollyify="true" name="ApkUpdateNotifications_failed_general_title">Molly failed to update</string>
<string name="ApkUpdateNotifications_failed_general_body">We will try again later.</string>
<string name="ApkUpdateNotifications_auto_update_success_title">Molly successfully updated</string>
<string mollyify="true" name="ApkUpdateNotifications_auto_update_success_title">Molly successfully updated</string>
<string name="ApkUpdateNotifications_auto_update_success_body">You were automatically updated to version %1$s.</string>
<!-- UntrustedSendDialog -->
@ -2352,7 +2352,7 @@
<string name="VerifyIdentityActivity_our_signal_safety_number">Our Signal safety number:</string>
<string name="VerifyIdentityActivity_no_app_to_share_to">It looks like you don\'t have any apps to share to.</string>
<string name="VerifyIdentityActivity_no_safety_number_to_compare_was_found_in_the_clipboard">No safety number to compare was found in the clipboard</string>
<string name="VerifyIdentityActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code_but_it_has_been_permanently_denied">Molly needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string mollyify="true" name="VerifyIdentityActivity_signal_needs_the_camera_permission_in_order_to_scan_a_qr_code_but_it_has_been_permanently_denied">Molly needs the Camera permission in order to scan a QR code, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Camera\".</string>
<string name="VerifyIdentityActivity_unable_to_scan_qr_code_without_camera_permission">Unable to scan QR code without Camera permission</string>
<string name="VerifyIdentityActivity_you_must_first_exchange_messages_in_order_to_view">You must first exchange messages in order to view %1$s\'s safety number.</string>
<!-- Dialog message explaining to user they must exchange messages first to create a safety number -->
@ -2382,14 +2382,14 @@
<!-- KeyCachingService -->
<string name="KeyCachingService_signal_passphrase_cached">Touch to open.</string>
<string name="KeyCachingService_passphrase_cached">Molly is unlocked</string>
<string name="KeyCachingService_lock">Lock Molly</string>
<string mollyify="true" name="KeyCachingService_passphrase_cached">Molly is unlocked</string>
<string mollyify="true" name="KeyCachingService_lock">Lock Molly</string>
<!-- MediaPreviewActivity -->
<string name="MediaPreviewActivity_you">You</string>
<string name="MediaPreviewActivity_unssuported_media_type">Unsupported media type</string>
<string name="MediaPreviewActivity_draft">Draft</string>
<string name="MediaPreviewActivity_signal_needs_the_storage_permission_in_order_to_write_to_external_storage_but_it_has_been_permanently_denied">Molly needs the Storage permission in order to save to external storage, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Storage\".</string>
<string mollyify="true" name="MediaPreviewActivity_signal_needs_the_storage_permission_in_order_to_write_to_external_storage_but_it_has_been_permanently_denied">Molly needs the Storage permission in order to save to external storage, but it has been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Storage\".</string>
<string name="MediaPreviewActivity_unable_to_write_to_external_storage_without_permission">Unable to save to external storage without permissions</string>
<string name="MediaPreviewActivity_media_delete_confirmation_title">Delete message?</string>
<string name="MediaPreviewActivity_media_delete_confirmation_message">This will permanently delete this message.</string>
@ -2433,7 +2433,7 @@
<string name="MessageNotifier_failed_to_deliver_message">Failed to deliver message.</string>
<string name="MessageNotifier_error_delivering_message">Error delivering message.</string>
<string name="MessageNotifier_message_delivery_paused">Message delivery paused.</string>
<string name="MessageNotifier_verify_to_continue_messaging_on_signal">Verify to continue messaging on Molly.</string>
<string mollyify="true" name="MessageNotifier_verify_to_continue_messaging_on_signal">Verify to continue messaging on Molly.</string>
<string name="MessageNotifier_mark_all_as_read">Mark all as read</string>
<string name="MessageNotifier_mark_read">Mark read</string>
<string name="MessageNotifier_turn_off_these_notifications">Turn off these notifications</string>
@ -2494,7 +2494,7 @@
<!-- ProfileEditNameFragment -->
<!-- QuickResponseService -->
<string name="QuickResponseService_quick_response_unavailable_when_Signal_is_locked">Quick response unavailable when Molly is locked!</string>
<string mollyify="true" name="QuickResponseService_quick_response_unavailable_when_Signal_is_locked">Quick response unavailable when Molly is locked!</string>
<string name="QuickResponseService_problem_sending_message">Problem sending message!</string>
<!-- A small toast notification to let the user know their image/video/audio was downloaded and saved to their device, accessible in other apps. -->
@ -2514,7 +2514,7 @@
<string name="ShortcutLauncherActivity_invalid_shortcut">Invalid shortcut</string>
<!-- SingleRecipientNotificationBuilder -->
<string name="SingleRecipientNotificationBuilder_signal">Molly</string>
<string mollyify="true" name="SingleRecipientNotificationBuilder_signal">Molly</string>
<string name="SingleRecipientNotificationBuilder_new_message">New message</string>
<string name="SingleRecipientNotificationBuilder_message_request">Message request</string>
<string name="SingleRecipientNotificationBuilder_you">You</string>
@ -2560,7 +2560,7 @@
<!-- UnauthorizedReminder -->
<!-- Message shown in a reminder banner when the user\'s device is no longer registered -->
<string name="UnauthorizedReminder_this_is_likely_because_you_registered_your_phone_number_with_Signal_on_a_different_device">This device is no longer registered. This is likely because you registered your phone number with Molly on a different device.</string>
<string mollyify="true" name="UnauthorizedReminder_this_is_likely_because_you_registered_your_phone_number_with_Signal_on_a_different_device">This device is no longer registered. This is likely because you registered your phone number with Molly on a different device.</string>
<!-- Action in reminder banner that will take user to re-register -->
<string name="UnauthorizedReminder_reregister_action">Re-register device</string>
@ -2573,10 +2573,10 @@
<!-- Banner button to update now -->
<!-- WebRtcCallActivity -->
<string name="WebRtcCallActivity_to_answer_the_call_give_signal_access_to_your_microphone">To answer the call, give Molly access to your microphone.</string>
<string mollyify="true" name="WebRtcCallActivity_to_answer_the_call_give_signal_access_to_your_microphone">To answer the call, give Molly access to your microphone.</string>
<!-- Message shown in permission dialog when attempting to answer a video call without camera or microphone permissions already granted. -->
<string name="WebRtcCallActivity_to_answer_the_call_give_signal_access_to_your_microphone_and_camera">To answer the video call, give Molly access to your microphone and camera.</string>
<string name="WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls">Molly requires Microphone and Camera permissions in order to make or receive calls, but they have been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string mollyify="true" name="WebRtcCallActivity_to_answer_the_call_give_signal_access_to_your_microphone_and_camera">To answer the video call, give Molly access to your microphone and camera.</string>
<string mollyify="true" name="WebRtcCallActivity_signal_requires_microphone_and_camera_permissions_in_order_to_make_or_receive_calls">Molly requires Microphone and Camera permissions in order to make or receive calls, but they have been permanently denied. Please continue to app settings, select \"Permissions\", and enable \"Microphone\" and \"Camera\".</string>
<string name="WebRtcCallActivity__answered_on_a_linked_device">Answered on a linked device.</string>
<string name="WebRtcCallActivity__declined_on_a_linked_device">Declined on a linked device.</string>
<string name="WebRtcCallActivity__busy_on_a_linked_device">Busy on a linked device.</string>
@ -2621,7 +2621,7 @@
<string name="change_passphrase_activity__repeat_new_passphrase">Repeat new passphrase</string>
<!-- contact_selection_activity -->
<string name="contact_selection_activity__invite_to_signal">Invite to Molly</string>
<string mollyify="true" name="contact_selection_activity__invite_to_signal">Invite to Molly</string>
<string name="contact_selection_activity__new_group">New group</string>
<!-- Row item title for refreshing contacts -->
<string name="contact_selection_activity__refresh_contacts">Refresh contacts</string>
@ -2643,7 +2643,7 @@
<string name="SingleContactSelectionActivity_contact_photo">Contact Photo</string>
<!-- ContactSelectionListFragment-->
<string name="ContactSelectionListFragment_signal_requires_the_contacts_permission_in_order_to_display_your_contacts">Molly requires the Contacts permission in order to display your contacts, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Contacts\".</string>
<string mollyify="true" name="ContactSelectionListFragment_signal_requires_the_contacts_permission_in_order_to_display_your_contacts">Molly requires the Contacts permission in order to display your contacts, but it has been permanently denied. Please continue to the app settings menu, select \"Permissions\", and enable \"Contacts\".</string>
<string name="ContactSelectionListFragment_error_retrieving_contacts_check_your_network_connection">Error retrieving contacts, check your network connection</string>
<string name="ContactSelectionListFragment_username_not_found">Username not found</string>
<string name="ContactSelectionListFragment_s_is_not_a_signal_user">"%1$s" is not a Signal user. Please check the username and try again.</string>
@ -2662,7 +2662,7 @@
<string name="ContactSelectionListFragment__find_by_username">Find by username</string>
<!-- contact_selection_list_fragment -->
<string name="contact_selection_list_fragment__signal_needs_access_to_your_contacts_in_order_to_display_them">Molly needs access to your contacts in order to display them.</string>
<string mollyify="true" name="contact_selection_list_fragment__signal_needs_access_to_your_contacts_in_order_to_display_them">Molly needs access to your contacts in order to display them.</string>
<string name="contact_selection_list_fragment__show_contacts">Show Contacts</string>
<!-- contact_selection_list_item -->
@ -2761,7 +2761,7 @@
<!-- BubbleOptOutTooltip -->
<!-- Message to inform the user of what Android chat bubbles are -->
<string name="BubbleOptOutTooltip__description">Bubbles are an Android feature that you can turn off for Molly chats.</string>
<string mollyify="true" name="BubbleOptOutTooltip__description">Bubbles are an Android feature that you can turn off for Molly chats.</string>
<!-- Button to dismiss the tooltip for opting out of using Android bubbles -->
<string name="BubbleOptOutTooltip__not_now">Not now</string>
<!-- Button to move to the system settings to control the use of Android bubbles -->
@ -2928,9 +2928,9 @@
<string name="EditProfileFragment__group_description">Group description</string>
<string name="EditProfileFragment__support_link" translatable="false">https://support.signal.org/hc/articles/360007459591</string>
<!-- The title of a dialog prompting user to update to the latest version of Signal. -->
<string name="EditProfileFragment_deprecated_dialog_title">Update Molly</string>
<string mollyify="true" name="EditProfileFragment_deprecated_dialog_title">Update Molly</string>
<!-- The body of a dialog prompting user to update to the latest version of Signal. -->
<string name="EditProfileFragment_deprecated_dialog_body">This version of Molly has expired. Update now to continue using Molly.</string>
<string mollyify="true" name="EditProfileFragment_deprecated_dialog_body">This version of Molly has expired. Update now to continue using Molly.</string>
<!-- The button on a dialog prompting user to update to the latest version of Signal. When clicked, the user will be taken to the store to update their app. -->
<string name="EditProfileFragment_deprecated_dialog_update_button">Update</string>
<!-- The title of a dialog informing the user that they cannot use this app feature when they are unregistered. -->
@ -3144,7 +3144,7 @@
<string name="preferences__slow">Slow</string>
<string name="preferences__help">Help</string>
<string name="preferences__advanced">Advanced</string>
<string name="preferences__donate_to_signal">Donate to Molly</string>
<string mollyify="true" name="preferences__donate_to_signal">Donate to Molly</string>
<!-- Preference label for making one-time donations to Signal -->
<string name="preferences__privacy">Privacy</string>
<!-- Preference label for stories -->
@ -3181,13 +3181,13 @@
<!-- Title for the confirmation dialog of changing the app icon. -->
<string name="preferences__app_icon_dialog_title">Change app icon and name to \"%1$s\"</string>
<!-- Description for the confirmation dialog of changing the app icon. -->
<string name="preferences__app_icon_dialog_description">Molly will need to close to change the app icon and name. Notifications will always display the default Molly icon and name.</string>
<string mollyify="true" name="preferences__app_icon_dialog_description">Molly will need to close to change the app icon and name. Notifications will always display the default Molly icon and name.</string>
<!-- Visible warning label for the limitations of changing the app icon with learn more call to action. -->
<string name="preferences__app_icon_warning_learn_more">Select an app icon and name, which will be visible on your phone\'s home screen and app drawer. Notifications will always display the default Molly icon and name. Learn\u00A0more</string>
<string mollyify="true" name="preferences__app_icon_warning_learn_more">Select an app icon and name, which will be visible on your phone\'s home screen and app drawer. Notifications will always display the default Molly icon and name. Learn\u00A0more</string>
<!-- Visible warning label for the limitations of changing the app icon. -->
<string name="preferences__app_icon_warning">App icons and names are visible on the home screen and app drawer.</string>
<!-- Visible warning label explaining that changing the app icon and name does not affect notifications. -->
<string name="preferences__app_icon_notification_warning">Notifications will always display the default Molly icon and name.</string>
<string mollyify="true" name="preferences__app_icon_notification_warning">Notifications will always display the default Molly icon and name.</string>
<!--Call to action to get more information about the limitations of the change app icon functionality. -->
<string name="preferences__app_icon_learn_more">Learn\u00A0more</string>
<!--Text description of a graphic illustrating the limitations of the app icon change. -->
@ -3271,7 +3271,7 @@
<string name="preferences_communication__category_censorship_circumvention">Censorship circumvention</string>
<!-- Title of the \'censorship circumvention\' toggle switch -->
<string name="preferences_communication__censorship_circumvention">Censorship circumvention</string>
<string name="preferences_communication__censorship_circumvention_if_enabled_signal_will_attempt_to_circumvent_censorship">If enabled, Molly will attempt to circumvent censorship. Do not enable this feature unless you are in a location where Molly is censored.</string>
<string mollyify="true" name="preferences_communication__censorship_circumvention_if_enabled_signal_will_attempt_to_circumvent_censorship">If enabled, Molly will attempt to circumvent censorship. Do not enable this feature unless you are in a location where Molly is censored.</string>
<!-- Summary text for \'censorship circumvention\' toggle. Indicates that we automatically enabled it because we believe you\'re in a censored country -->
<string name="preferences_communication__censorship_circumvention_has_been_activated_based_on_your_accounts_phone_number">Censorship circumvention has been activated based on your account\'s phone number.</string>
<!-- Summary text for \'censorship circumvention\' toggle. Indicates that you disabled it even though we believe you\'re in a censored country -->
@ -3323,7 +3323,7 @@
<!-- Displayed on a welcome screen for payments -->
<string name="PaymentsHomeFragment_introducing_payments">Introducing payments</string>
<string name="PaymentsHomeFragment__use_signal_to_send_and_receive">Use Molly to send and receive MobileCoin, a new privacy focused digital currency. Activate to get started.</string>
<string mollyify="true" name="PaymentsHomeFragment__use_signal_to_send_and_receive">Use Molly to send and receive MobileCoin, a new privacy focused digital currency. Activate to get started.</string>
<string name="PaymentsHomeFragment__activate_payments">Activate Payments</string>
<string name="PaymentsHomeFragment__activating_payments">Activating payments…</string>
<string name="PaymentsHomeFragment__restore_payments_account">Restore payments account</string>
@ -3349,7 +3349,7 @@
<string name="PaymentsHomeFragment__payments_is_not_available_in_your_region">Payments is not available in your region.</string>
<string name="PaymentsHomeFragment__could_not_enable_payments">Could not enable payments. Try again later.</string>
<string name="PaymentsHomeFragment__deactivate_payments_question">Deactivate Payments?</string>
<string name="PaymentsHomeFragment__you_will_not_be_able_to_send">You will not be able to send or receive MobileCoin in Molly if you deactivate payments.</string>
<string mollyify="true" name="PaymentsHomeFragment__you_will_not_be_able_to_send">You will not be able to send or receive MobileCoin in Molly if you deactivate payments.</string>
<string name="PaymentsHomeFragment__deactivate">Deactivate</string>
<string name="PaymentsHomeFragment__continue">Continue</string>
<string name="PaymentsHomeFragment__balance_is_not_currently_available">Balance is not currently available.</string>
@ -3358,10 +3358,10 @@
<string name="PaymentsHomeFragment__details">Details</string>
<string name="PaymentsHomeFragment__learn_more__activate_payments" translatable="false">https://support.signal.org/hc/articles/360057625692#payments_activate</string>
<!-- Displayed as a description in a dialog when the user tries to activate payments -->
<string name="PaymentsHomeFragment__you_can_use_signal_to_send_and">You can use Signal to send and receive MobileCoin. All payments are subject to the Terms of Use for MobileCoins and the MobileCoin Wallet. You may encounter some issues and payments or balances you may lose can\'t be recovered. </string>
<string mollyify="true" name="PaymentsHomeFragment__you_can_use_signal_to_send_and">You can use Molly to send and receive MobileCoin. All payments are subject to the Terms of Use for MobileCoins and the MobileCoin Wallet. You may encounter some issues and payments or balances you may lose can\'t be recovered. </string>
<string name="PaymentsHomeFragment__activate">Activate</string>
<string name="PaymentsHomeFragment__view_mobile_coin_terms">View MobileCoin terms</string>
<string name="PaymentsHomeFragment__payments_not_available">Payments in Molly is no longer available. You can still transfer funds to an exchange but you can no longer send and receive payments or add funds.</string>
<string mollyify="true" name="PaymentsHomeFragment__payments_not_available">Payments in Molly is no longer available. You can still transfer funds to an exchange but you can no longer send and receive payments or add funds.</string>
<string name="PaymentsHomeFragment__mobile_coin_terms_url" translatable="false">https://www.mobilecoin.com/terms-of-use.html</string>
<!-- Alert dialog title which shows up after a payment to turn on payment lock -->
@ -3389,7 +3389,7 @@
<!-- Displayed as a title at the top of the screen -->
<string name="GrantPermissionsFragment__allow_permissions">Allow permissions</string>
<!-- Displayed as a subtitle at the top of the screen -->
<string name="GrantPermissionsFragment__to_help_you_message_people_you_know">To help you message people you know, Molly will request these permissions. </string>
<string mollyify="true" name="GrantPermissionsFragment__to_help_you_message_people_you_know">To help you message people you know, Molly will request these permissions. </string>
<!-- Notifications permission row title -->
<string name="GrantPermissionsFragment__notifications">Notifications</string>
<!-- Notifications permission row description -->
@ -3468,10 +3468,10 @@
<string name="PaymentsTransferFragment__next">Next</string>
<string name="PaymentsTransferFragment__invalid_address">Invalid address</string>
<string name="PaymentsTransferFragment__check_the_wallet_address">Check the wallet address you\'re attempting to transfer to and try again.</string>
<string name="PaymentsTransferFragment__you_cant_transfer_to_your_own_signal_wallet_address">You can\'t transfer to your own Molly wallet address. Enter the wallet address from your account at a supported exchange.</string>
<string name="PaymentsTransferFragment__to_scan_a_qr_code_signal_needs">To scan a QR code, Molly needs access to the camera.</string>
<string name="PaymentsTransferFragment__signal_needs_the_camera_permission_to_capture_qr_code_go_to_settings">Molly needs the Camera permission to capture a QR code. Go to settings, select \"Permissions\", and enable \"Camera\".</string>
<string name="PaymentsTransferFragment__to_scan_a_qr_code_signal_needs_access_to_the_camera">To scan a QR code, Molly needs access to the camera.</string>
<string mollyify="true" name="PaymentsTransferFragment__you_cant_transfer_to_your_own_signal_wallet_address">You can\'t transfer to your own Molly wallet address. Enter the wallet address from your account at a supported exchange.</string>
<string mollyify="true" name="PaymentsTransferFragment__to_scan_a_qr_code_signal_needs">To scan a QR code, Molly needs access to the camera.</string>
<string mollyify="true" name="PaymentsTransferFragment__signal_needs_the_camera_permission_to_capture_qr_code_go_to_settings">Molly needs the Camera permission to capture a QR code. Go to settings, select \"Permissions\", and enable \"Camera\".</string>
<string mollyify="true" name="PaymentsTransferFragment__to_scan_a_qr_code_signal_needs_access_to_the_camera">To scan a QR code, Molly needs access to the camera.</string>
<string name="PaymentsTransferFragment__settings">Settings</string>
<!-- PaymentsTransferQrScanFragment -->
@ -3662,7 +3662,7 @@
<!-- text_secure_normal -->
<string name="text_secure_normal__menu_new_group">New group</string>
<string name="text_secure_normal__menu_settings">Settings</string>
<string name="text_secure_normal__menu_clear_passphrase">Lock</string>
<string mollyify="true" name="text_secure_normal__menu_clear_passphrase">Lock</string>
<string name="text_secure_normal__mark_all_as_read">Mark all read</string>
<string name="text_secure_normal__invite_friends">Invite friends</string>
<!-- Overflow menu entry to filter unread chats -->
@ -3810,17 +3810,17 @@
<!-- CallNotificationBuilder -->
<!-- Displayed in a notification when a Signal voice call is ringing -->
<string name="CallNotificationBuilder__incoming_signal_voice_call">Incoming Molly voice call</string>
<string mollyify="true" name="CallNotificationBuilder__incoming_signal_voice_call">Incoming Molly voice call</string>
<!-- Displayed in a notification when a Signal video call is ringing -->
<string name="CallNotificationBuilder__incoming_signal_video_call">Incoming Molly video call</string>
<string mollyify="true" name="CallNotificationBuilder__incoming_signal_video_call">Incoming Molly video call</string>
<!-- Displayed in a notification when a Signal group call is ringing -->
<string name="CallNotificationBuilder__incoming_signal_group_call">Incoming Molly group call</string>
<string mollyify="true" name="CallNotificationBuilder__incoming_signal_group_call">Incoming Molly group call</string>
<!-- Displayed in a notification when a Signal voice call is in progress -->
<string name="CallNotificationBuilder__ongoing_signal_voice_call">Ongoing Molly voice call</string>
<string mollyify="true" name="CallNotificationBuilder__ongoing_signal_voice_call">Ongoing Molly voice call</string>
<!-- Displayed in a notification when a Signal video call is in progress -->
<string name="CallNotificationBuilder__ongoing_signal_video_call">Ongoing Molly video call</string>
<string mollyify="true" name="CallNotificationBuilder__ongoing_signal_video_call">Ongoing Molly video call</string>
<!-- Displayed in a notification when a Signal group call is in progress -->
<string name="CallNotificationBuilder__ongoing_signal_group_call">Ongoing Molly group call</string>
<string mollyify="true" name="CallNotificationBuilder__ongoing_signal_group_call">Ongoing Molly group call</string>
<!-- transport_selection_list_item -->
<string name="ConversationListFragment_loading">Loading…</string>
@ -3867,9 +3867,9 @@
<string name="BackupDialog_verify">Verify</string>
<string name="BackupDialog_you_successfully_entered_your_backup_passphrase">You successfully entered your backup passphrase</string>
<string name="BackupDialog_passphrase_was_not_correct">Passphrase was not correct</string>
<string name="LocalBackupJob_creating_signal_backup">Creating Molly backup…</string>
<string mollyify="true" name="LocalBackupJob_creating_signal_backup">Creating Molly backup…</string>
<!-- Title for progress notification shown in a system notification while verifying a recent backup. -->
<string name="LocalBackupJob_verifying_signal_backup">Verifying Molly backup…</string>
<string mollyify="true" name="LocalBackupJob_verifying_signal_backup">Verifying Molly backup…</string>
<string name="LocalBackupJobApi29_backup_failed">Backup failed</string>
<string name="LocalBackupJobApi29_your_backup_directory_has_been_deleted_or_moved">Your backup directory has been deleted or moved.</string>
<string name="LocalBackupJobApi29_your_backup_file_is_too_large">Your backup file is too large to store on this volume.</string>
@ -3884,15 +3884,15 @@
<string name="RegistrationActivity_call_me_instead_available_in">Call me (%1$02d:%2$02d)</string>
<!-- Countdown to when the user can request a new SMS code during registration.-->
<string name="RegistrationActivity_resend_sms_available_in">Resend Code (%1$02d:%2$02d)</string>
<string name="RegistrationActivity_contact_signal_support">Contact Molly Support</string>
<string name="RegistrationActivity_code_support_subject">Molly Registration - Verification Code for Android</string>
<string mollyify="true" name="RegistrationActivity_contact_signal_support">Contact Molly Support</string>
<string mollyify="true" name="RegistrationActivity_code_support_subject">Molly Registration - Verification Code for Android</string>
<string name="RegistrationActivity_incorrect_code">Incorrect code</string>
<string name="BackupUtil_never">Never</string>
<string name="BackupUtil_unknown">Unknown</string>
<!-- Phone number heading displayed as a screen title -->
<string name="preferences_app_protection__phone_number">Phone number</string>
<!-- Subtext below option to launch into phone number privacy settings screen -->
<string name="preferences_app_protection__choose_who_can_see">Choose who can see your phone number and who can contact you on Molly with it.</string>
<string mollyify="true" name="preferences_app_protection__choose_who_can_see">Choose who can see your phone number and who can contact you on Molly with it.</string>
<!-- Section title above two radio buttons for enabling and disabling phone number display -->
<string name="PhoneNumberPrivacySettingsFragment_who_can_see_my_number_heading">Who can see my number</string>
<!-- Subtext below radio buttons when who can see my number is set to everybody -->
@ -3940,7 +3940,7 @@
<string name="RegistrationActivity_you_have_made_too_many_attempts_please_try_again_later">You\'ve made too many attempts. Please try again later.</string>
<string name="RegistrationActivity_error_connecting_to_service">Error connecting to service</string>
<string name="preferences_chats__backups">Backups</string>
<string name="prompt_passphrase_activity__signal_is_locked">Molly is locked</string>
<string mollyify="true" name="prompt_passphrase_activity__signal_is_locked">Molly is locked</string>
<string name="prompt_passphrase_activity__tap_to_unlock">TAP TO UNLOCK</string>
<string name="Recipient_unknown">Unknown</string>
<!-- Name to use for a user across the UI when they are unregistered and have no other name available -->
@ -3988,19 +3988,19 @@
<string name="NewDeviceTransferSetup__preparing_to_connect_to_old_android_device">Preparing to connect to old Android device…</string>
<string name="NewDeviceTransferSetup__take_a_moment_should_be_ready_soon">Taking a moment, should be ready soon</string>
<string name="NewDeviceTransferSetup__waiting_for_old_device_to_connect">Waiting for old Android device to connect…</string>
<string name="NewDeviceTransferSetup__signal_needs_the_location_permission_to_discover_and_connect_with_your_old_device">Molly needs the location permission to discover and connect to your old Android device.</string>
<string name="NewDeviceTransferSetup__signal_needs_location_services_enabled_to_discover_and_connect_with_your_old_device">Molly needs location services enabled to discover and connect with your old Android device.</string>
<string name="NewDeviceTransferSetup__signal_needs_wifi_on_to_discover_and_connect_with_your_old_device">Molly needs Wi-Fi on to discover and connect with your old Android device. Wi-Fi needs to be on but it does not have to be connected to a Wi-Fi network.</string>
<string name="NewDeviceTransferSetup__sorry_it_appears_your_device_does_not_support_wifi_direct">Sorry, it appears this device does not support Wi-Fi Direct. Molly uses Wi-Fi Direct to discover and connect with your old Android device. You can still restore a backup to restore your account from your old Android device.</string>
<string mollyify="true" name="NewDeviceTransferSetup__signal_needs_the_location_permission_to_discover_and_connect_with_your_old_device">Molly needs the location permission to discover and connect to your old Android device.</string>
<string mollyify="true" name="NewDeviceTransferSetup__signal_needs_location_services_enabled_to_discover_and_connect_with_your_old_device">Molly needs location services enabled to discover and connect with your old Android device.</string>
<string mollyify="true" name="NewDeviceTransferSetup__signal_needs_wifi_on_to_discover_and_connect_with_your_old_device">Molly needs Wi-Fi on to discover and connect with your old Android device. Wi-Fi needs to be on but it does not have to be connected to a Wi-Fi network.</string>
<string mollyify="true" name="NewDeviceTransferSetup__sorry_it_appears_your_device_does_not_support_wifi_direct">Sorry, it appears this device does not support Wi-Fi Direct. Molly uses Wi-Fi Direct to discover and connect with your old Android device. You can still restore a backup to restore your account from your old Android device.</string>
<string name="NewDeviceTransferSetup__restore_a_backup">Restore a backup</string>
<string name="NewDeviceTransferSetup__an_unexpected_error_occurred_while_attempting_to_connect_to_your_old_device">An unexpected error occurred while attempting to connect to your old Android device.</string>
<!-- OldDeviceTransferSetupFragment -->
<string name="OldDeviceTransferSetup__searching_for_new_android_device">Searching for new Android device…</string>
<string name="OldDeviceTransferSetup__signal_needs_the_location_permission_to_discover_and_connect_with_your_new_device">Molly needs the location permission to discover and connect to your new Android device.</string>
<string name="OldDeviceTransferSetup__signal_needs_location_services_enabled_to_discover_and_connect_with_your_new_device">Molly needs location services enabled to discover and connect with your new Android device.</string>
<string name="OldDeviceTransferSetup__signal_needs_wifi_on_to_discover_and_connect_with_your_new_device">Molly needs Wi-Fi on to discover and connect with your new Android device. Wi-Fi needs to be on but it does not have to be connected to a Wi-Fi network.</string>
<string name="OldDeviceTransferSetup__sorry_it_appears_your_device_does_not_support_wifi_direct">Sorry, it appears this device does not support Wi-Fi Direct. Molly uses Wi-Fi Direct to discover and connect with your new Android device. You can still create a backup to restore your account on your new Android device.</string>
<string mollyify="true" name="OldDeviceTransferSetup__signal_needs_the_location_permission_to_discover_and_connect_with_your_new_device">Molly needs the location permission to discover and connect to your new Android device.</string>
<string mollyify="true" name="OldDeviceTransferSetup__signal_needs_location_services_enabled_to_discover_and_connect_with_your_new_device">Molly needs location services enabled to discover and connect with your new Android device.</string>
<string mollyify="true" name="OldDeviceTransferSetup__signal_needs_wifi_on_to_discover_and_connect_with_your_new_device">Molly needs Wi-Fi on to discover and connect with your new Android device. Wi-Fi needs to be on but it does not have to be connected to a Wi-Fi network.</string>
<string mollyify="true" name="OldDeviceTransferSetup__sorry_it_appears_your_device_does_not_support_wifi_direct">Sorry, it appears this device does not support Wi-Fi Direct. Molly uses Wi-Fi Direct to discover and connect with your new Android device. You can still create a backup to restore your account on your new Android device.</string>
<string name="OldDeviceTransferSetup__create_a_backup">Create a backup</string>
<string name="OldDeviceTransferSetup__an_unexpected_error_occurred_while_attempting_to_connect_to_your_old_device">An unexpected error occurred while attempting to connect to your new Android device.</string>
@ -4041,7 +4041,7 @@
<!-- DeviceTransferFragment -->
<string name="DeviceTransfer__transferring_data">Transferring data</string>
<string name="DeviceTransfer__keep_both_devices_near_each_other">Keep both devices near each other. Do not turn off the devices and keep Molly open. Transfers are end-to-end encrypted.</string>
<string mollyify="true" name="DeviceTransfer__keep_both_devices_near_each_other">Keep both devices near each other. Do not turn off the devices and keep Molly open. Transfers are end-to-end encrypted.</string>
<string name="DeviceTransfer__d_messages_so_far">%1$d messages so far…</string>
<!-- Filled in with total percentage of messages transferred -->
<string name="DeviceTransfer__s_of_messages_so_far">%1$s%% of messages so far…</string>
@ -4055,7 +4055,7 @@
<!-- OldDeviceTransferInstructionsFragment -->
<string name="OldDeviceTransferInstructions__transfer_account">Transfer Account</string>
<string name="OldDeviceTransferInstructions__first_bullet">1.</string>
<string name="OldDeviceTransferInstructions__download_signal_on_your_new_android_device">Download Molly on your new Android device</string>
<string mollyify="true" name="OldDeviceTransferInstructions__download_signal_on_your_new_android_device">Download Molly on your new Android device</string>
<string name="OldDeviceTransferInstructions__second_bullet">2.</string>
<string name="OldDeviceTransferInstructions__tap_on_transfer_or_restore_account">Tap on "Transfer or restore account"</string>
<string name="OldDeviceTransferInstructions__third_bullet">3.</string>
@ -4128,7 +4128,7 @@
<!-- GroupLinkBottomSheetDialogFragment -->
<string name="GroupLinkBottomSheet_share_hint_requiring_approval">Anyone with this link can view the group\'s name and photo and request to join. Share it with people you trust.</string>
<string name="GroupLinkBottomSheet_share_hint_not_requiring_approval">Anyone with this link can view the group\'s name and photo and join the group. Share it with people you trust.</string>
<string name="GroupLinkBottomSheet_share_via_signal">Share via Molly</string>
<string mollyify="true" name="GroupLinkBottomSheet_share_via_signal">Share via Molly</string>
<string name="GroupLinkBottomSheet_copy">Copy</string>
<string name="GroupLinkBottomSheet_qr_code">QR Code</string>
<string name="GroupLinkBottomSheet_share">Share</string>
@ -4296,7 +4296,7 @@
<string name="payment_info_card_about_mobilecoin">About MobileCoin</string>
<string name="payment_info_card_mobilecoin_is_a_new_privacy_focused_digital_currency">MobileCoin is a new privacy focused digital currency.</string>
<string name="payment_info_card_adding_funds">Adding funds</string>
<string name="payment_info_card_you_can_add_funds_for_use_in">You can add funds for use in Molly by sending MobileCoin to your wallet address.</string>
<string mollyify="true" name="payment_info_card_you_can_add_funds_for_use_in">You can add funds for use in Molly by sending MobileCoin to your wallet address.</string>
<string name="payment_info_card_cashing_out">Cashing out</string>
<string name="payment_info_card_you_can_cash_out_mobilecoin">You can cash out MobileCoin anytime on an exchange that supports MobileCoin. Just make a transfer to your account at that exchange.</string>
<string name="payment_info_card_hide_this_card">Hide this card?</string>
@ -4317,12 +4317,12 @@
<!-- DeactivateWalletFragment -->
<string name="DeactivateWalletFragment__deactivate_wallet">Deactivate Wallet</string>
<string name="DeactivateWalletFragment__your_balance">Your balance</string>
<string name="DeactivateWalletFragment__its_recommended_that_you">It\'s recommended that you transfer your funds to another wallet address before deactivating payments. If you choose not to transfer your funds now, they will remain in your wallet linked to Molly if you reactivate payments.</string>
<string mollyify="true" name="DeactivateWalletFragment__its_recommended_that_you">It\'s recommended that you transfer your funds to another wallet address before deactivating payments. If you choose not to transfer your funds now, they will remain in your wallet linked to Molly if you reactivate payments.</string>
<string name="DeactivateWalletFragment__transfer_remaining_balance">Transfer remaining balance</string>
<string name="DeactivateWalletFragment__deactivate_without_transferring">Deactivate without transferring</string>
<string name="DeactivateWalletFragment__deactivate">Deactivate</string>
<string name="DeactivateWalletFragment__deactivate_without_transferring_question">Deactivate without transferring?</string>
<string name="DeactivateWalletFragment__your_balance_will_remain">Your balance will remain in your wallet linked to Molly if you choose to reactivate payments.</string>
<string mollyify="true" name="DeactivateWalletFragment__your_balance_will_remain">Your balance will remain in your wallet linked to Molly if you choose to reactivate payments.</string>
<string name="DeactivateWalletFragment__error_deactivating_wallet">Error deactivating wallet.</string>
<string name="DeactivateWalletFragment__learn_more__we_recommend_transferring_your_funds" translatable="false">https://support.signal.org/hc/articles/360057625692#payments_deactivate</string>
@ -4612,7 +4612,7 @@
<!-- Header for the screen that displays the licenses of the open-source software dependencies of the Signal app-->
<string name="HelpSettingsFragment__licenses">Licenses</string>
<string name="HelpSettingsFragment__terms_amp_privacy_policy">Terms &amp; Privacy Policy</string>
<string name="HelpFragment__copyright_signal_messenger">Copyright Molly Messenger</string>
<string mollyify="true" name="HelpFragment__copyright_signal_messenger">Copyright Molly Messenger</string>
<string name="HelpFragment__licenced_under_the_agplv3">Licensed under the GNU AGPLv3</string>
<!-- DataAndStorageSettingsFragment -->
@ -5062,9 +5062,9 @@
<string name="MySupportPreference__learn_more">Learn more</string>
<!-- Title of dialog telling user they need to update signal as it expired -->
<string name="UpdateSignalExpiredDialog__title">Update Molly</string>
<string mollyify="true" name="UpdateSignalExpiredDialog__title">Update Molly</string>
<!-- Message of dialog telling user they need to update signal as it expired -->
<string name="UpdateSignalExpiredDialog__message">This version of Molly has expired. Update now to continue using Molly.</string>
<string mollyify="true" name="UpdateSignalExpiredDialog__message">This version of Molly has expired. Update now to continue using Molly.</string>
<!-- Button text of expiration dialog, will take user to update the app -->
<string name="UpdateSignalExpiredDialog__update_action">Update</string>
<!-- Button text of expiration dialog to cancel the dialog. -->
@ -5073,7 +5073,7 @@
<!-- Title of dialog telling user they need to re-register signal -->
<string name="ReregisterSignalDialog__title">Device not registered</string>
<!-- Message of dialog telling user they need to re-register signal as it is no longer registered -->
<string name="ReregisterSignalDialog__message">This device is no longer registered. Re-register to continue using Molly on this device.</string>
<string mollyify="true" name="ReregisterSignalDialog__message">This device is no longer registered. Re-register to continue using Molly on this device.</string>
<!-- Button text of re-registration dialog to re-register the device. -->
<string name="ReregisterSignalDialog__reregister_action">Re-register</string>
<!-- Button text of re-registration dialog to cancel the dialog. -->
@ -5367,7 +5367,7 @@
<!-- Displayed in a toast when we fail to open the ringtone picker -->
<string name="NotificationSettingsFragment__failed_to_open_picker">Failed to open picker.</string>
<!-- Banner title when notification permission is disabled -->
<string name="NotificationSettingsFragment__to_enable_notifications">To enable notifications, Molly needs permission to display them.</string>
<string mollyify="true" name="NotificationSettingsFragment__to_enable_notifications">To enable notifications, Molly needs permission to display them.</string>
<!-- Banner action when notification permission is disabled -->
<string name="NotificationSettingsFragment__turn_on">Turn on</string>

View file

@ -0,0 +1,78 @@
import org.w3c.dom.Document
import org.w3c.dom.Element
import javax.xml.parsers.DocumentBuilderFactory
import javax.xml.transform.OutputKeys
import javax.xml.transform.TransformerFactory
import javax.xml.transform.dom.DOMSource
import javax.xml.transform.stream.StreamResult
/**
* Utility object for parsing and manipulating strings.xml files.
*/
object StringsXmlParser {
fun parse(stringsFile: File): Pair<Document, List<Element>> {
val docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
val doc = docBuilder.parse(stringsFile).apply {
xmlStandalone = true
}
return doc to doc.getStringElements()
}
fun writeToFile(doc: Document, file: File) {
val transformer = TransformerFactory.newInstance().newTransformer()
transformer.transform(DOMSource(doc), StreamResult(file))
}
private fun Document.getStringElements() =
getElementsByTagName("string").let { nodeList ->
(0 until nodeList.length).map { nodeList.item(it) as Element }
}
}
val updateTranslationsForMolly by tasks.registering {
group = "Molly"
description = "Updates references to \"Signal\" with \"Molly\" in all translation files."
doLast {
val englishFile = file("src/main/res/values/strings.xml")
val (_, englishStrings) = StringsXmlParser.parse(englishFile)
// Gather all string names containing "mollyify" attribute
val mollyStringNames = englishStrings
.filter { it.getAttribute("mollyify") == "true" }
.map { it.getAttribute("name") }
.toSet()
// Iterate through each translation file and perform the replacements
project.fileTree("src/main/res").matching {
include("**/values-*/strings.xml")
}.forEach { translationFile ->
try {
val (translationDoc, translatedStrings) = StringsXmlParser.parse(translationFile)
var modified = false
translatedStrings.forEach { translatedString ->
with(translatedString) {
val stringName = getAttribute("name")
if (stringName in mollyStringNames) {
val oldContent = textContent
textContent = textContent
.replace("Signal", "Molly")
.replace("signal.org", "molly.im")
if (oldContent != textContent) {
modified = true
}
}
}
}
if (modified) {
// Write back the modified translation file only if replacements were made
StringsXmlParser.writeToFile(translationDoc, translationFile)
logger.lifecycle("Updated translations in: ${translationFile.path}")
}
} catch (e: Exception) {
logger.error("Error processing file: ${translationFile.path}, ${e.message}")
}
}
}
}

View file

@ -1,128 +0,0 @@
import groovy.io.FileType
import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType
import org.signal.buildtools.StaticIpResolver
def allStringsResourceFiles(@ClosureParams(value = SimpleType.class, options = ['java.io.File']) Closure c) {
file('src/main/res').eachFileRecurse(FileType.FILES) { f ->
if (f.name == 'strings.xml') {
c(f)
}
}
}
task replaceEllipsis {
group 'Static Files'
description 'Process strings for ellipsis characters.'
doLast {
allStringsResourceFiles { f ->
def before = f.text
def after = f.text.replace('...', '…')
if (before != after) {
f.text = after
logger.info("$f.parentFile.name/$f.name...updated")
}
}
}
}
task cleanApostropheErrors {
group 'Static Files'
description 'Fix transifex apostrophe string errors.'
doLast {
allStringsResourceFiles { f ->
def before = f.text
def after = before.replaceAll(/([^\\=08])(')/, '$1\\\\\'')
if (before != after) {
f.text = after
logger.info("$f.parentFile.name/$f.name...updated")
}
}
}
}
task excludeNonTranslatables {
group 'Static Files'
description 'Remove strings that are marked "translatable"="false" or are ExtraTranslations.'
doLast {
def englishFile = file('src/main/res/values/strings.xml')
def english = new XmlParser().parse(englishFile)
def nonTranslatable = english
.findAll { it['@translatable'] == 'false' }
.collect { it['@name'] }
.toSet()
def all = english.collect { it['@name'] }.toSet()
def translatable = all - nonTranslatable
def inMultiline = false
def endBlockName = ""
allStringsResourceFiles { f ->
if (f != englishFile) {
def newLines = f.readLines()
.collect { line ->
if (!inMultiline) {
def singleLineMatcher = line =~ /name="([^"]*)".*(<\/|\/>)/
if (singleLineMatcher.find()) {
def name = singleLineMatcher.group(1)
if (!line.contains('excludeNonTranslatables') && !translatable.contains(name)) {
return " <!-- Removed by excludeNonTranslatables ${line.trim()} -->"
}
} else {
def multilineStartMatcher = line =~ /<(.*) .?name="([^"]*)".*/
if (multilineStartMatcher.find()) {
endBlockName = multilineStartMatcher.group(1)
def name = multilineStartMatcher.group(2)
if (!line.contains('excludeNonTranslatables') && !translatable.contains(name)) {
inMultiline = true;
return " <!-- Removed by excludeNonTranslatables ${line.trim()}"
}
}
}
} else {
def multilineEndMatcher = line =~ /<\/${endBlockName}/
if (multilineEndMatcher.find()) {
inMultiline = false
return "${line} -->"
}
}
return line
}
f.write(newLines.join("\n") + "\n")
}
}
}
}
task postTranslateQa {
group 'Static Files'
description 'Runs QA to check validity of updated strings, and ensure presence of any new languages in internal lists.'
dependsOn ':qa'
}
task resolveStaticIps {
group 'Static Files'
description 'Fetches static IPs for core hosts and writes them to static-ips.gradle'
doLast {
def staticIpResolver = new StaticIpResolver()
new File(projectDir, "static-ips.gradle.kts").text = """
rootProject.extra["service_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("chat.signal.org")}\"\"\"
rootProject.extra["storage_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("storage.signal.org")}\"\"\"
rootProject.extra["cdn_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("cdn.signal.org")}\"\"\"
rootProject.extra["cdn2_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("cdn2.signal.org")}\"\"\"
rootProject.extra["cdn3_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("cdn3.signal.org")}\"\"\"
rootProject.extra["sfu_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("sfu.voip.signal.org")}\"\"\"
rootProject.extra["content_proxy_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("contentproxy.signal.org")}\"\"\"
rootProject.extra["svr2_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("svr2.signal.org")}\"\"\"
rootProject.extra["cdsi_ips"] = \"\"\"${staticIpResolver.resolveToBuildConfig("cdsi.signal.org")}\"\"\"
""".stripIndent().trim() + "\n"
}
}
task updateStaticFilesAndQa {
group 'Static Files'
description 'Runs tasks to update static files. This includes translations, static IPs, and licenses. Runs QA afterwards to verify all went well. Intended to be run before cutting a release.'
dependsOn replaceEllipsis, cleanApostropheErrors, excludeNonTranslatables, resolveStaticIps, postTranslateQa
}