compose_closed_ui: Unify translation strings for reply button label.

This commit unifies translation strings for reply button label
to reduce translation effort.

Both the `has_empty_string_topic` and other cases now use a single
"Message <z-recipient-label></z-recipient-label>"`, with dynamic
content passed appropriately.
This commit is contained in:
Prakhar Pratyush
2025-01-15 12:51:18 +05:30
committed by Tim Abbott
parent 181572021d
commit 3706940df6
3 changed files with 29 additions and 27 deletions

View File

@@ -1,7 +1,9 @@
import $ from "jquery";
import render_reply_recipient_label from "../templates/reply_recipient_label.hbs";
import * as compose_actions from "./compose_actions.ts";
import {$t, $t_html} from "./i18n.ts";
import {$t} from "./i18n.ts";
import * as message_lists from "./message_lists.ts";
import * as message_store from "./message_store.ts";
import * as message_util from "./message_util.ts";
@@ -172,24 +174,14 @@ export function set_standard_text_for_reply_button(): void {
export function update_reply_recipient_label(message?: ComposeClosedMessage): void {
const recipient_label = get_recipient_label(message);
if (recipient_label !== undefined) {
if (!recipient_label.has_empty_string_topic) {
const recipient_label_text = recipient_label.label_text;
set_reply_button_label(
$t({defaultMessage: "Message {recipient_label_text}"}, {recipient_label_text}),
);
} else {
const topic_display_name = util.get_final_topic_display_name("");
const recipient_label_html = $t_html(
{
defaultMessage: "Message <z-recipient-label></z-recipient-label>",
},
{
"z-recipient-label": () =>
`#${recipient_label.stream_name} > <span class="empty-topic-display">${topic_display_name}</span>`,
},
);
$("#left_bar_compose_reply_button_big").html(recipient_label_html);
}
const empty_string_topic_display_name = util.get_final_topic_display_name("");
const rendered_recipient_label = render_reply_recipient_label({
has_empty_string_topic: recipient_label.has_empty_string_topic,
channel_name: recipient_label.stream_name,
empty_string_topic_display_name,
label_text: recipient_label.label_text,
});
$("#left_bar_compose_reply_button_big").html(rendered_recipient_label);
} else {
set_standard_text_for_reply_button();
}

View File

@@ -0,0 +1,10 @@
{{#tr}}
Message <z-recipient-label></z-recipient-label>
{{#*inline "z-recipient-label"}}
{{#if has_empty_string_topic~}}
#{{channel_name}} &gt; <span class="empty-topic-display">{{empty_string_topic_display_name}}</span>
{{~else~}}
{{label_text}}
{{~/if}}
{{~/inline}}
{{/tr}}

View File

@@ -38,8 +38,8 @@ set_realm({realm_empty_topic_display_name: REALM_EMPTY_TOPIC_DISPLAY_NAME});
// Helper test function
function test_reply_label(expected_label) {
const label = $("#left_bar_compose_reply_button_big").text();
const prepend_text_length = "translated: Message ".length;
const label = $("#left_bar_compose_reply_button_big").html();
const prepend_text_length = "Message ".length;
assert.equal(
label.slice(prepend_text_length),
expected_label,
@@ -111,10 +111,10 @@ run_test("reply_label", () => {
);
const expected_labels = [
"#first_stream > first_topic",
"#first_stream > second_topic",
"#second_stream > third_topic",
"#second_stream > second_topic",
"#first_stream &gt; first_topic",
"#first_stream &gt; second_topic",
"#second_stream &gt; third_topic",
"#second_stream &gt; second_topic",
"some user",
"some user, other user",
];
@@ -138,7 +138,7 @@ run_test("reply_label", () => {
list.select_id(list.next());
const label_html = $("#left_bar_compose_reply_button_big").html();
assert.equal(
`translated HTML: Message #second_stream > <span class="empty-topic-display">translated: ${REALM_EMPTY_TOPIC_DISPLAY_NAME}</span>`,
`Message #second_stream &gt; <span class="empty-topic-display">translated: ${REALM_EMPTY_TOPIC_DISPLAY_NAME}</span>`,
label_html,
);
});
@@ -154,7 +154,7 @@ run_test("test_custom_message_input", () => {
stream_id: stream.stream_id,
topic: "topic test",
});
test_reply_label("#stream test > topic test");
test_reply_label("#stream test &gt; topic test");
});
run_test("empty_narrow", () => {