From 31b3ac2b4e4b41e1548728902c16fc6d48d46779 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 21 Nov 2025 06:51:19 +0100 Subject: [PATCH] l10n: Update translations from Weblate. --- assets/l10n/app_de.arb | 40 ++++++++++++++++++- assets/l10n/app_fr.arb | 28 +++++++++++++ assets/l10n/app_zh_Hant_TW.arb | 34 ++++++++++++++++ .../l10n/zulip_localizations_de.dart | 24 ++++++----- .../l10n/zulip_localizations_fr.dart | 14 +++---- .../l10n/zulip_localizations_zh.dart | 23 +++++++++++ 6 files changed, 146 insertions(+), 17 deletions(-) diff --git a/assets/l10n/app_de.arb b/assets/l10n/app_de.arb index b69742ffcc..febca32254 100644 --- a/assets/l10n/app_de.arb +++ b/assets/l10n/app_de.arb @@ -107,6 +107,9 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholderHeader": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, "@allChannelsPageTitle": { "description": "Title for the 'All channels' page." }, @@ -116,6 +119,18 @@ "@channelFeedButtonTooltip": { "description": "Tooltip for button to navigate to a given channel's feed" }, + "@channelsEmptyPlaceholderHeader": { + "description": "Centered text on the 'Channels' page saying that there is no content to show." + }, + "@channelsEmptyPlaceholderMessage": { + "description": "Centered text on the 'Channels' page saying that there is no content to show, with a link to 'All channels'.", + "placeholders": { + "allChannelsPageTitle": { + "example": "All channels", + "type": "String" + } + } + }, "@channelsPageTitle": { "description": "Title for the page with a list of subscribed channels." }, @@ -337,6 +352,9 @@ "@errorCopyingFailed": { "description": "Error message when copying the text of a message to the user's system clipboard failed." }, + "@errorCouldNotAccessUploadedFileTitle": { + "description": "Error title on failure in opening a file someone previously uploaded to Zulip" + }, "@errorCouldNotConnectTitle": { "description": "Error title when the app could not connect to the server." }, @@ -606,6 +624,12 @@ } } }, + "@inboxEmptyPlaceholderHeader": { + "description": "Centered text on the 'Inbox' page saying that there is no content to show." + }, + "@inboxEmptyPlaceholderMessage": { + "description": "Additional centered text on the 'Inbox' page saying that there is no content to show." + }, "@inboxPageTitle": { "description": "Title for the page with unreads." }, @@ -878,6 +902,12 @@ "@reactionChipsLabel": { "description": "Text identifying the container of reaction chips on a message. (An accessibility label for assistive technology.)" }, + "@recentDmConversationsEmptyPlaceholderHeader": { + "description": "Centered text on the 'Direct messages' page saying that there is no content to show." + }, + "@recentDmConversationsEmptyPlaceholderMessage": { + "description": "Additional centered text on the 'Direct messages' page saying that there is no content to show." + }, "@recentDmConversationsPageTitle": { "description": "Title for the page with a list of DM conversations." }, @@ -1267,9 +1297,12 @@ "actionSheetReadReceiptsErrorReadCount": "Laden von Empfangsbestätigungen fehlgeschlagen.", "actionSheetReadReceiptsReadCount": "{count, plural, =1{Diese Nachricht wurde von einer Person gelesen:} other{Diese Nachricht wurde von {count} Personen gelesen:}}", "actionSheetReadReceiptsZeroReadCount": "Niemand hat diese Nachricht bisher gelesen.", + "allChannelsEmptyPlaceholderHeader": "Es gibt keine Kanäle, die du in dieser Organisation anzeigen könntest.", "allChannelsPageTitle": "Alle Kanäle", "appVersionUnknownPlaceholder": "(…)", "channelFeedButtonTooltip": "Kanal-Feed", + "channelsEmptyPlaceholderHeader": "Du hast noch keine Kanäle abonniert.", + "channelsEmptyPlaceholderMessage": "Versuche, nach {allChannelsPageTitle} zu gehen und einigen davon beizutreten.", "channelsPageTitle": "Kanäle", "chooseAccountButtonAddAnAccount": "Account hinzufügen", "chooseAccountPageLogOutButton": "Abmelden", @@ -1325,6 +1358,7 @@ "errorContentNotInsertedTitle": "Inhalt nicht eingefügt", "errorContentToInsertIsEmpty": "Die einzufügende Datei ist leer oder kann nicht geöffnet werden.", "errorCopyingFailed": "Kopieren fehlgeschlagen", + "errorCouldNotAccessUploadedFileTitle": "Konnte nicht auf die hochgeladene Datei zugreifen", "errorCouldNotConnectTitle": "Konnte nicht verbinden", "errorCouldNotEditMessageTitle": "Konnte Nachricht nicht bearbeiten", "errorCouldNotFetchMessageSource": "Konnte Nachrichtenquelle nicht abrufen.", @@ -1378,6 +1412,8 @@ "experimentalFeatureSettingsPageTitle": "Experimentelle Funktionen", "experimentalFeatureSettingsWarning": "Diese Optionen aktivieren Funktionen, die noch in Entwicklung und nicht bereit sind. Sie funktionieren möglicherweise nicht und können Problem in anderen Bereichen der App verursachen.\n\nDer Zweck dieser Einstellungen ist das Experimentieren der Leute, die an der Entwicklung von Zulip arbeiten.", "filenameAndSizeInMiB": "{filename}: {size} MiB", + "inboxEmptyPlaceholderHeader": "Es gibt keine ungelesenen Nachrichten in deinem Posteingang.", + "inboxEmptyPlaceholderMessage": "Nutze die Buttons unten, um den kombinierten Feed oder die Liste der Kanäle anzuzeigen.", "inboxPageTitle": "Eingang", "initialAnchorSettingDescription": "Du kannst auswählen ob Nachrichten-Feeds bei deiner ersten ungelesenen oder bei den neuesten Nachrichten geöffnet werden.", "initialAnchorSettingFirstUnreadAlways": "Erste ungelesene Nachricht", @@ -1450,6 +1486,8 @@ "reactionChipLabel": "{emojiName}: {votes}", "reactionChipVotesYouAndOthers": "{otherUsersCount, plural, =1{Du und ein weiterer} other{Du und {otherUsersCount} weitere}}", "reactionChipsLabel": "Reaktionen", + "recentDmConversationsEmptyPlaceholderHeader": "Du hast noch keine Direktnachrichten!", + "recentDmConversationsEmptyPlaceholderMessage": "Warum beginnst du nicht einfach eine Unterhaltung?", "recentDmConversationsPageTitle": "Direktnachrichten", "recentDmConversationsSectionHeader": "Direktnachrichten", "revealButtonLabel": "Nachricht anzeigen", @@ -1492,7 +1530,7 @@ "themeSettingTitle": "THEMA", "today": "Heute", "topicValidationErrorMandatoryButEmpty": "Themen sind in dieser Organisation erforderlich.", - "topicValidationErrorTooLong": "Länge des Themas sollte 60 Zeichen nicht überschreiten.", + "topicValidationErrorTooLong": "Länge des Themas sollte {maxLength, plural, =1{1 Zeichen} other{{maxLength} Zeichen}} nicht überschreiten.", "topicsButtonTooltip": "Themen", "tryAnotherAccountButton": "Anderen Account ausprobieren", "tryAnotherAccountMessage": "Dein Account bei {url} benötigt einige Zeit zum Laden.", diff --git a/assets/l10n/app_fr.arb b/assets/l10n/app_fr.arb index 5a45f6081c..420e9a8036 100644 --- a/assets/l10n/app_fr.arb +++ b/assets/l10n/app_fr.arb @@ -65,6 +65,9 @@ "@actionSheetOptionStarMessage": { "description": "Label for star button on action sheet." }, + "@actionSheetOptionSubscribe": { + "description": "Label in the channel action sheet for subscribing to the channel." + }, "@actionSheetOptionUnfollowTopic": { "description": "Label for unfollowing a topic on action sheet." }, @@ -98,6 +101,9 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholderHeader": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, "@channelFeedButtonTooltip": { "description": "Tooltip for button to navigate to a given channel's feed" }, @@ -122,9 +128,18 @@ "@composeBoxBannerButtonSave": { "description": "Label text for the 'Save' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonSubscribe": { + "description": "Label text for the 'Subscribe' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@composeBoxBannerLabelEditMessage": { "description": "Label text for the compose-box banner when you are editing a message." }, + "@composeBoxSendTooltip": { + "description": "Tooltip for send button in compose box." + }, + "@composeBoxTopicHintText": { + "description": "Hint text for topic input widget in compose box." + }, "@deleteMessageConfirmationDialogConfirmButton": { "description": "Label for the 'Delete' button on a confirmation dialog for deleting a message." }, @@ -366,6 +381,9 @@ "@mentionsPageTitle": { "description": "Page title for the 'Mentions' message view." }, + "@newDmSheetComposeButtonLabel": { + "description": "Label for the compose button in the new DM sheet that starts composing a message to the selected users." + }, "@noStatusText": { "description": "The text part of the status button sub-label in self-user profile page when status text is not set." }, @@ -555,6 +573,9 @@ } } }, + "@unknownUserName": { + "description": "Name placeholder to use for a user when we don't know their name." + }, "@unpinnedSubscriptionsLabel": { "description": "Label for the list of unpinned subscribed channels." }, @@ -637,6 +658,7 @@ "actionSheetOptionSeeWhoReacted": "Voir qui a réagi", "actionSheetOptionShare": "Partager", "actionSheetOptionStarMessage": "Mettre le message en favori", + "actionSheetOptionSubscribe": "S'abonner", "actionSheetOptionUnfollowTopic": "Ne plus suivre le sujet", "actionSheetOptionUnmuteTopic": "Rendre le sujet non silencieux", "actionSheetOptionUnresolveTopic": "Marquer comme non résolu", @@ -646,6 +668,7 @@ "actionSheetReadReceiptsErrorReadCount": "Échec du chargement des accusés de réception.", "actionSheetReadReceiptsReadCount": "{count, plural, =1{Ce message a été lu par {count} personne:} other{Ce message a été lu par {count} personnes :}}", "actionSheetReadReceiptsZeroReadCount": "Personne n'a encore lu ce message.", + "allChannelsEmptyPlaceholderHeader": "Il n'y a pas de canal que vous pouvez visualiser dans cette organisation.", "channelFeedButtonTooltip": "Fil de la chaîne", "channelsPageTitle": "Chaînes", "chooseAccountButtonAddAnAccount": "Ajouter un compte", @@ -654,7 +677,10 @@ "combinedFeedPageTitle": "Fil groupé", "composeBoxBannerButtonCancel": "Annuler", "composeBoxBannerButtonSave": "Sauvegarder", + "composeBoxBannerButtonSubscribe": "S'abonner", "composeBoxBannerLabelEditMessage": "Editer le message", + "composeBoxSendTooltip": "Envoyer", + "composeBoxTopicHintText": "Sujet", "deleteMessageConfirmationDialogConfirmButton": "Supprimer", "deleteMessageConfirmationDialogMessage": "Supprimer un message de façon permanente le supprime pour tout le monde.", "deleteMessageConfirmationDialogTitle": "Supprimer message ?", @@ -706,6 +732,7 @@ "mainMenuMyProfile": "Mon profil", "manyPeopleTyping": "Plusieurs personnes sont en train d'écrire…", "mentionsPageTitle": "Mentions", + "newDmSheetComposeButtonLabel": "Rédiger", "noStatusText": "Statut sans texte", "notifGroupDmConversationLabel": "{senderFullName} à vous et {numOthers, plural, =1{1 other} other{{numOthers} others}}", "notifSelfUser": "Vous", @@ -747,6 +774,7 @@ "tryAnotherAccountButton": "Essayer un autre compte", "tryAnotherAccountMessage": "Votre compte à {url} prend du temps à se charger.", "twoPeopleTyping": "{typist} et {otherTypist} sont en train d'écrire…", + "unknownUserName": "(utilisateur inconnu)", "unpinnedSubscriptionsLabel": "Désépingler", "unsubscribeConfirmationDialogConfirmButton": "Se désinscrire", "unsubscribeConfirmationDialogTitle": "Se désinscrire de {channelName}?", diff --git a/assets/l10n/app_zh_Hant_TW.arb b/assets/l10n/app_zh_Hant_TW.arb index 6ae7f7ac92..439fbfa91f 100644 --- a/assets/l10n/app_zh_Hant_TW.arb +++ b/assets/l10n/app_zh_Hant_TW.arb @@ -107,6 +107,9 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholderHeader": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, "@allChannelsPageTitle": { "description": "Title for the 'All channels' page." }, @@ -116,6 +119,18 @@ "@channelFeedButtonTooltip": { "description": "Tooltip for button to navigate to a given channel's feed" }, + "@channelsEmptyPlaceholderHeader": { + "description": "Centered text on the 'Channels' page saying that there is no content to show." + }, + "@channelsEmptyPlaceholderMessage": { + "description": "Centered text on the 'Channels' page saying that there is no content to show, with a link to 'All channels'.", + "placeholders": { + "allChannelsPageTitle": { + "example": "All channels", + "type": "String" + } + } + }, "@channelsPageTitle": { "description": "Title for the page with a list of subscribed channels." }, @@ -609,6 +624,12 @@ } } }, + "@inboxEmptyPlaceholderHeader": { + "description": "Centered text on the 'Inbox' page saying that there is no content to show." + }, + "@inboxEmptyPlaceholderMessage": { + "description": "Additional centered text on the 'Inbox' page saying that there is no content to show." + }, "@inboxPageTitle": { "description": "Title for the page with unreads." }, @@ -881,6 +902,12 @@ "@reactionChipsLabel": { "description": "Text identifying the container of reaction chips on a message. (An accessibility label for assistive technology.)" }, + "@recentDmConversationsEmptyPlaceholderHeader": { + "description": "Centered text on the 'Direct messages' page saying that there is no content to show." + }, + "@recentDmConversationsEmptyPlaceholderMessage": { + "description": "Additional centered text on the 'Direct messages' page saying that there is no content to show." + }, "@recentDmConversationsPageTitle": { "description": "Title for the page with a list of DM conversations." }, @@ -1268,9 +1295,12 @@ "actionSheetReadReceiptsErrorReadCount": "載入已讀回條失敗。", "actionSheetReadReceiptsReadCount": "{count, plural, =1{此訊息已被閱讀,共有 {count} 人:} other{此訊息已被閱讀,共有 {count} 人:}}", "actionSheetReadReceiptsZeroReadCount": "尚無人閱讀此訊息。", + "allChannelsEmptyPlaceholderHeader": "在此組織中沒有您可以查看的頻道。", "allChannelsPageTitle": "所有頻道", "appVersionUnknownPlaceholder": "(…)", "channelFeedButtonTooltip": "頻道饋給", + "channelsEmptyPlaceholderHeader": "您尚未訂閱任何頻道。", + "channelsEmptyPlaceholderMessage": "試著前往 {allChannelsPageTitle},加入一些頻道吧。", "channelsPageTitle": "頻道", "chooseAccountButtonAddAnAccount": "增添帳號", "chooseAccountPageLogOutButton": "登出", @@ -1380,6 +1410,8 @@ "experimentalFeatureSettingsPageTitle": "實驗性功能", "experimentalFeatureSettingsWarning": "這些選項啟用的功能仍在開發中,尚未完善。它們可能無法正常運作,且可能導致應用程式其他部分出現問題。\n\n這些設定的目的是供參與 Zulip 開發的人員進行試驗使用。", "filenameAndSizeInMiB": "{filename}: {size} MiB", + "inboxEmptyPlaceholderHeader": "您的收件匣中沒有未讀訊息。", + "inboxEmptyPlaceholderMessage": "請使用下方按鈕查看綜合動態或頻道清單。", "inboxPageTitle": "收件匣", "initialAnchorSettingDescription": "您可以選擇將訊息串開啟在第一則未讀訊息,或是最新的訊息。", "initialAnchorSettingFirstUnreadAlways": "第一則未讀訊息", @@ -1452,6 +1484,8 @@ "reactionChipLabel": "{emojiName}: {votes}", "reactionChipVotesYouAndOthers": "{otherUsersCount, plural, =1 {你與其他 1 人} other {你與其他 {otherUsersCount} 人}}", "reactionChipsLabel": "反應", + "recentDmConversationsEmptyPlaceholderHeader": "您尚未有任何私人訊息!", + "recentDmConversationsEmptyPlaceholderMessage": "要不要開始一段對話呢?", "recentDmConversationsPageTitle": "私人訊息", "recentDmConversationsSectionHeader": "私人訊息", "revealButtonLabel": "顯示訊息", diff --git a/lib/generated/l10n/zulip_localizations_de.dart b/lib/generated/l10n/zulip_localizations_de.dart index 0a43ac50b5..8ff93b1a3a 100644 --- a/lib/generated/l10n/zulip_localizations_de.dart +++ b/lib/generated/l10n/zulip_localizations_de.dart @@ -75,7 +75,7 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get allChannelsEmptyPlaceholderHeader => - 'There are no channels you can view in this organization.'; + 'Es gibt keine Kanäle, die du in dieser Organisation anzeigen könntest.'; @override String get profileButtonSendDirectMessage => 'Direktnachricht senden'; @@ -288,7 +288,7 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get errorCouldNotAccessUploadedFileTitle => - 'Could not access uploaded file'; + 'Konnte nicht auf die hochgeladene Datei zugreifen'; @override String get errorCopyingFailed => 'Kopieren fehlgeschlagen'; @@ -681,7 +681,13 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String topicValidationErrorTooLong(int maxLength) { - return 'Länge des Themas sollte 60 Zeichen nicht überschreiten.'; + String _temp0 = intl.Intl.pluralLogic( + maxLength, + locale: localeName, + other: '$maxLength Zeichen', + one: '1 Zeichen', + ); + return 'Länge des Themas sollte $_temp0 nicht überschreiten.'; } @override @@ -938,11 +944,11 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get inboxEmptyPlaceholderHeader => - 'There are no unread messages in your inbox.'; + 'Es gibt keine ungelesenen Nachrichten in deinem Posteingang.'; @override String get inboxEmptyPlaceholderMessage => - 'Use the buttons below to view the combined feed or list of channels.'; + 'Nutze die Buttons unten, um den kombinierten Feed oder die Liste der Kanäle anzuzeigen.'; @override String get recentDmConversationsPageTitle => 'Direktnachrichten'; @@ -952,11 +958,11 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get recentDmConversationsEmptyPlaceholderHeader => - 'You have no direct messages yet!'; + 'Du hast noch keine Direktnachrichten!'; @override String get recentDmConversationsEmptyPlaceholderMessage => - 'Why not start a conversation?'; + 'Warum beginnst du nicht einfach eine Unterhaltung?'; @override String get combinedFeedPageTitle => 'Kombinierter Feed'; @@ -972,11 +978,11 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get channelsEmptyPlaceholderHeader => - 'You’re not subscribed to any channels yet.'; + 'Du hast noch keine Kanäle abonniert.'; @override String channelsEmptyPlaceholderMessage(String allChannelsPageTitle) { - return 'Try going to $allChannelsPageTitle and joining some of them.'; + return 'Versuche, nach $allChannelsPageTitle zu gehen und einigen davon beizutreten.'; } @override diff --git a/lib/generated/l10n/zulip_localizations_fr.dart b/lib/generated/l10n/zulip_localizations_fr.dart index 0d64c3b679..de4a957f9e 100644 --- a/lib/generated/l10n/zulip_localizations_fr.dart +++ b/lib/generated/l10n/zulip_localizations_fr.dart @@ -76,7 +76,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { @override String get allChannelsEmptyPlaceholderHeader => - 'There are no channels you can view in this organization.'; + 'Il n\'y a pas de canal que vous pouvez visualiser dans cette organisation.'; @override String get profileButtonSendDirectMessage => 'Envoyer un message direct'; @@ -100,7 +100,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { 'Pour charger des fichiers, merci d\'accorder des autorisations supplémentaires à Zulip, dans les préférences.'; @override - String get actionSheetOptionSubscribe => 'Subscribe'; + String get actionSheetOptionSubscribe => 'S\'abonner'; @override String get subscribeFailedTitle => 'Failed to subscribe'; @@ -453,7 +453,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get composeBoxBannerButtonRefresh => 'Refresh'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'S\'abonner'; @override String get composeBoxBannerLabelEditMessage => 'Editer le message'; @@ -505,7 +505,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get composeBoxGenericContentHint => 'Type a message'; @override - String get newDmSheetComposeButtonLabel => 'Compose'; + String get newDmSheetComposeButtonLabel => 'Rédiger'; @override String get newDmSheetScreenTitle => 'New DM'; @@ -542,13 +542,13 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get preparingEditMessageContentInput => 'Preparing…'; @override - String get composeBoxSendTooltip => 'Send'; + String get composeBoxSendTooltip => 'Envoyer'; @override String get unknownChannelName => '(unknown channel)'; @override - String get composeBoxTopicHintText => 'Topic'; + String get composeBoxTopicHintText => 'Sujet'; @override String composeBoxEnterTopicOrSkipHintText(String defaultTopicName) { @@ -566,7 +566,7 @@ class ZulipLocalizationsFr extends ZulipLocalizations { } @override - String get unknownUserName => '(unknown user)'; + String get unknownUserName => '(utilisateur inconnu)'; @override String get dmsWithYourselfPageTitle => 'DMs with yourself'; diff --git a/lib/generated/l10n/zulip_localizations_zh.dart b/lib/generated/l10n/zulip_localizations_zh.dart index 5db806ac0e..94d5b5d397 100644 --- a/lib/generated/l10n/zulip_localizations_zh.dart +++ b/lib/generated/l10n/zulip_localizations_zh.dart @@ -2334,6 +2334,9 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { @override String get allChannelsPageTitle => '所有頻道'; + @override + String get allChannelsEmptyPlaceholderHeader => '在此組織中沒有您可以查看的頻道。'; + @override String get profileButtonSendDirectMessage => '發送私訊'; @@ -3144,12 +3147,24 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { @override String get inboxPageTitle => '收件匣'; + @override + String get inboxEmptyPlaceholderHeader => '您的收件匣中沒有未讀訊息。'; + + @override + String get inboxEmptyPlaceholderMessage => '請使用下方按鈕查看綜合動態或頻道清單。'; + @override String get recentDmConversationsPageTitle => '私人訊息'; @override String get recentDmConversationsSectionHeader => '私人訊息'; + @override + String get recentDmConversationsEmptyPlaceholderHeader => '您尚未有任何私人訊息!'; + + @override + String get recentDmConversationsEmptyPlaceholderMessage => '要不要開始一段對話呢?'; + @override String get combinedFeedPageTitle => '綜合饋給'; @@ -3162,6 +3177,14 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { @override String get channelsPageTitle => '頻道'; + @override + String get channelsEmptyPlaceholderHeader => '您尚未訂閱任何頻道。'; + + @override + String channelsEmptyPlaceholderMessage(String allChannelsPageTitle) { + return '試著前往 $allChannelsPageTitle,加入一些頻道吧。'; + } + @override String get sharePageTitle => '分享';