diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index 38ddabeb87c..a370a001052 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -325,8 +325,8 @@ "@composeBoxSendTooltip": { "description": "Tooltip for send button in compose box." }, - "composeBoxUnknownChannelName": "(unknown channel)", - "@composeBoxUnknownChannelName": { + "unknownChannelName": "(unknown channel)", + "@unknownChannelName": { "description": "Replacement name for channel when it cannot be found in the store." }, "composeBoxTopicHintText": "Topic", @@ -618,6 +618,14 @@ "@channelFeedButtonTooltip": { "description": "Tooltip for button to navigate to a given channel's feed" }, + "notifChannelConversationLabel": "#{channel} > {topic}", + "@notifChannelConversationLabel": { + "description": "Label for a channel conversation notification.", + "placeholders": { + "channel": {"type": "String", "example": "channel name"}, + "topic": {"type": "String", "example": "topic name"} + } + }, "notifGroupDmConversationLabel": "{senderFullName} to you and {numOthers, plural, =1{1 other} other{{numOthers} others}}", "@notifGroupDmConversationLabel": { "description": "Label for a group DM conversation notification.", diff --git a/lib/generated/l10n/zulip_localizations.dart b/lib/generated/l10n/zulip_localizations.dart index 96668a51e15..b9eef210719 100644 --- a/lib/generated/l10n/zulip_localizations.dart +++ b/lib/generated/l10n/zulip_localizations.dart @@ -539,7 +539,7 @@ abstract class ZulipLocalizations { /// /// In en, this message translates to: /// **'(unknown channel)'** - String get composeBoxUnknownChannelName; + String get unknownChannelName; /// Hint text for topic input widget in compose box. /// @@ -937,6 +937,12 @@ abstract class ZulipLocalizations { /// **'Channel feed'** String get channelFeedButtonTooltip; + /// Label for a channel conversation notification. + /// + /// In en, this message translates to: + /// **'#{channel} > {topic}'** + String notifChannelConversationLabel(String channel, String topic); + /// Label for a group DM conversation notification. /// /// In en, this message translates to: diff --git a/lib/generated/l10n/zulip_localizations_ar.dart b/lib/generated/l10n/zulip_localizations_ar.dart index 2d43c1aa34a..2fac2565af2 100644 --- a/lib/generated/l10n/zulip_localizations_ar.dart +++ b/lib/generated/l10n/zulip_localizations_ar.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsAr extends ZulipLocalizations { String get composeBoxSendTooltip => 'Send'; @override - String get composeBoxUnknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Topic'; @@ -487,6 +487,11 @@ class ZulipLocalizationsAr extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Channel feed'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/generated/l10n/zulip_localizations_en.dart b/lib/generated/l10n/zulip_localizations_en.dart index 9661863cfc8..7918499a8ab 100644 --- a/lib/generated/l10n/zulip_localizations_en.dart +++ b/lib/generated/l10n/zulip_localizations_en.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsEn extends ZulipLocalizations { String get composeBoxSendTooltip => 'Send'; @override - String get composeBoxUnknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Topic'; @@ -487,6 +487,11 @@ class ZulipLocalizationsEn extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Channel feed'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/generated/l10n/zulip_localizations_fr.dart b/lib/generated/l10n/zulip_localizations_fr.dart index 131ae623366..5079caad416 100644 --- a/lib/generated/l10n/zulip_localizations_fr.dart +++ b/lib/generated/l10n/zulip_localizations_fr.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get composeBoxSendTooltip => 'Send'; @override - String get composeBoxUnknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Topic'; @@ -487,6 +487,11 @@ class ZulipLocalizationsFr extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Channel feed'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/generated/l10n/zulip_localizations_ja.dart b/lib/generated/l10n/zulip_localizations_ja.dart index ecea737106f..dce85b01484 100644 --- a/lib/generated/l10n/zulip_localizations_ja.dart +++ b/lib/generated/l10n/zulip_localizations_ja.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsJa extends ZulipLocalizations { String get composeBoxSendTooltip => 'Send'; @override - String get composeBoxUnknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Topic'; @@ -487,6 +487,11 @@ class ZulipLocalizationsJa extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Channel feed'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/generated/l10n/zulip_localizations_pl.dart b/lib/generated/l10n/zulip_localizations_pl.dart index 8532ac3ecf2..bfb0d6cc782 100644 --- a/lib/generated/l10n/zulip_localizations_pl.dart +++ b/lib/generated/l10n/zulip_localizations_pl.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsPl extends ZulipLocalizations { String get composeBoxSendTooltip => 'Wyślij'; @override - String get composeBoxUnknownChannelName => '(nieznany kanał)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Wątek'; @@ -487,6 +487,11 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Strumień kanału'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index 0337f8798c1..040e1d93fb6 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -259,7 +259,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get composeBoxSendTooltip => 'Send'; @override - String get composeBoxUnknownChannelName => '(unknown channel)'; + String get unknownChannelName => '(unknown channel)'; @override String get composeBoxTopicHintText => 'Topic'; @@ -487,6 +487,11 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get channelFeedButtonTooltip => 'Channel feed'; + @override + String notifChannelConversationLabel(String channel, String topic) { + return '#$channel > $topic'; + } + @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { String _temp0 = intl.Intl.pluralLogic( diff --git a/lib/notifications/display.dart b/lib/notifications/display.dart index 46ea95486aa..35f1b0ecc86 100644 --- a/lib/notifications/display.dart +++ b/lib/notifications/display.dart @@ -263,9 +263,10 @@ class NotificationDisplayManager { // the first. messagingStyle.conversationTitle = switch (data.recipient) { FcmMessageChannelRecipient(:var streamName?, :var topic) => - '#$streamName > $topic', + zulipLocalizations.notifChannelConversationLabel(streamName, topic), FcmMessageChannelRecipient(:var topic) => - '#(unknown channel) > $topic', // TODO get stream name from data + zulipLocalizations.notifChannelConversationLabel( + zulipLocalizations.unknownChannelName, topic), // TODO get stream name from data FcmMessageDmRecipient(:var allRecipientIds) when allRecipientIds.length > 2 => zulipLocalizations.notifGroupDmConversationLabel( data.senderFullName, allRecipientIds.length - 2), // TODO use others' names, from data diff --git a/lib/widgets/compose_box.dart b/lib/widgets/compose_box.dart index 114e392bc7b..2e05b6aec98 100644 --- a/lib/widgets/compose_box.dart +++ b/lib/widgets/compose_box.dart @@ -483,7 +483,7 @@ class _StreamContentInputState extends State<_StreamContentInput> { final store = PerAccountStoreWidget.of(context); final zulipLocalizations = ZulipLocalizations.of(context); final streamName = store.streams[widget.narrow.streamId]?.name - ?? zulipLocalizations.composeBoxUnknownChannelName; + ?? zulipLocalizations.unknownChannelName; return _ContentInput( narrow: widget.narrow, destination: TopicNarrow(widget.narrow.streamId, _topicTextNormalized), @@ -545,7 +545,7 @@ class _FixedDestinationContentInput extends StatelessWidget { case TopicNarrow(:final streamId, :final topic): final store = PerAccountStoreWidget.of(context); final streamName = store.streams[streamId]?.name - ?? zulipLocalizations.composeBoxUnknownChannelName; + ?? zulipLocalizations.unknownChannelName; return zulipLocalizations.composeBoxChannelContentHint(streamName, topic); case DmNarrow(otherRecipientIds: []): // The self-1:1 thread. diff --git a/lib/widgets/message_list.dart b/lib/widgets/message_list.dart index fff977a0d5f..8bceca646a6 100644 --- a/lib/widgets/message_list.dart +++ b/lib/widgets/message_list.dart @@ -317,6 +317,7 @@ class MessageListAppBarTitle extends StatelessWidget { Widget _buildStreamRow(BuildContext context, { ZulipStream? stream, }) { + final zulipLocalizations = ZulipLocalizations.of(context); // A null [Icon.icon] makes a blank space. final icon = stream != null ? iconDataForStream(stream) : null; return Row( @@ -328,7 +329,8 @@ class MessageListAppBarTitle extends StatelessWidget { children: [ Icon(size: 16, icon), const SizedBox(width: 4), - Flexible(child: Text(stream?.name ?? '(unknown channel)')), + Flexible(child: Text( + stream?.name ?? zulipLocalizations.unknownChannelName)), ]); } @@ -1028,6 +1030,7 @@ class StreamMessageRecipientHeader extends StatelessWidget { // https://github.com/zulip/zulip-mobile/issues/5511 final store = PerAccountStoreWidget.of(context); final designVariables = DesignVariables.of(context); + final zulipLocalizations = ZulipLocalizations.of(context); final topic = message.topic; @@ -1052,7 +1055,7 @@ class StreamMessageRecipientHeader extends StatelessWidget { final stream = store.streams[message.streamId]; final streamName = stream?.name ?? message.displayRecipient - ?? '(unknown channel)'; // TODO(log) + ?? zulipLocalizations.unknownChannelName; // TODO(log) streamWidget = GestureDetector( onTap: () => Navigator.push(context,