Repository: freedomofpress/securedrop

Issue:
1.8.0 translation feedback: say replies are saved, not stored
## Description

From [AO](https://weblate.securedrop.org/translate/securedrop/securedrop/en/?checksum=a6f950dfa57047f3): "Your reply has been saved." might be better than "Your reply has been stored."



Discussion:
Fun fact - that language goes back to the AaronSw days of SecureDrop (8b1b3580137a57c76f27a9c90101926255da2b5b). I agree "has been saved" is a bit more friendly. I don't see that string having changed in the last development cycle though, am I missing something? If not I would be inclined to wait with this change until after 1.8.0.
The language has not changed, but the construction of the flash message did, which resulted in the message being broken up into two, which now need to be translated separately. If we're going to change "stored" to "saved", it would save work to do it now.
Discussed a bit more with @ninavizz. We don't think a single word change would make this message significantly more user-friendly, and would like to suggest revising it fully for a future release. The problem that `stored` and `saved` share is that they only speak to the technical completion of an operation, and don't clearly relate to the journalist's intent (talking to a source). In fact, `saved` is often associated with saving drafts (e.g., in email apps) that then later have to be sent. As jargon-y as it is, `stored` at least is not typically used in this fashion.

That said, the message should definitely be improved. A message that more explicitly speaks to the journalist's intent (e.g., "Success! The source will be able to read your reply next time they log in" or something to that effect) would  perhaps work better. We can discuss that a bit more here.

Even though the structure of the message has changed for 1.8.0, the word `stored` has previous translations, so for now, I would suggest just retaining those translations.
"posted" is also an option - implies that it has yet to be  "delivered."

Resolving patch:
diff --git a/securedrop/journalist_app/main.py b/securedrop/journalist_app/main.py
--- a/securedrop/journalist_app/main.py
+++ b/securedrop/journalist_app/main.py
@@ -163,7 +163,8 @@ def reply() -> werkzeug.Response:
                     "<b>{}</b> {}".format(
                         # Translators: Precedes a message confirming the success of an operation.
                         escape(gettext("Success!")),
-                        escape(gettext("Your reply has been stored."))
+                        escape(gettext("The source will receive your reply "
+                                       "next time they log in."))
                     )
                 ), 'success')
         finally:


Test patch:
diff --git a/securedrop/tests/functional/journalist_navigation_steps.py b/securedrop/tests/functional/journalist_navigation_steps.py
--- a/securedrop/tests/functional/journalist_navigation_steps.py
+++ b/securedrop/tests/functional/journalist_navigation_steps.py
@@ -857,7 +857,7 @@ def _journalist_sends_reply_to_source(self):
 
         def reply_stored():
             if not self.accept_languages:
-                assert "Your reply has been stored." in self.driver.page_source
+                assert "The source will receive your reply" in self.driver.page_source
 
         self.wait_for(reply_stored)
 
diff --git a/securedrop/tests/test_integration.py b/securedrop/tests/test_integration.py
--- a/securedrop/tests/test_integration.py
+++ b/securedrop/tests/test_integration.py
@@ -284,7 +284,7 @@ def _helper_test_reply(journalist_app, source_app, config, test_journo,
             pass
         else:
             text = resp.data.decode('utf-8')
-            assert "Your reply has been stored." in text
+            assert "The source will receive your reply" in text
 
         resp = app.get(col_url)
         text = resp.data.decode('utf-8')