diff --git a/assets/l10n/app_de.arb b/assets/l10n/app_de.arb index f2d6f55960..611eb9eee8 100644 --- a/assets/l10n/app_de.arb +++ b/assets/l10n/app_de.arb @@ -26,6 +26,9 @@ "@actionSheetOptionCopyTopicLink": { "description": "Label for copy topic link button in action sheet." }, + "@actionSheetOptionDeleteMessage": { + "description": "Label for the 'Delete message' button in the message action sheet." + }, "@actionSheetOptionEditMessage": { "description": "Label for the 'Edit message' button in the message action sheet." }, @@ -104,6 +107,12 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholder": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, + "@allChannelsPageTitle": { + "description": "Title for the 'All channels' page." + }, "@appVersionUnknownPlaceholder": { "description": "Placeholder to show in place of the app version when it is unknown." }, @@ -113,6 +122,15 @@ "@channelsEmptyPlaceholder": { "description": "Centered text on the 'Channels' page saying that there is no content to show." }, + "@channelsEmptyPlaceholderWithAllChannelsLink": { + "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." }, @@ -140,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -218,6 +245,15 @@ "@contentValidationErrorUploadInProgress": { "description": "Content validation error message when attachments have not finished uploading." }, + "@deleteMessageConfirmationDialogConfirmButton": { + "description": "Label for the 'Delete' button on a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for deleting a message." + }, "@dialogCancel": { "description": "Button label in dialogs to cancel." }, @@ -340,6 +376,9 @@ "@errorCouldNotShowUserProfile": { "description": "Message that appears on the user profile page when the profile cannot be shown." }, + "@errorDeleteMessageFailedTitle": { + "description": "Error title when deleting a message failed." + }, "@errorDialogContinue": { "description": "Button label in error dialogs to acknowledge the error and close the dialog." }, @@ -738,6 +777,9 @@ "@mutedUser": { "description": "Name for a muted user to display all over the app." }, + "@navButtonAllChannels": { + "description": "Title for a nav button that opens the 'All channels' page." + }, "@newDmFabButtonLabel": { "description": "Label for the floating action button (FAB) that opens the new DM sheet." }, @@ -1062,8 +1104,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1221,6 +1263,7 @@ "actionSheetOptionCopyMessageLink": "Link zur Nachricht kopieren", "actionSheetOptionCopyMessageText": "Nachrichtentext kopieren", "actionSheetOptionCopyTopicLink": "Link zum Thema kopieren", + "actionSheetOptionDeleteMessage": "Nachricht löschen", "actionSheetOptionEditMessage": "Nachricht bearbeiten", "actionSheetOptionFollowTopic": "Thema folgen", "actionSheetOptionHideMutedMessage": "Stummgeschaltete Nachricht wieder ausblenden", @@ -1245,9 +1288,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.", + "allChannelsEmptyPlaceholder": "Es gibt in dieser Organisation keine Kanäle die du ansehen kannst.", + "allChannelsPageTitle": "Alle Kanäle", "appVersionUnknownPlaceholder": "(…)", "channelFeedButtonTooltip": "Kanal-Feed", "channelsEmptyPlaceholder": "Du hast noch keine Kanäle abonniert.", + "channelsEmptyPlaceholderWithAllChannelsLink": "Du hast noch keine Kanäle abonniert. Probiere zu {allChannelsPageTitle} zu gehen und ein paar von ihnen beizutreten.", "channelsPageTitle": "Kanäle", "chooseAccountButtonAddAnAccount": "Account hinzufügen", "chooseAccountPageLogOutButton": "Abmelden", @@ -1257,15 +1303,18 @@ "composeBoxAttachFromCameraTooltip": "Ein Foto aufnehmen", "composeBoxAttachMediaTooltip": "Bilder oder Videos anhängen", "composeBoxBannerButtonCancel": "Abbrechen", + "composeBoxBannerButtonRefresh": "Auffrischen", "composeBoxBannerButtonSave": "Speichern", + "composeBoxBannerButtonSubscribe": "Abonnieren", "composeBoxBannerLabelEditMessage": "Nachricht bearbeiten", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "Neue Nachrichten werden nicht automatisch angezeigt.", "composeBoxChannelContentHint": "Nachricht an {destination}", "composeBoxDmContentHint": "Nachricht an @{user}", "composeBoxEnterTopicOrSkipHintText": "Gib ein Thema ein (leer lassen für “{defaultTopicName}”)", "composeBoxGenericContentHint": "Eine Nachricht eingeben", "composeBoxGroupDmContentHint": "Nachricht an Gruppe", "composeBoxLoadingMessage": "(lade Nachricht {messageId})", - "composeBoxSelfDmContentHint": "Schreibe etwas", + "composeBoxSelfDmContentHint": "Schreibe dir selbst eine Notiz", "composeBoxSendTooltip": "Senden", "composeBoxTopicHintText": "Thema", "composeBoxUploadingFilename": "Lade {filename} hoch…", @@ -1273,6 +1322,9 @@ "contentValidationErrorQuoteAndReplyInProgress": "Bitte warte bis das Zitat abgeschlossen ist.", "contentValidationErrorTooLong": "Nachrichtenlänge sollte nicht größer als 10000 Zeichen sein.", "contentValidationErrorUploadInProgress": "Bitte warte bis das Hochladen abgeschlossen ist.", + "deleteMessageConfirmationDialogConfirmButton": "Löschen", + "deleteMessageConfirmationDialogMessage": "Das Löschen einer Nachricht entfernt diese permanent für alle Nutzer:innen.", + "deleteMessageConfirmationDialogTitle": "Nachricht löschen?", "dialogCancel": "Abbrechen", "dialogClose": "Schließen", "dialogContinue": "Fortsetzen", @@ -1303,6 +1355,7 @@ "errorCouldNotOpenLink": "Link konnte nicht geöffnet werden: {url}", "errorCouldNotOpenLinkTitle": "Link kann nicht geöffnet werden", "errorCouldNotShowUserProfile": "Nutzerprofil kann nicht angezeigt werden.", + "errorDeleteMessageFailedTitle": "Löschen der Nachricht fehlgeschlagen", "errorDialogContinue": "OK", "errorDialogLearnMore": "Mehr erfahren", "errorDialogTitle": "Fehler", @@ -1395,6 +1448,7 @@ "messageListGroupYouWithYourself": "Nachrichten mit dir selbst", "messageNotSentLabel": "NACHRICHT NICHT GESENDET", "mutedUser": "Stummgeschaltete:r Nutzer:in", + "navButtonAllChannels": "Alle Kanäle", "newDmFabButtonLabel": "Neue DN", "newDmSheetComposeButtonLabel": "Verfassen", "newDmSheetNoUsersFound": "Keine Nutzer:innen gefunden", @@ -1475,7 +1529,7 @@ "unknownUserName": "(Nutzer:in unbekannt)", "unpinnedSubscriptionsLabel": "Nicht angeheftet", "unsubscribeConfirmationDialogConfirmButton": "Deabonnieren", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "Wenn du diesen Kanal verlässt, kannst du sich vielleicht nicht wieder beitreten.", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "Sobald du diesen Kanal verlässt, kannst du ihm nicht mehr beitreten.", "unsubscribeConfirmationDialogTitle": "{channelName} deabonnieren?", "unsubscribeFailedTitle": "Konnte nicht deabonnieren", "updateStatusErrorTitle": "Fehler beim Update des Benutzerstatus. Bitte versuche es nochmal.", diff --git a/assets/l10n/app_el.arb b/assets/l10n/app_el.arb new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assets/l10n/app_el.arb @@ -0,0 +1 @@ +{} diff --git a/assets/l10n/app_es.arb b/assets/l10n/app_es.arb new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assets/l10n/app_es.arb @@ -0,0 +1 @@ +{} diff --git a/assets/l10n/app_fr.arb b/assets/l10n/app_fr.arb index de1eb29f29..ad4d12a61b 100644 --- a/assets/l10n/app_fr.arb +++ b/assets/l10n/app_fr.arb @@ -23,6 +23,9 @@ "@actionSheetOptionCopyTopicLink": { "description": "Label for copy topic link button in action sheet." }, + "@actionSheetOptionDeleteMessage": { + "description": "Label for the 'Delete message' button in the message action sheet." + }, "@actionSheetOptionEditMessage": { "description": "Label for the 'Edit message' button in the message action sheet." }, @@ -53,6 +56,9 @@ "@actionSheetOptionResolveTopic": { "description": "Label for the 'Mark as resolved' button on the topic action sheet." }, + "@actionSheetOptionSeeWhoReacted": { + "description": "Label for the 'See who reacted' button in the message action sheet." + }, "@actionSheetOptionShare": { "description": "Label for share button on action sheet." }, @@ -71,6 +77,45 @@ "@actionSheetOptionUnstarMessage": { "description": "Label for unstar button on action sheet." }, + "@actionSheetOptionViewReadReceipts": { + "description": "Label for the 'View read receipts' button in the message action sheet." + }, + "@actionSheetReadReceipts": { + "description": "Title for the \"Read receipts\" bottom sheet." + }, + "@actionSheetReadReceiptsErrorReadCount": { + "description": "Label in the \"Read receipts\" bottom sheet when loading read receipts failed." + }, + "@actionSheetReadReceiptsReadCount": { + "description": "Label in the \"Read receipts\" bottom sheet when one or more people have read the message.", + "placeholders": { + "count": { + "example": "1", + "type": "int" + } + } + }, + "@actionSheetReadReceiptsZeroReadCount": { + "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." + }, + "@channelFeedButtonTooltip": { + "description": "Tooltip for button to navigate to a given channel's feed" + }, + "@channelsEmptyPlaceholder": { + "description": "Centered text on the 'Channels' page saying that there is no content to show." + }, + "@channelsEmptyPlaceholderWithAllChannelsLink": { + "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." + }, "@chooseAccountButtonAddAnAccount": { "description": "Label for ChooseAccountPage button to add an account" }, @@ -80,6 +125,9 @@ "@chooseAccountPageTitle": { "description": "Title for the page to choose between Zulip accounts." }, + "@combinedFeedPageTitle": { + "description": "Page title for the 'Combined feed' message view." + }, "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, @@ -89,6 +137,15 @@ "@composeBoxBannerLabelEditMessage": { "description": "Label text for the compose-box banner when you are editing a message." }, + "@deleteMessageConfirmationDialogConfirmButton": { + "description": "Label for the 'Delete' button on a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for deleting a message." + }, "@editAlreadyInProgressMessage": { "description": "Error message when a message edit cannot be saved because there is another edit already in progress." }, @@ -160,6 +217,9 @@ "@errorCouldNotShowUserProfile": { "description": "Message that appears on the user profile page when the profile cannot be shown." }, + "@errorDeleteMessageFailedTitle": { + "description": "Error title when deleting a message failed." + }, "@errorFailedToUploadFileTitle": { "description": "Error title when the specified file failed to upload.", "placeholders": { @@ -297,6 +357,12 @@ } } }, + "@inboxEmptyPlaceholder": { + "description": "Centered text on the 'Inbox' page saying that there is no content to show." + }, + "@inboxPageTitle": { + "description": "Title for the page with unreads." + }, "@logOutConfirmationDialogConfirmButton": { "description": "Label for the 'Log out' button on a confirmation dialog for logging out." }, @@ -306,6 +372,43 @@ "@logOutConfirmationDialogTitle": { "description": "Title for a confirmation dialog for logging out." }, + "@mainMenuMyProfile": { + "description": "Label for main-menu button leading to the user's own profile." + }, + "@manyPeopleTyping": { + "description": "Text to display when there are multiple users typing." + }, + "@mentionsPageTitle": { + "description": "Page title for the 'Mentions' message view." + }, + "@noStatusText": { + "description": "The text part of the status button sub-label in self-user profile page when status text is not set." + }, + "@notifGroupDmConversationLabel": { + "description": "Label for a group DM conversation notification.", + "placeholders": { + "numOthers": { + "example": "4", + "type": "int" + }, + "senderFullName": { + "example": "Alice", + "type": "String" + } + } + }, + "@notifSelfUser": { + "description": "Display name for the user themself, to show after replying in an Android notification" + }, + "@onePersonTyping": { + "description": "Text to display when there is one user typing.", + "placeholders": { + "typist": { + "example": "Alice", + "type": "String" + } + } + }, "@permissionsDeniedCameraAccess": { "description": "Message for dialog asking the user to grant permissions for camera access." }, @@ -318,12 +421,114 @@ "@permissionsNeededTitle": { "description": "Title for dialog asking the user to grant additional permissions." }, + "@pinnedSubscriptionsLabel": { + "description": "Label for the list of pinned subscribed channels." + }, "@profileButtonSendDirectMessage": { "description": "Label for button in profile screen to navigate to DMs with the shown user." }, + "@reactedEmojiSelfUser": { + "description": "Display name for the user themself, to show on an emoji reaction added by the user." + }, + "@reactionChipLabel": { + "description": "Text describing a reaction chip, with the emoji name and a list or number of votes. (An accessibility label for assistive technology.)", + "placeholders": { + "emojiName": { + "example": "working_on_it", + "type": "String" + }, + "votes": { + "example": "You, Chris, Greg", + "type": "String" + } + } + }, + "@reactionChipsLabel": { + "description": "Text identifying the container of reaction chips on a message. (An accessibility label for assistive technology.)" + }, + "@recentDmConversationsEmptyPlaceholder": { + "description": "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." + }, + "@recentDmConversationsSectionHeader": { + "description": "Heading for direct messages section on the 'Inbox' message view." + }, + "@searchMessagesClearButtonTooltip": { + "description": "Tooltip for the 'x' button in the search text field." + }, + "@searchMessagesHintText": { + "description": "Hint text for the message search text field." + }, + "@searchMessagesPageTitle": { + "description": "Page title for the 'Search' message view." + }, + "@seeWhoReactedSheetEmojiNameWithVoteCount": { + "description": "In the 'See who reacted' sheet, an emoji reaction's name and how many votes it has. (An accessibility label for assistive technology.)", + "placeholders": { + "emojiName": { + "example": "working_on_it", + "type": "String" + }, + "num": { + "example": "2", + "type": "int" + } + } + }, + "@seeWhoReactedSheetHeaderLabel": { + "description": "In the 'See who reacted' sheet, a label for the list of emoji reactions at the top, with the total number of reactions. (An accessibility label for assistive technology.)", + "placeholders": { + "num": { + "example": "2", + "type": "int" + } + } + }, + "@seeWhoReactedSheetNoReactions": { + "description": "Explanation on the 'See who reacted' sheet when the message has no reactions (because they were removed after the sheet was opened)." + }, + "@seeWhoReactedSheetUserListLabel": { + "description": "In the 'See who reacted' sheet, a label for the list of users who chose an emoji reaction, with the emoji's name and how many votes it has. (An accessibility label for assistive technology.)", + "placeholders": { + "emojiName": { + "example": "working_on_it", + "type": "String" + }, + "num": { + "example": "2", + "type": "int" + } + } + }, + "@setStatusPageTitle": { + "description": "Title for the 'Set status' page." + }, "@settingsPageTitle": { "description": "Title for the settings page." }, + "@sharePageTitle": { + "description": "Title for the page about sharing content received from other apps." + }, + "@starredMessagesPageTitle": { + "description": "Page title for the 'Starred messages' message view." + }, + "@statusButtonLabelStatusSet": { + "description": "The status button label in self-user profile page when status is set." + }, + "@statusButtonLabelStatusUnset": { + "description": "The status button label in self-user profile page when status is not set." + }, + "@statusClearButtonLabel": { + "description": "Label for the button that clears the user status, in 'Set status' page." + }, + "@statusSaveButtonLabel": { + "description": "Label for the button that saves the user status, in 'Set status' page." + }, + "@statusTextHint": { + "description": "Hint text for the status text input field in 'Set status' page." + }, "@successChannelLinkCopied": { "description": "Message when link of a channel was copied to the user's system clipboard." }, @@ -342,6 +547,9 @@ "@switchAccountButton": { "description": "Label for main-menu button leading to the choose-account page." }, + "@topicsButtonTooltip": { + "description": "Tooltip for button to navigate to topic-list page." + }, "@tryAnotherAccountButton": { "description": "Label for loading screen button prompting user to try another account." }, @@ -352,6 +560,22 @@ "type": "String" } }, + "@twoPeopleTyping": { + "description": "Text to display when there are two users typing.", + "placeholders": { + "otherTypist": { + "example": "Bob", + "type": "String" + }, + "typist": { + "example": "Alice", + "type": "String" + } + } + }, + "@unpinnedSubscriptionsLabel": { + "description": "Label for the list of unpinned subscribed channels." + }, "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, @@ -364,6 +588,9 @@ } } }, + "@updateStatusErrorTitle": { + "description": "Error title when updating user status failed." + }, "@upgradeWelcomeDialogDismiss": { "description": "Label for button dismissing dialog shown on first upgrade from the legacy Zulip app." }, @@ -376,6 +603,36 @@ "@upgradeWelcomeDialogTitle": { "description": "Title for dialog shown on first upgrade from the legacy Zulip app." }, + "@userRoleGuest": { + "description": "Label for UserRole.guest" + }, + "@userRoleMember": { + "description": "Label for UserRole.member" + }, + "@userRoleUnknown": { + "description": "Label for UserRole.unknown" + }, + "@userStatusAtTheOffice": { + "description": "A suggested user status text, 'At the office'." + }, + "@userStatusBusy": { + "description": "A suggested user status text, 'Busy'." + }, + "@userStatusCommuting": { + "description": "A suggested user status text, 'Commuting'." + }, + "@userStatusInAMeeting": { + "description": "A suggested user status text, 'In a meeting'." + }, + "@userStatusOutSick": { + "description": "A suggested user status text, 'Out sick'." + }, + "@userStatusVacationing": { + "description": "A suggested user status text, 'Vacationing'." + }, + "@userStatusWorkingRemotely": { + "description": "A suggested user status text, 'Working remotely'." + }, "aboutPageAppVersion": "Version de l'application", "aboutPageOpenSourceLicenses": "Licences de logiciel libre", "aboutPageTapToView": "Toucher pour voir", @@ -384,6 +641,7 @@ "actionSheetOptionCopyMessageLink": "Copier le lien au message", "actionSheetOptionCopyMessageText": "Copier le contenu du message", "actionSheetOptionCopyTopicLink": "Copier le lien sur le sujet", + "actionSheetOptionDeleteMessage": "Supprimer message", "actionSheetOptionEditMessage": "Modifier le message", "actionSheetOptionFollowTopic": "Suivre le sujet", "actionSheetOptionHideMutedMessage": "Cacher à nouveau le message silencieux", @@ -394,18 +652,32 @@ "actionSheetOptionMuteTopic": "Rendre le sujet silencieux", "actionSheetOptionQuoteMessage": "Citer le message", "actionSheetOptionResolveTopic": "Marquer comme résolu", + "actionSheetOptionSeeWhoReacted": "Voir qui a réagi", "actionSheetOptionShare": "Partager", "actionSheetOptionStarMessage": "Mettre le message en favori", "actionSheetOptionUnfollowTopic": "Ne plus suivre le sujet", "actionSheetOptionUnmuteTopic": "Rendre le sujet non silencieux", "actionSheetOptionUnresolveTopic": "Marquer comme non résolu", "actionSheetOptionUnstarMessage": "Retirer ce message de la liste des favoris", + "actionSheetOptionViewReadReceipts": "Voir accusés de réception", + "actionSheetReadReceipts": "Accusés de réception", + "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.", + "channelFeedButtonTooltip": "Fil de la chaîne", + "channelsEmptyPlaceholder": "Vous n'êtes abonné à aucune chaîne pour l'instant.", + "channelsEmptyPlaceholderWithAllChannelsLink": "Vous n'êtes abonné à aucune chaîne pour l'instant. Allez sur {allChannelsPageTitle} pour vous abonner.", + "channelsPageTitle": "Chaînes", "chooseAccountButtonAddAnAccount": "Ajouter un compte", "chooseAccountPageLogOutButton": "Déconnexion", "chooseAccountPageTitle": "Choisir un compte", + "combinedFeedPageTitle": "Fil groupé", "composeBoxBannerButtonCancel": "Annuler", "composeBoxBannerButtonSave": "Sauvegarder", "composeBoxBannerLabelEditMessage": "Editer le message", + "deleteMessageConfirmationDialogConfirmButton": "Supprimer", + "deleteMessageConfirmationDialogMessage": "Supprimer un message de façon permanente le supprime pour tout le monde.", + "deleteMessageConfirmationDialogTitle": "Supprimer message ?", "editAlreadyInProgressMessage": "Une modification est déjà en cours. Merci d'attendre qu'elle soit terminée.", "editAlreadyInProgressTitle": "Impossible de modifier le message", "errorAccountLoggedIn": "Le compte {email} at {server} figure déjà dans votre liste de comptes.", @@ -421,6 +693,7 @@ "errorCouldNotOpenLink": "Le lien suivant n'a pas pu être ouvert : {url}", "errorCouldNotOpenLinkTitle": "Impossible d'ouvrir le lien", "errorCouldNotShowUserProfile": "Impossible de montrer le profil de l'utilisateur.", + "errorDeleteMessageFailedTitle": "Échec de la suppression du message", "errorFailedToUploadFileTitle": "Impossible de charger le fichier {filename}", "errorFilesTooLarge": "{num, plural, =1{Fichier est} other{{num} fichiers sont}} plus gros que la limite de capacité du serveur ({maxFileUploadSizeMib} MO) et ne peu(ven)t pas être chargé(s) :\n\n{listMessage}", "errorFilesTooLargeTitle": "{num, plural, =1{Le fichier est trop lourd} other{Les fichier sont trop lourds}}", @@ -446,27 +719,72 @@ "errorWebAuthOperationalError": "Oups, une erreur s'est produite.", "errorWebAuthOperationalErrorTitle": "Une erreur s'est produite", "filenameAndSizeInMiB": "{filename} : {size} MiB", + "inboxEmptyPlaceholder": "Aucun message non lu dans votre boîte de réception. Utilisez les boutons ci-dessous pour voir le fil groupé ou la liste des chaînes.", + "inboxPageTitle": "Boîte de réception", "logOutConfirmationDialogConfirmButton": "Déconnexion", "logOutConfirmationDialogMessage": "Pour utiliser ce compte à l'avenir, vous devrez ré-entrer l'adresse pour votre organisation et les informations de votre compte.", "logOutConfirmationDialogTitle": "Se déconnecter?", + "mainMenuMyProfile": "Mon profil", + "manyPeopleTyping": "Plusieurs personnes sont en train d'écrire…", + "mentionsPageTitle": "Mentions", + "noStatusText": "Statut sans texte", + "notifGroupDmConversationLabel": "{senderFullName} à vous et {numOthers, plural, =1{1 other} other{{numOthers} others}}", + "notifSelfUser": "Vous", + "onePersonTyping": "{typist} est en train d'écrire…", "permissionsDeniedCameraAccess": "Pour charger une image, merci d'accorder des autorisations supplémentaires à Zulip, dans les préférences.", "permissionsDeniedReadExternalStorage": "Pour charger des fichiers, merci d'accorder des autorisations supplémentaires à Zulip, dans les préférences.", "permissionsNeededOpenSettings": "Ouvrir les préférences", "permissionsNeededTitle": "Permissions requises", + "pinnedSubscriptionsLabel": "Épinglé", "profileButtonSendDirectMessage": "Envoyer un message direct", + "reactedEmojiSelfUser": "Vous", + "reactionChipLabel": "{emojiName} : {votes}", + "reactionChipsLabel": "Réactions", + "recentDmConversationsEmptyPlaceholder": "Vous n'avez aucun message direct pour l'instant ! Et si vous lanciez une conversation ?", + "recentDmConversationsPageTitle": "Messages directs", + "recentDmConversationsSectionHeader": "Messages directs", + "searchMessagesClearButtonTooltip": "Effacer", + "searchMessagesHintText": "Recherche", + "searchMessagesPageTitle": "Recherche", + "seeWhoReactedSheetEmojiNameWithVoteCount": "{emojiName} : {num, plural, = 1{1 vote} other{{num} votes}}", + "seeWhoReactedSheetHeaderLabel": "Réactions emoji ({num} total)", + "seeWhoReactedSheetNoReactions": "Aucune réaction associée à ce message.", + "seeWhoReactedSheetUserListLabel": "Votes pour {emojiName} ({num})", + "setStatusPageTitle": "Définir statut", "settingsPageTitle": "Paramètres", + "sharePageTitle": "Partager", + "starredMessagesPageTitle": "Messages favoris", + "statusButtonLabelStatusSet": "Statut", + "statusButtonLabelStatusUnset": "Définir mon statut", + "statusClearButtonLabel": "Effacer", + "statusSaveButtonLabel": "Sauvegarder", + "statusTextHint": "Votre statut", "successChannelLinkCopied": "Lien sur le canal copié", "successLinkCopied": "Lien copié", "successMessageLinkCopied": "Lien sur le message copié", "successMessageTextCopied": "Texte du message copié", "successTopicLinkCopied": "Lien sur le sujet copié", "switchAccountButton": "Changer de compte", + "topicsButtonTooltip": "Sujets", "tryAnotherAccountButton": "Essayer un autre compte", "tryAnotherAccountMessage": "Votre compte à {url} prend du temps à se charger.", + "twoPeopleTyping": "{typist} et {otherTypist} sont en train d'écrire…", + "unpinnedSubscriptionsLabel": "Désépingler", "unsubscribeConfirmationDialogConfirmButton": "Se désinscrire", "unsubscribeConfirmationDialogTitle": "Se désinscrire de {channelName}?", + "updateStatusErrorTitle": "Erreur lors de la mise à jour du statut de l'utilisateur. Merci de réessayer.", "upgradeWelcomeDialogDismiss": "Allons-y", "upgradeWelcomeDialogLinkText": "Allez voir les articles sur le blog des annonces !", "upgradeWelcomeDialogMessage": "Vous retrouverez une expérience familière dans un logiciel plus rapide et plus élégant.", - "upgradeWelcomeDialogTitle": "Bienvenue dans la nouvelle application Zulip !" + "upgradeWelcomeDialogTitle": "Bienvenue dans la nouvelle application Zulip !", + "userRoleGuest": "Invité.e", + "userRoleMember": "Membre", + "userRoleUnknown": "Inconnu", + "userStatusAtTheOffice": "Au bureau", + "userStatusBusy": "Occupé", + "userStatusCommuting": "En déplacement", + "userStatusInAMeeting": "En réunion", + "userStatusOutSick": "Malade", + "userStatusVacationing": "En vacances", + "userStatusWorkingRemotely": "En télétravail" } diff --git a/assets/l10n/app_he.arb b/assets/l10n/app_he.arb new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assets/l10n/app_he.arb @@ -0,0 +1 @@ +{} diff --git a/assets/l10n/app_hu.arb b/assets/l10n/app_hu.arb new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assets/l10n/app_hu.arb @@ -0,0 +1 @@ +{} diff --git a/assets/l10n/app_it.arb b/assets/l10n/app_it.arb index f4cc5e53d5..2caed0e54f 100644 --- a/assets/l10n/app_it.arb +++ b/assets/l10n/app_it.arb @@ -68,6 +68,9 @@ "@actionSheetOptionUnstarMessage": { "description": "Label for unstar button on action sheet." }, + "@allChannelsPageTitle": { + "description": "Title for the 'All channels' page." + }, "@appVersionUnknownPlaceholder": { "description": "Placeholder to show in place of the app version when it is unknown." }, @@ -104,6 +107,9 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@composeBoxBannerButtonSave": { "description": "Label text for the 'Save' button in the compose-box banner when you are editing a message." }, @@ -681,6 +687,9 @@ "@mutedUser": { "description": "Name for a muted user to display all over the app." }, + "@navButtonAllChannels": { + "description": "Title for a nav button that opens the 'All channels' page." + }, "@newDmFabButtonLabel": { "description": "Label for the floating action button (FAB) that opens the new DM sheet." }, @@ -790,6 +799,12 @@ "@scrollToBottomTooltip": { "description": "Tooltip for button to scroll to bottom." }, + "@searchMessagesHintText": { + "description": "Hint text for the message search text field." + }, + "@searchMessagesPageTitle": { + "description": "Page title for the 'Search' message view." + }, "@serverUrlValidationErrorEmpty": { "description": "Error message when URL is empty" }, @@ -980,6 +995,7 @@ "actionSheetOptionUnmuteTopic": "Riattiva argomento", "actionSheetOptionUnresolveTopic": "Segna come irrisolto", "actionSheetOptionUnstarMessage": "Messaggio normale", + "allChannelsPageTitle": "Titolo per la pagina \"Tutti i canali\".", "appVersionUnknownPlaceholder": "(…)", "channelFeedButtonTooltip": "Feed del canale", "channelsEmptyPlaceholder": "Non sei ancora iscritto ad alcun canale.", @@ -992,6 +1008,7 @@ "composeBoxAttachFromCameraTooltip": "Fai una foto", "composeBoxAttachMediaTooltip": "Allega immagini o video", "composeBoxBannerButtonCancel": "Annulla", + "composeBoxBannerButtonRefresh": "Etichetta il testo per il pulsante \"Aggiorna\" nel banner della casella di composizione quando visualizzi un canale a cui non sei iscritto.", "composeBoxBannerButtonSave": "Salva", "composeBoxBannerLabelEditMessage": "Modifica messaggio", "composeBoxChannelContentHint": "Messaggia {destination}", @@ -1123,6 +1140,7 @@ "messageListGroupYouWithYourself": "Messaggi con te stesso", "messageNotSentLabel": "MESSAGGIO NON INVIATO", "mutedUser": "Utente silenziato", + "navButtonAllChannels": "Titolo per un pulsante di navigazione che apre la pagina \"Tutti i canali\".", "newDmFabButtonLabel": "Nuovo MD", "newDmSheetComposeButtonLabel": "Componi", "newDmSheetNoUsersFound": "Nessun utente trovato", @@ -1152,6 +1170,8 @@ "savingMessageEditFailedLabel": "MODIFICA NON SALVATA", "savingMessageEditLabel": "SALVATAGGIO MODIFICA…", "scrollToBottomTooltip": "Scorri fino in fondo", + "searchMessagesHintText": "Testo di suggerimento per il campo di testo di ricerca del messaggio.", + "searchMessagesPageTitle": "Titolo della pagina per la visualizzazione del messaggio \"Cerca\".", "serverUrlValidationErrorEmpty": "Inserire un URL.", "serverUrlValidationErrorInvalidUrl": "Inserire un URL valido.", "serverUrlValidationErrorNoUseEmail": "Inserire l'URL del server, non il proprio indirizzo email.", diff --git a/assets/l10n/app_ja.arb b/assets/l10n/app_ja.arb index c9687955c8..d436127b58 100644 --- a/assets/l10n/app_ja.arb +++ b/assets/l10n/app_ja.arb @@ -1056,9 +1056,6 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." - }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", "placeholders": { @@ -1457,7 +1454,6 @@ "unknownUserName": "(不明なユーザー)", "unpinnedSubscriptionsLabel": "ピン留めなし", "unsubscribeConfirmationDialogConfirmButton": "チャンネルから退出", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "このチャンネルを退出すると、再び参加できない可能性があります。", "unsubscribeConfirmationDialogTitle": "{channelName} から退出しますか?", "unsubscribeFailedTitle": "チャンネルからの退出に失敗しました", "updateStatusErrorTitle": "ステータスの更新に失敗しました。もう一度お試しください。", diff --git a/assets/l10n/app_pl.arb b/assets/l10n/app_pl.arb index c744362fae..fd2ac4a7c4 100644 --- a/assets/l10n/app_pl.arb +++ b/assets/l10n/app_pl.arb @@ -158,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -343,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." }, @@ -1095,8 +1107,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1294,15 +1306,18 @@ "composeBoxAttachFromCameraTooltip": "Zrób zdjęcie", "composeBoxAttachMediaTooltip": "Dołącz obrazy lub wideo", "composeBoxBannerButtonCancel": "Anuluj", + "composeBoxBannerButtonRefresh": "Odśwież", "composeBoxBannerButtonSave": "Zapisz", + "composeBoxBannerButtonSubscribe": "Subskrybuj", "composeBoxBannerLabelEditMessage": "Zmień wiadomość", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "Nowe wiadomości nie pojawią się z automatu.", "composeBoxChannelContentHint": "Wiadomość do {destination}", "composeBoxDmContentHint": "Napisz do @{user}", "composeBoxEnterTopicOrSkipHintText": "Wpisz tytuł wątku (pomiń aby uzyskać “{defaultTopicName}”)", "composeBoxGenericContentHint": "Wpisz wiadomość", "composeBoxGroupDmContentHint": "Napisz do grupy", "composeBoxLoadingMessage": "(ładowanie wiadomości {messageId})", - "composeBoxSelfDmContentHint": "Zanotuj coś na przyszłość", + "composeBoxSelfDmContentHint": "Zostaw notatkę dla siebie", "composeBoxSendTooltip": "Wyślij", "composeBoxTopicHintText": "Wątek", "composeBoxUploadingFilename": "Przekazywanie {filename}…", @@ -1337,6 +1352,7 @@ "errorContentNotInsertedTitle": "Dodanie zawartości bez powodzenia", "errorContentToInsertIsEmpty": "Plik do dodania jest pusty lub nie ma do niego dostępu.", "errorCopyingFailed": "Nie udało się skopiować", + "errorCouldNotAccessUploadedFileTitle": "Brak dostępu do załadowanego pliku", "errorCouldNotConnectTitle": "Brak połączenia", "errorCouldNotEditMessageTitle": "Nie można zmienić wiadomości", "errorCouldNotFetchMessageSource": "Nie można uzyskać źródłowej wiadomości.", @@ -1517,7 +1533,7 @@ "unknownUserName": "(nieznany użytkownik)", "unpinnedSubscriptionsLabel": "Odpięte", "unsubscribeConfirmationDialogConfirmButton": "Odsubskrybuj", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "Po opuszczeniu kanału możesz utracić możliwość powrotu.", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "Opuszczając ten kanał utracisz możliwość ponownego przyłączenia.", "unsubscribeConfirmationDialogTitle": "Odsubskrybować z {channelName}?", "unsubscribeFailedTitle": "Odsubskrybowanie bez powdzenia", "updateStatusErrorTitle": "Błąd aktualizacji stanu. Spróbuj ponownie.", @@ -1529,7 +1545,7 @@ "userActiveDaysAgo": "Aktywny {days, plural, =1{1 dzień} other{{days} dni}} temu", "userActiveHoursAgo": "Aktywny {hours, plural, =1{1 godzinę} other{{hours} godzin}} temu", "userActiveMinutesAgo": "Aktywny {minutes, plural, =1{1 minutę} other{{minutes} minut}} temu", - "userActiveNow": "Dostępny", + "userActiveNow": "Teraz dostępny", "userActiveYesterday": "Aktywny wczoraj", "userIdle": "Bezczynny", "userNotActiveInYear": "Brak aktywności za ostatni rok", diff --git a/assets/l10n/app_ru.arb b/assets/l10n/app_ru.arb index 47601fa83a..b2ae967465 100644 --- a/assets/l10n/app_ru.arb +++ b/assets/l10n/app_ru.arb @@ -158,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -343,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." }, @@ -1095,8 +1107,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1294,15 +1306,18 @@ "composeBoxAttachFromCameraTooltip": "Сделать снимок", "composeBoxAttachMediaTooltip": "Прикрепить изображения или видео", "composeBoxBannerButtonCancel": "Отмена", + "composeBoxBannerButtonRefresh": "Обновить", "composeBoxBannerButtonSave": "Сохранить", + "composeBoxBannerButtonSubscribe": "Подписаться", "composeBoxBannerLabelEditMessage": "Редактирование сообщения", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "Новые сообщения не будут отображаться автоматически.", "composeBoxChannelContentHint": "Сообщение для {destination}", "composeBoxDmContentHint": "Сообщение для @{user}", "composeBoxEnterTopicOrSkipHintText": "Укажите тему (или оставьте “{defaultTopicName}”)", "composeBoxGenericContentHint": "Ввести сообщение", "composeBoxGroupDmContentHint": "Сообщение для группы", "composeBoxLoadingMessage": "(загрузка сообщения {messageId})", - "composeBoxSelfDmContentHint": "Сделать заметку", + "composeBoxSelfDmContentHint": "Написать себе записку", "composeBoxSendTooltip": "Отправить", "composeBoxTopicHintText": "Тема", "composeBoxUploadingFilename": "Загрузка {filename}…", @@ -1337,6 +1352,7 @@ "errorContentNotInsertedTitle": "Содержимое не вставлено", "errorContentToInsertIsEmpty": "Файл для вставки пустой, или к нему нет доступа.", "errorCopyingFailed": "Сбой копирования", + "errorCouldNotAccessUploadedFileTitle": "Не удалось получить доступ к загруженному файлу", "errorCouldNotConnectTitle": "Нет связи с сервером", "errorCouldNotEditMessageTitle": "Сбой редактирования", "errorCouldNotFetchMessageSource": "Не удалось извлечь источник сообщения.", @@ -1517,7 +1533,7 @@ "unknownUserName": "(неизвестный пользователь)", "unpinnedSubscriptionsLabel": "Откреплены", "unsubscribeConfirmationDialogConfirmButton": "Отписаться", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "Покинув этот канал, возможно, вы не сможете присоединиться вновь.", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "Если вы покинете этот канал, вы не сможете к нему присоединиться.", "unsubscribeConfirmationDialogTitle": "Отменить подписку на {channelName}?", "unsubscribeFailedTitle": "Не удалось отписаться", "updateStatusErrorTitle": "Ошибка обновления статуса пользователя. Попробуйте ещё раз.", diff --git a/assets/l10n/app_sl.arb b/assets/l10n/app_sl.arb index 15a54a0b13..1d622448f4 100644 --- a/assets/l10n/app_sl.arb +++ b/assets/l10n/app_sl.arb @@ -26,6 +26,9 @@ "@actionSheetOptionCopyTopicLink": { "description": "Label for copy topic link button in action sheet." }, + "@actionSheetOptionDeleteMessage": { + "description": "Label for the 'Delete message' button in the message action sheet." + }, "@actionSheetOptionEditMessage": { "description": "Label for the 'Edit message' button in the message action sheet." }, @@ -104,6 +107,12 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholder": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, + "@allChannelsPageTitle": { + "description": "Title for the 'All channels' page." + }, "@appVersionUnknownPlaceholder": { "description": "Placeholder to show in place of the app version when it is unknown." }, @@ -113,6 +122,15 @@ "@channelsEmptyPlaceholder": { "description": "Centered text on the 'Channels' page saying that there is no content to show." }, + "@channelsEmptyPlaceholderWithAllChannelsLink": { + "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." }, @@ -140,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -218,6 +245,15 @@ "@contentValidationErrorUploadInProgress": { "description": "Content validation error message when attachments have not finished uploading." }, + "@deleteMessageConfirmationDialogConfirmButton": { + "description": "Label for the 'Delete' button on a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for deleting a message." + }, "@dialogCancel": { "description": "Button label in dialogs to cancel." }, @@ -316,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." }, @@ -340,6 +379,9 @@ "@errorCouldNotShowUserProfile": { "description": "Message that appears on the user profile page when the profile cannot be shown." }, + "@errorDeleteMessageFailedTitle": { + "description": "Error title when deleting a message failed." + }, "@errorDialogContinue": { "description": "Button label in error dialogs to acknowledge the error and close the dialog." }, @@ -738,6 +780,9 @@ "@mutedUser": { "description": "Name for a muted user to display all over the app." }, + "@navButtonAllChannels": { + "description": "Title for a nav button that opens the 'All channels' page." + }, "@newDmFabButtonLabel": { "description": "Label for the floating action button (FAB) that opens the new DM sheet." }, @@ -1062,8 +1107,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1221,6 +1266,7 @@ "actionSheetOptionCopyMessageLink": "Kopiraj povezavo do sporočila", "actionSheetOptionCopyMessageText": "Kopiraj besedilo sporočila", "actionSheetOptionCopyTopicLink": "Kopiraj povezavo do teme", + "actionSheetOptionDeleteMessage": "Izbriši sporočilo", "actionSheetOptionEditMessage": "Uredi sporočilo", "actionSheetOptionFollowTopic": "Sledi temi", "actionSheetOptionHideMutedMessage": "Znova skrij utišano sporočilo", @@ -1245,9 +1291,12 @@ "actionSheetReadReceiptsErrorReadCount": "Nalaganje potrdil o branju ni uspelo.", "actionSheetReadReceiptsReadCount": "{count, plural, one{To sporočilo je prebrala {count} oseba:} two{To sporočilo sta prebrali {count} osebi:} few{To sporočilo so prebrale {count} osebe:} other{To sporočilo je prebralo {count} oseb:}}", "actionSheetReadReceiptsZeroReadCount": "Tega sporočila še nihče ni prebral.", + "allChannelsEmptyPlaceholder": "V tej organizaciji ni kanalov, ki bi si jih lahko ogledali.", + "allChannelsPageTitle": "Vsi kanali", "appVersionUnknownPlaceholder": "(...)", "channelFeedButtonTooltip": "Sporočila kanala", "channelsEmptyPlaceholder": "Niste še naročeni na noben kanal.", + "channelsEmptyPlaceholderWithAllChannelsLink": "Naročeni še niste na noben kanal. Poskusite odpreti {allChannelsPageTitle} in se pridružiti kateremu od njih.", "channelsPageTitle": "Kanali", "chooseAccountButtonAddAnAccount": "Dodaj račun", "chooseAccountPageLogOutButton": "Odjava", @@ -1257,15 +1306,18 @@ "composeBoxAttachFromCameraTooltip": "Fotografiraj", "composeBoxAttachMediaTooltip": "Pripni fotografije ali videoposnetke", "composeBoxBannerButtonCancel": "Prekliči", + "composeBoxBannerButtonRefresh": "Osveži", "composeBoxBannerButtonSave": "Shrani", + "composeBoxBannerButtonSubscribe": "Naroči se", "composeBoxBannerLabelEditMessage": "Uredi sporočilo", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "Nova sporočila se ne bodo prikazala samodejno.", "composeBoxChannelContentHint": "Sporočilo {destination}", "composeBoxDmContentHint": "Sporočilo @{user}", "composeBoxEnterTopicOrSkipHintText": "Vnesite temo (ali pustite prazno za »{defaultTopicName}«)", "composeBoxGenericContentHint": "Vnesite sporočilo", "composeBoxGroupDmContentHint": "Skupinsko sporočilo", "composeBoxLoadingMessage": "(nalaganje sporočila {messageId})", - "composeBoxSelfDmContentHint": "Zapišite opombo zase", + "composeBoxSelfDmContentHint": "Zapišite si opombo", "composeBoxSendTooltip": "Pošlji", "composeBoxTopicHintText": "Tema", "composeBoxUploadingFilename": "Nalaganje {filename}…", @@ -1273,6 +1325,9 @@ "contentValidationErrorQuoteAndReplyInProgress": "Počakajte, da se citat zaključi.", "contentValidationErrorTooLong": "Dolžina sporočila ne sme presegati 10000 znakov.", "contentValidationErrorUploadInProgress": "Počakajte, da se nalaganje konča.", + "deleteMessageConfirmationDialogConfirmButton": "Izbriši", + "deleteMessageConfirmationDialogMessage": "Brisanje sporočila ga trajno odstrani za vse.", + "deleteMessageConfirmationDialogTitle": "Izbrišem sporočilo?", "dialogCancel": "Prekliči", "dialogClose": "Zapri", "dialogContinue": "Nadaljuj", @@ -1297,12 +1352,14 @@ "errorContentNotInsertedTitle": "Vsebina ni vstavljena", "errorContentToInsertIsEmpty": "Datoteka za vstavljanje je prazna ali nedostopna.", "errorCopyingFailed": "Kopiranje ni uspelo", + "errorCouldNotAccessUploadedFileTitle": "Dostop do naložene datoteke ni mogoč", "errorCouldNotConnectTitle": "Povezave ni bilo mogoče vzpostaviti", "errorCouldNotEditMessageTitle": "Sporočila ni mogoče urediti", "errorCouldNotFetchMessageSource": "Ni bilo mogoče pridobiti vira sporočila.", "errorCouldNotOpenLink": "Povezave ni bilo mogoče odpreti: {url}", "errorCouldNotOpenLinkTitle": "Povezave ni mogoče odpreti", "errorCouldNotShowUserProfile": "Uporabniškega profila ni mogoče prikazati.", + "errorDeleteMessageFailedTitle": "Sporočila se ne da izbrisati", "errorDialogContinue": "V redu", "errorDialogLearnMore": "Več o tem", "errorDialogTitle": "Napaka", @@ -1395,6 +1452,7 @@ "messageListGroupYouWithYourself": "Sporočila sebi", "messageNotSentLabel": "SPOROČILO NI POSLANO", "mutedUser": "Uporabnik je utišan", + "navButtonAllChannels": "Vsi kanali", "newDmFabButtonLabel": "Novo neposredno sporočilo", "newDmSheetComposeButtonLabel": "Napiši", "newDmSheetNoUsersFound": "Ni zadetkov med uporabniki", @@ -1475,7 +1533,7 @@ "unknownUserName": "(neznan uporabnik)", "unpinnedSubscriptionsLabel": "Nepripeto", "unsubscribeConfirmationDialogConfirmButton": "Prekliči naročnino", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "Ko zapustite ta kanal, se morda ne boste mogli znova pridružiti.", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "Ko zapustite kanal, se ne boste več mogli pridružiti nazaj.", "unsubscribeConfirmationDialogTitle": "Odjava iz {channelName}?", "unsubscribeFailedTitle": "Preklic naročnine ni uspel", "updateStatusErrorTitle": "Napaka pri posodabljanju statusa uporabnika. Poskusite znova.", diff --git a/assets/l10n/app_uk.arb b/assets/l10n/app_uk.arb index 0071fccfdc..40ae41748a 100644 --- a/assets/l10n/app_uk.arb +++ b/assets/l10n/app_uk.arb @@ -158,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -343,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." }, @@ -1095,8 +1107,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1294,15 +1306,18 @@ "composeBoxAttachFromCameraTooltip": "Зробити фото", "composeBoxAttachMediaTooltip": "Додати зображення або відео", "composeBoxBannerButtonCancel": "Відміна", + "composeBoxBannerButtonRefresh": "Оновити", "composeBoxBannerButtonSave": "Зберегти", + "composeBoxBannerButtonSubscribe": "Підписатися", "composeBoxBannerLabelEditMessage": "Редагування повідомлення", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "Нові повідомлення не з’являтимуться автоматично.", "composeBoxChannelContentHint": "Надіслати повідомлення {destination}", "composeBoxDmContentHint": "Повідомлення @{user}", "composeBoxEnterTopicOrSkipHintText": "Вкажіть тему (або залиште “{defaultTopicName}”)", "composeBoxGenericContentHint": "Ввести повідомлення", "composeBoxGroupDmContentHint": "Написати групі", "composeBoxLoadingMessage": "(завантаження повідомлення {messageId})", - "composeBoxSelfDmContentHint": "Занотувати щось", + "composeBoxSelfDmContentHint": "Напишіть собі записку", "composeBoxSendTooltip": "Надіслати", "composeBoxTopicHintText": "Тема", "composeBoxUploadingFilename": "Завантаження {filename}…", @@ -1337,6 +1352,7 @@ "errorContentNotInsertedTitle": "Вміст не вставлено", "errorContentToInsertIsEmpty": "Файл, який потрібно вставити, порожній або до нього немає доступу.", "errorCopyingFailed": "Помилка копіювання", + "errorCouldNotAccessUploadedFileTitle": "Не вдалося отримати доступ до завантаженого файлу", "errorCouldNotConnectTitle": "Не вдалося підключитися", "errorCouldNotEditMessageTitle": "Не вдалося редагувати повідомлення", "errorCouldNotFetchMessageSource": "Не вдалося отримати джерело повідомлення.", @@ -1517,7 +1533,7 @@ "unknownUserName": "(невідомий користувач)", "unpinnedSubscriptionsLabel": "Відкріплені", "unsubscribeConfirmationDialogConfirmButton": "Скасувати підписку", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "Після того, як ви залишите цей канал, ви, можливо, не зможете приєднатися знову.", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "Після того, як ви покинете цей канал, ви не зможете приєднатися знову.", "unsubscribeConfirmationDialogTitle": "Відписатися від {channelName}?", "unsubscribeFailedTitle": "Не вдалося скасувати підписку", "updateStatusErrorTitle": "Помилка оновлення статусу користувача. Спробуйте ще раз.", diff --git a/assets/l10n/app_zh_Hans_CN.arb b/assets/l10n/app_zh_Hans_CN.arb index 52ce2b70c4..84a848c975 100644 --- a/assets/l10n/app_zh_Hans_CN.arb +++ b/assets/l10n/app_zh_Hans_CN.arb @@ -11,6 +11,9 @@ "@aboutPageTitle": { "description": "Title for About Zulip page." }, + "@actionSheetOptionChannelFeed": { + "description": "Label for navigating to a channel's channel-feed page." + }, "@actionSheetOptionCopyChannelLink": { "description": "Label for copy channel link button on action sheet." }, @@ -23,6 +26,9 @@ "@actionSheetOptionCopyTopicLink": { "description": "Label for copy topic link button in action sheet." }, + "@actionSheetOptionDeleteMessage": { + "description": "Label for the 'Delete message' button in the message action sheet." + }, "@actionSheetOptionEditMessage": { "description": "Label for the 'Edit message' button in the message action sheet." }, @@ -101,6 +107,12 @@ "@actionSheetReadReceiptsZeroReadCount": { "description": "Label in the \"Read receipts\" bottom sheet when no one has read the message." }, + "@allChannelsEmptyPlaceholder": { + "description": "Centered text on the 'All channels' page saying that there is no content to show." + }, + "@allChannelsPageTitle": { + "description": "Title for the 'All channels' page." + }, "@appVersionUnknownPlaceholder": { "description": "Placeholder to show in place of the app version when it is unknown." }, @@ -110,6 +122,15 @@ "@channelsEmptyPlaceholder": { "description": "Centered text on the 'Channels' page saying that there is no content to show." }, + "@channelsEmptyPlaceholderWithAllChannelsLink": { + "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." }, @@ -215,6 +236,15 @@ "@contentValidationErrorUploadInProgress": { "description": "Content validation error message when attachments have not finished uploading." }, + "@deleteMessageConfirmationDialogConfirmButton": { + "description": "Label for the 'Delete' button on a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for deleting a message." + }, + "@deleteMessageConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for deleting a message." + }, "@dialogCancel": { "description": "Button label in dialogs to cancel." }, @@ -337,6 +367,9 @@ "@errorCouldNotShowUserProfile": { "description": "Message that appears on the user profile page when the profile cannot be shown." }, + "@errorDeleteMessageFailedTitle": { + "description": "Error title when deleting a message failed." + }, "@errorDialogContinue": { "description": "Button label in error dialogs to acknowledge the error and close the dialog." }, @@ -735,6 +768,9 @@ "@mutedUser": { "description": "Name for a muted user to display all over the app." }, + "@navButtonAllChannels": { + "description": "Title for a nav button that opens the 'All channels' page." + }, "@newDmFabButtonLabel": { "description": "Label for the floating action button (FAB) that opens the new DM sheet." }, @@ -1057,9 +1093,6 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." - }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", "placeholders": { @@ -1207,14 +1240,16 @@ "@zulipAppTitle": { "description": "The name of Zulip. This should be either 'Zulip' or a transliteration." }, - "aboutPageAppVersion": "应用程序版本", + "aboutPageAppVersion": "App 版本", "aboutPageOpenSourceLicenses": "开源许可", "aboutPageTapToView": "查看更多", "aboutPageTitle": "关于 Zulip", + "actionSheetOptionChannelFeed": "频道动态", "actionSheetOptionCopyChannelLink": "复制频道链接", "actionSheetOptionCopyMessageLink": "复制消息链接", "actionSheetOptionCopyMessageText": "复制消息文本", "actionSheetOptionCopyTopicLink": "复制话题链接", + "actionSheetOptionDeleteMessage": "删除消息", "actionSheetOptionEditMessage": "编辑消息", "actionSheetOptionFollowTopic": "关注话题", "actionSheetOptionHideMutedMessage": "再次隐藏静音消息", @@ -1239,9 +1274,12 @@ "actionSheetReadReceiptsErrorReadCount": "加载已读回执失败。", "actionSheetReadReceiptsReadCount": "{count, plural, =1{此消息已被阅读,共有 {count} 人:} other{此消息已被阅读,共有 {count} 人:}}", "actionSheetReadReceiptsZeroReadCount": "尚无人阅读此消息。", + "allChannelsEmptyPlaceholder": "在该组织里你没有可以查看的频道。", + "allChannelsPageTitle": "所有频道", "appVersionUnknownPlaceholder": "(…)", "channelFeedButtonTooltip": "频道订阅", "channelsEmptyPlaceholder": "您还没有订阅任何频道。", + "channelsEmptyPlaceholderWithAllChannelsLink": "你还没订阅任何频道。可以访问 {allChannelsPageTitle}然后加入。", "channelsPageTitle": "频道", "chooseAccountButtonAddAnAccount": "添加一个账号", "chooseAccountPageLogOutButton": "登出", @@ -1267,6 +1305,9 @@ "contentValidationErrorQuoteAndReplyInProgress": "请等待引用消息完成。", "contentValidationErrorTooLong": "消息的长度不能超过10000个字符。", "contentValidationErrorUploadInProgress": "请等待上传完成。", + "deleteMessageConfirmationDialogConfirmButton": "删除", + "deleteMessageConfirmationDialogMessage": "对所有人永久删除消息。", + "deleteMessageConfirmationDialogTitle": "删除消息?", "dialogCancel": "取消", "dialogClose": "关闭", "dialogContinue": "继续", @@ -1297,6 +1338,7 @@ "errorCouldNotOpenLink": "未能打开此链接:{url}", "errorCouldNotOpenLinkTitle": "未能打开链接", "errorCouldNotShowUserProfile": "无法显示用户个人资料。", + "errorDeleteMessageFailedTitle": "删除消息失败", "errorDialogContinue": "好的", "errorDialogLearnMore": "更多信息", "errorDialogTitle": "错误", @@ -1389,6 +1431,7 @@ "messageListGroupYouWithYourself": "与自己的私信", "messageNotSentLabel": "消息未发送", "mutedUser": "静音用户", + "navButtonAllChannels": "所有频道", "newDmFabButtonLabel": "发起私信", "newDmSheetComposeButtonLabel": "撰写消息", "newDmSheetNoUsersFound": "没有用户", @@ -1469,7 +1512,6 @@ "unknownUserName": "(未知用户)", "unpinnedSubscriptionsLabel": "未置顶", "unsubscribeConfirmationDialogConfirmButton": "取消订阅", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "一旦退出该频道,您可能无法重新加入。", "unsubscribeConfirmationDialogTitle": "确定取消订阅{channelName}么?", "unsubscribeFailedTitle": "取消订阅失败", "updateStatusErrorTitle": "更新用户状态时发生错误。请再试一次。", diff --git a/assets/l10n/app_zh_Hant_TW.arb b/assets/l10n/app_zh_Hant_TW.arb index 195c56bae9..65d1568ea2 100644 --- a/assets/l10n/app_zh_Hant_TW.arb +++ b/assets/l10n/app_zh_Hant_TW.arb @@ -158,12 +158,21 @@ "@composeBoxBannerButtonCancel": { "description": "Label text for the 'Cancel' button in the compose-box banner when you are editing a message." }, + "@composeBoxBannerButtonRefresh": { + "description": "Label text for the 'Refresh' button in the compose-box banner when you are viewing an unsubscribed channel." + }, "@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." }, + "@composeBoxBannerLabelUnsubscribedWhenCannotSend": { + "description": "Label text for a compose-box banner when you are viewing an unsubscribed channel in which you do not have permission to send messages." + }, "@composeBoxChannelContentHint": { "description": "Hint text for content input when sending a message to a channel.", "placeholders": { @@ -343,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." }, @@ -1093,8 +1105,8 @@ "@unsubscribeConfirmationDialogConfirmButton": { "description": "Label for the 'Unsubscribe' button on a confirmation dialog for unsubscribing from a channel." }, - "@unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": { - "description": "Message for a confirmation dialog for unsubscribing from a channel when you might not have permission to resubscribe." + "@unsubscribeConfirmationDialogMessageCannotResubscribe": { + "description": "Message for a confirmation dialog for unsubscribing from a channel when you will not have permission to resubscribe." }, "@unsubscribeConfirmationDialogTitle": { "description": "Title for a confirmation dialog for unsubscribing from a channel.", @@ -1292,15 +1304,18 @@ "composeBoxAttachFromCameraTooltip": "拍照", "composeBoxAttachMediaTooltip": "附加圖片或影片", "composeBoxBannerButtonCancel": "取消", + "composeBoxBannerButtonRefresh": "重新整理", "composeBoxBannerButtonSave": "儲存", + "composeBoxBannerButtonSubscribe": "訂閱", "composeBoxBannerLabelEditMessage": "編輯訊息", + "composeBoxBannerLabelUnsubscribedWhenCannotSend": "新訊息將不會自動顯示。", "composeBoxChannelContentHint": "訊息 {destination}", "composeBoxDmContentHint": "訊息 @{user}", "composeBoxEnterTopicOrSkipHintText": "輸入議題(留空則使用「{defaultTopicName}」)", "composeBoxGenericContentHint": "輸入訊息", "composeBoxGroupDmContentHint": "訊息群組", "composeBoxLoadingMessage": "(載入訊息 {messageId} 中)", - "composeBoxSelfDmContentHint": "記下些什麼", + "composeBoxSelfDmContentHint": "寫給自己的備忘", "composeBoxSendTooltip": "發送", "composeBoxTopicHintText": "議題", "composeBoxUploadingFilename": "正在上傳 {filename}…", @@ -1335,6 +1350,7 @@ "errorContentNotInsertedTitle": "未插入內容", "errorContentToInsertIsEmpty": "要插入的檔案為空或無法存取。", "errorCopyingFailed": "複製失敗", + "errorCouldNotAccessUploadedFileTitle": "無法存取上傳的檔案", "errorCouldNotConnectTitle": "無法連線", "errorCouldNotEditMessageTitle": "無法編輯訊息", "errorCouldNotFetchMessageSource": "無法取得訊息來源。", @@ -1515,7 +1531,7 @@ "unknownUserName": "(未知使用者)", "unpinnedSubscriptionsLabel": "未釘選", "unsubscribeConfirmationDialogConfirmButton": "取消訂閱", - "unsubscribeConfirmationDialogMessageMaybeCannotResubscribe": "一旦您離開此頻道,可能無法重新加入。", + "unsubscribeConfirmationDialogMessageCannotResubscribe": "一旦您離開此頻道,將無法重新加入。", "unsubscribeConfirmationDialogTitle": "確定要取消訂閱 {channelName} 嗎?", "unsubscribeFailedTitle": "取消訂閱失敗", "updateStatusErrorTitle": "更新使用者狀態時發生錯誤。請再試一次。", diff --git a/lib/generated/l10n/zulip_localizations.dart b/lib/generated/l10n/zulip_localizations.dart index d1d40b2010..31d472227d 100644 --- a/lib/generated/l10n/zulip_localizations.dart +++ b/lib/generated/l10n/zulip_localizations.dart @@ -7,8 +7,12 @@ import 'package:intl/intl.dart' as intl; import 'zulip_localizations_ar.dart'; import 'zulip_localizations_de.dart'; +import 'zulip_localizations_el.dart'; import 'zulip_localizations_en.dart'; +import 'zulip_localizations_es.dart'; import 'zulip_localizations_fr.dart'; +import 'zulip_localizations_he.dart'; +import 'zulip_localizations_hu.dart'; import 'zulip_localizations_it.dart'; import 'zulip_localizations_ja.dart'; import 'zulip_localizations_nb.dart'; @@ -108,8 +112,12 @@ abstract class ZulipLocalizations { Locale('en'), Locale('ar'), Locale('de'), + Locale('el'), Locale('en', 'GB'), + Locale('es'), Locale('fr'), + Locale('he'), + Locale('hu'), Locale('it'), Locale('ja'), Locale('nb'), @@ -2059,8 +2067,12 @@ class _ZulipLocalizationsDelegate bool isSupported(Locale locale) => [ 'ar', 'de', + 'el', 'en', + 'es', 'fr', + 'he', + 'hu', 'it', 'ja', 'nb', @@ -2103,10 +2115,18 @@ ZulipLocalizations lookupZulipLocalizations(Locale locale) { return ZulipLocalizationsAr(); case 'de': return ZulipLocalizationsDe(); + case 'el': + return ZulipLocalizationsEl(); case 'en': return ZulipLocalizationsEn(); + case 'es': + return ZulipLocalizationsEs(); case 'fr': return ZulipLocalizationsFr(); + case 'he': + return ZulipLocalizationsHe(); + case 'hu': + return ZulipLocalizationsHu(); case 'it': return ZulipLocalizationsIt(); case 'ja': diff --git a/lib/generated/l10n/zulip_localizations_de.dart b/lib/generated/l10n/zulip_localizations_de.dart index 83cc660772..06e2ea1a29 100644 --- a/lib/generated/l10n/zulip_localizations_de.dart +++ b/lib/generated/l10n/zulip_localizations_de.dart @@ -68,14 +68,14 @@ class ZulipLocalizationsDe extends ZulipLocalizations { String get chooseAccountButtonAddAnAccount => 'Account hinzufügen'; @override - String get navButtonAllChannels => 'All channels'; + String get navButtonAllChannels => 'Alle Kanäle'; @override - String get allChannelsPageTitle => 'All channels'; + String get allChannelsPageTitle => 'Alle Kanäle'; @override String get allChannelsEmptyPlaceholder => - 'There are no channels you can view in this organization.'; + 'Es gibt in dieser Organisation keine Kanäle die du ansehen kannst.'; @override String get profileButtonSendDirectMessage => 'Direktnachricht senden'; @@ -127,7 +127,7 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get unsubscribeConfirmationDialogMessageCannotResubscribe => - 'Once you leave this channel, you will not be able to rejoin.'; + 'Sobald du diesen Kanal verlässt, kannst du ihm nicht mehr beitreten.'; @override String get unsubscribeConfirmationDialogConfirmButton => 'Deabonnieren'; @@ -245,20 +245,21 @@ class ZulipLocalizationsDe extends ZulipLocalizations { String get actionSheetOptionEditMessage => 'Nachricht bearbeiten'; @override - String get actionSheetOptionDeleteMessage => 'Delete message'; + String get actionSheetOptionDeleteMessage => 'Nachricht löschen'; @override - String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + String get deleteMessageConfirmationDialogTitle => 'Nachricht löschen?'; @override String get deleteMessageConfirmationDialogMessage => - 'Deleting a message permanently removes it for everyone.'; + 'Das Löschen einer Nachricht entfernt diese permanent für alle Nutzer:innen.'; @override - String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + String get deleteMessageConfirmationDialogConfirmButton => 'Löschen'; @override - String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + String get errorDeleteMessageFailedTitle => + 'Löschen der Nachricht fehlgeschlagen'; @override String get actionSheetOptionMarkTopicAsRead => 'Thema als gelesen markieren'; @@ -447,13 +448,13 @@ class ZulipLocalizationsDe extends ZulipLocalizations { @override String get composeBoxBannerLabelUnsubscribedWhenCannotSend => - 'New messages will not appear automatically.'; + 'Neue Nachrichten werden nicht automatisch angezeigt.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => 'Auffrischen'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'Abonnieren'; @override String get composeBoxBannerLabelEditMessage => 'Nachricht bearbeiten'; @@ -533,7 +534,7 @@ class ZulipLocalizationsDe extends ZulipLocalizations { String get composeBoxGroupDmContentHint => 'Nachricht an Gruppe'; @override - String get composeBoxSelfDmContentHint => 'Schreibe etwas'; + String get composeBoxSelfDmContentHint => 'Schreibe dir selbst eine Notiz'; @override String composeBoxChannelContentHint(String destination) { @@ -967,7 +968,7 @@ class ZulipLocalizationsDe extends ZulipLocalizations { String channelsEmptyPlaceholderWithAllChannelsLink( String allChannelsPageTitle, ) { - return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + return 'Du hast noch keine Kanäle abonniert. Probiere zu $allChannelsPageTitle zu gehen und ein paar von ihnen beizutreten.'; } @override diff --git a/lib/generated/l10n/zulip_localizations_el.dart b/lib/generated/l10n/zulip_localizations_el.dart new file mode 100644 index 0000000000..ab2e6e686c --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_el.dart @@ -0,0 +1,1167 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Modern Greek (`el`). +class ZulipLocalizationsEl extends ZulipLocalizations { + ZulipLocalizationsEl([String locale = 'el']) : super(locale); + + @override + String get aboutPageTitle => 'About Zulip'; + + @override + String get aboutPageAppVersion => 'App version'; + + @override + String get aboutPageOpenSourceLicenses => 'Open-source licenses'; + + @override + String get aboutPageTapToView => 'Tap to view'; + + @override + String get upgradeWelcomeDialogTitle => 'Welcome to the new Zulip app!'; + + @override + String get upgradeWelcomeDialogMessage => + 'You’ll find a familiar experience in a faster, sleeker package.'; + + @override + String get upgradeWelcomeDialogLinkText => + 'Check out the announcement blog post!'; + + @override + String get upgradeWelcomeDialogDismiss => 'Let\'s go'; + + @override + String get chooseAccountPageTitle => 'Choose account'; + + @override + String get settingsPageTitle => 'Settings'; + + @override + String get switchAccountButton => 'Switch account'; + + @override + String tryAnotherAccountMessage(Object url) { + return 'Your account at $url is taking a while to load.'; + } + + @override + String get tryAnotherAccountButton => 'Try another account'; + + @override + String get chooseAccountPageLogOutButton => 'Log out'; + + @override + String get logOutConfirmationDialogTitle => 'Log out?'; + + @override + String get logOutConfirmationDialogMessage => + 'To use this account in the future, you will have to re-enter the URL for your organization and your account information.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Log out'; + + @override + String get chooseAccountButtonAddAnAccount => 'Add an account'; + + @override + String get navButtonAllChannels => 'All channels'; + + @override + String get allChannelsPageTitle => 'All channels'; + + @override + String get allChannelsEmptyPlaceholder => + 'There are no channels you can view in this organization.'; + + @override + String get profileButtonSendDirectMessage => 'Send direct message'; + + @override + String get errorCouldNotShowUserProfile => 'Could not show user profile.'; + + @override + String get permissionsNeededTitle => 'Permissions needed'; + + @override + String get permissionsNeededOpenSettings => 'Open settings'; + + @override + String get permissionsDeniedCameraAccess => + 'To upload an image, please grant Zulip additional permissions in Settings.'; + + @override + String get permissionsDeniedReadExternalStorage => + 'To upload files, please grant Zulip additional permissions in Settings.'; + + @override + String get actionSheetOptionSubscribe => 'Subscribe'; + + @override + String get subscribeFailedTitle => 'Failed to subscribe'; + + @override + String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; + + @override + String get actionSheetOptionCopyChannelLink => 'Copy link to channel'; + + @override + String get actionSheetOptionListOfTopics => 'List of topics'; + + @override + String get actionSheetOptionChannelFeed => 'Channel feed'; + + @override + String get actionSheetOptionUnsubscribe => 'Unsubscribe'; + + @override + String unsubscribeConfirmationDialogTitle(String channelName) { + return 'Unsubscribe from $channelName?'; + } + + @override + String get unsubscribeConfirmationDialogMessageCannotResubscribe => + 'Once you leave this channel, you will not be able to rejoin.'; + + @override + String get unsubscribeConfirmationDialogConfirmButton => 'Unsubscribe'; + + @override + String get unsubscribeFailedTitle => 'Failed to unsubscribe'; + + @override + String get actionSheetOptionMuteTopic => 'Mute topic'; + + @override + String get actionSheetOptionUnmuteTopic => 'Unmute topic'; + + @override + String get actionSheetOptionFollowTopic => 'Follow topic'; + + @override + String get actionSheetOptionUnfollowTopic => 'Unfollow topic'; + + @override + String get actionSheetOptionResolveTopic => 'Mark as resolved'; + + @override + String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; + + @override + String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; + + @override + String get errorUnresolveTopicFailedTitle => + 'Failed to mark topic as unresolved'; + + @override + String get actionSheetOptionSeeWhoReacted => 'See who reacted'; + + @override + String get seeWhoReactedSheetNoReactions => 'This message has no reactions.'; + + @override + String seeWhoReactedSheetHeaderLabel(int num) { + return 'Emoji reactions ($num total)'; + } + + @override + String seeWhoReactedSheetEmojiNameWithVoteCount(String emojiName, int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num votes', + one: '1 vote', + ); + return '$emojiName: $_temp0'; + } + + @override + String seeWhoReactedSheetUserListLabel(String emojiName, int num) { + return 'Votes for $emojiName ($num)'; + } + + @override + String get actionSheetOptionViewReadReceipts => 'View read receipts'; + + @override + String get actionSheetReadReceipts => 'Read receipts'; + + @override + String actionSheetReadReceiptsReadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'This message has been read by $count people:', + one: 'This message has been read by $count person:', + ); + return '$_temp0'; + } + + @override + String get actionSheetReadReceiptsZeroReadCount => + 'No one has read this message yet.'; + + @override + String get actionSheetReadReceiptsErrorReadCount => + 'Failed to load read receipts.'; + + @override + String get actionSheetOptionCopyMessageText => 'Copy message text'; + + @override + String get actionSheetOptionCopyMessageLink => 'Copy link to message'; + + @override + String get actionSheetOptionMarkAsUnread => 'Mark as unread from here'; + + @override + String get actionSheetOptionHideMutedMessage => 'Hide muted message again'; + + @override + String get actionSheetOptionShare => 'Share'; + + @override + String get actionSheetOptionQuoteMessage => 'Quote message'; + + @override + String get actionSheetOptionStarMessage => 'Star message'; + + @override + String get actionSheetOptionUnstarMessage => 'Unstar message'; + + @override + String get actionSheetOptionEditMessage => 'Edit message'; + + @override + String get actionSheetOptionDeleteMessage => 'Delete message'; + + @override + String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + + @override + String get deleteMessageConfirmationDialogMessage => + 'Deleting a message permanently removes it for everyone.'; + + @override + String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + + @override + String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + + @override + String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; + + @override + String get actionSheetOptionCopyTopicLink => 'Copy link to topic'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Something went wrong'; + + @override + String get errorWebAuthOperationalError => 'An unexpected error occurred.'; + + @override + String get errorAccountLoggedInTitle => 'Account already logged in'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'The account $email at $server is already in your list of accounts.'; + } + + @override + String get errorCouldNotFetchMessageSource => + 'Could not fetch message source.'; + + @override + String get errorCouldNotAccessUploadedFileTitle => + 'Could not access uploaded file'; + + @override + String get errorCopyingFailed => 'Copying failed'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Failed to upload file: $filename'; + } + + @override + String filenameAndSizeInMiB(String filename, String size) { + return '$filename: $size MiB'; + } + + @override + String errorFilesTooLarge( + int num, + int maxFileUploadSizeMib, + String listMessage, + ) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num files are', + one: 'File is', + ); + return '$_temp0 larger than the server\'s limit of $maxFileUploadSizeMib MiB and will not be uploaded:\n\n$listMessage'; + } + + @override + String errorFilesTooLargeTitle(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: 'Files', + one: 'File', + ); + return '$_temp0 too large'; + } + + @override + String get errorLoginInvalidInputTitle => 'Invalid input'; + + @override + String get errorLoginFailedTitle => 'Login failed'; + + @override + String get errorMessageNotSent => 'Message not sent'; + + @override + String get errorMessageEditNotSaved => 'Message not saved'; + + @override + String errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorCouldNotConnectTitle => 'Could not connect'; + + @override + String get errorMessageDoesNotSeemToExist => + 'That message does not seem to exist.'; + + @override + String get errorQuotationFailed => 'Quotation failed'; + + @override + String errorServerMessage(String message) { + return 'The server said:\n\n$message'; + } + + @override + String get errorConnectingToServerShort => + 'Error connecting to Zulip. Retrying…'; + + @override + String errorConnectingToServerDetails(String serverUrl, String error) { + return 'Error connecting to Zulip at $serverUrl. Will retry:\n\n$error'; + } + + @override + String get errorHandlingEventTitle => + 'Error handling a Zulip event. Retrying connection…'; + + @override + String errorHandlingEventDetails( + String serverUrl, + String error, + String event, + ) { + return 'Error handling a Zulip event from $serverUrl; will retry.\n\nError: $error\n\nEvent: $event'; + } + + @override + String get errorCouldNotOpenLinkTitle => 'Unable to open link'; + + @override + String errorCouldNotOpenLink(String url) { + return 'Link could not be opened: $url'; + } + + @override + String get errorMuteTopicFailed => 'Failed to mute topic'; + + @override + String get errorUnmuteTopicFailed => 'Failed to unmute topic'; + + @override + String get errorFollowTopicFailed => 'Failed to follow topic'; + + @override + String get errorUnfollowTopicFailed => 'Failed to unfollow topic'; + + @override + String get errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Failed to star message'; + + @override + String get errorUnstarMessageFailedTitle => 'Failed to unstar message'; + + @override + String get errorCouldNotEditMessageTitle => 'Could not edit message'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message link copied'; + + @override + String get successTopicLinkCopied => 'Topic link copied'; + + @override + String get successChannelLinkCopied => 'Channel link copied'; + + @override + String get errorBannerDeactivatedDmLabel => + 'You cannot send messages to deactivated users.'; + + @override + String get errorBannerCannotPostInChannelLabel => + 'You do not have permission to post in this channel.'; + + @override + String get composeBoxBannerLabelUnsubscribedWhenCannotSend => + 'New messages will not appear automatically.'; + + @override + String get composeBoxBannerButtonRefresh => 'Refresh'; + + @override + String get composeBoxBannerButtonSubscribe => 'Subscribe'; + + @override + String get composeBoxBannerLabelEditMessage => 'Edit message'; + + @override + String get composeBoxBannerButtonCancel => 'Cancel'; + + @override + String get composeBoxBannerButtonSave => 'Save'; + + @override + String get editAlreadyInProgressTitle => 'Cannot edit message'; + + @override + String get editAlreadyInProgressMessage => + 'An edit is already in progress. Please wait for it to complete.'; + + @override + String get savingMessageEditLabel => 'SAVING EDIT…'; + + @override + String get savingMessageEditFailedLabel => 'EDIT NOT SAVED'; + + @override + String get discardDraftConfirmationDialogTitle => + 'Discard the message you’re writing?'; + + @override + String get discardDraftForEditConfirmationDialogMessage => + 'When you edit a message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftForOutboxConfirmationDialogMessage => + 'When you restore an unsent message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftConfirmationDialogConfirmButton => 'Discard'; + + @override + String get composeBoxAttachFilesTooltip => 'Attach files'; + + @override + String get composeBoxAttachMediaTooltip => 'Attach images or videos'; + + @override + String get composeBoxAttachFromCameraTooltip => 'Take a photo'; + + @override + String get composeBoxGenericContentHint => 'Type a message'; + + @override + String get newDmSheetComposeButtonLabel => 'Compose'; + + @override + String get newDmSheetScreenTitle => 'New DM'; + + @override + String get newDmFabButtonLabel => 'New DM'; + + @override + String get newDmSheetSearchHintEmpty => 'Add one or more users'; + + @override + String get newDmSheetSearchHintSomeSelected => 'Add another user…'; + + @override + String get newDmSheetNoUsersFound => 'No users found'; + + @override + String composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Write yourself a note'; + + @override + String composeBoxChannelContentHint(String destination) { + return 'Message $destination'; + } + + @override + String get preparingEditMessageContentInput => 'Preparing…'; + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get unknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxEnterTopicOrSkipHintText(String defaultTopicName) { + return 'Enter a topic (skip for “$defaultTopicName”)'; + } + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String composeBoxLoadingMessage(int messageId) { + return '(loading message $messageId)'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String get dmsWithYourselfPageTitle => 'DMs with yourself'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String dmsWithOthersPageTitle(String others) { + return 'DMs with $others'; + } + + @override + String get emptyMessageList => 'There are no messages here.'; + + @override + String get emptyMessageListSearch => 'No search results.'; + + @override + String get messageListGroupYouWithYourself => 'Messages with yourself'; + + @override + String get contentValidationErrorTooLong => + 'Message length shouldn\'t be greater than 10000 characters.'; + + @override + String get contentValidationErrorEmpty => 'You have nothing to send!'; + + @override + String get contentValidationErrorQuoteAndReplyInProgress => + 'Please wait for the quotation to complete.'; + + @override + String get contentValidationErrorUploadInProgress => + 'Please wait for the upload to complete.'; + + @override + String get dialogCancel => 'Cancel'; + + @override + String get dialogContinue => 'Continue'; + + @override + String get dialogClose => 'Close'; + + @override + String get errorDialogLearnMore => 'Learn more'; + + @override + String get errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @override + String get lightboxVideoCurrentPosition => 'Current position'; + + @override + String get lightboxVideoDuration => 'Video duration'; + + @override + String get loginPageTitle => 'Log in'; + + @override + String get loginFormSubmitLabel => 'Log in'; + + @override + String get loginMethodDivider => 'OR'; + + @override + String signInWithFoo(String method) { + return 'Sign in with $method'; + } + + @override + String get loginAddAnAccountPageTitle => 'Add an account'; + + @override + String get loginServerUrlLabel => 'Your Zulip server URL'; + + @override + String get loginHidePassword => 'Hide password'; + + @override + String get loginEmailLabel => 'Email address'; + + @override + String get loginErrorMissingEmail => 'Please enter your email.'; + + @override + String get loginPasswordLabel => 'Password'; + + @override + String get loginErrorMissingPassword => 'Please enter your password.'; + + @override + String get loginUsernameLabel => 'Username'; + + @override + String get loginErrorMissingUsername => 'Please enter your username.'; + + @override + String get topicValidationErrorTooLong => + 'Topic length shouldn\'t be greater than 60 characters.'; + + @override + String get topicValidationErrorMandatoryButEmpty => + 'Topics are required in this organization.'; + + @override + String get errorContentNotInsertedTitle => 'Content not inserted'; + + @override + String get errorContentToInsertIsEmpty => + 'The file to be inserted is empty or cannot be accessed.'; + + @override + String errorServerVersionUnsupportedMessage( + String url, + String zulipVersion, + String minSupportedZulipVersion, + ) { + return '$url is running Zulip Server $zulipVersion, which is unsupported. The minimum supported version is Zulip Server $minSupportedZulipVersion.'; + } + + @override + String errorInvalidApiKeyMessage(String url) { + return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; + } + + @override + String get errorInvalidResponse => 'The server sent an invalid response.'; + + @override + String get errorNetworkRequestFailed => 'Network request failed'; + + @override + String errorMalformedResponse(int httpStatus) { + return 'Server gave malformed response; HTTP status $httpStatus'; + } + + @override + String errorMalformedResponseWithCause(int httpStatus, String details) { + return 'Server gave malformed response; HTTP status $httpStatus; $details'; + } + + @override + String errorRequestFailed(int httpStatus) { + return 'Network request failed: HTTP status $httpStatus'; + } + + @override + String get errorVideoPlayerFailed => 'Unable to play the video.'; + + @override + String get serverUrlValidationErrorEmpty => 'Please enter a URL.'; + + @override + String get serverUrlValidationErrorInvalidUrl => 'Please enter a valid URL.'; + + @override + String get serverUrlValidationErrorNoUseEmail => + 'Please enter the server URL, not your email.'; + + @override + String get serverUrlValidationErrorUnsupportedScheme => + 'The server URL must start with http:// or https://.'; + + @override + String get spoilerDefaultHeaderText => 'Spoiler'; + + @override + String get markAllAsReadLabel => 'Mark all messages as read'; + + @override + String markAsReadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as read.'; + } + + @override + String get markAsReadInProgress => 'Marking messages as read…'; + + @override + String get errorMarkAsReadFailedTitle => 'Mark as read failed'; + + @override + String markAsUnreadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as unread.'; + } + + @override + String get markAsUnreadInProgress => 'Marking messages as unread…'; + + @override + String get errorMarkAsUnreadFailedTitle => 'Mark as unread failed'; + + @override + String get today => 'Today'; + + @override + String get yesterday => 'Yesterday'; + + @override + String get userActiveNow => 'Active now'; + + @override + String get userIdle => 'Idle'; + + @override + String userActiveMinutesAgo(int minutes) { + String _temp0 = intl.Intl.pluralLogic( + minutes, + locale: localeName, + other: '$minutes minutes', + one: '1 minute', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveHoursAgo(int hours) { + String _temp0 = intl.Intl.pluralLogic( + hours, + locale: localeName, + other: '$hours hours', + one: '1 hour', + ); + return 'Active $_temp0 ago'; + } + + @override + String get userActiveYesterday => 'Active yesterday'; + + @override + String userActiveDaysAgo(int days) { + String _temp0 = intl.Intl.pluralLogic( + days, + locale: localeName, + other: '$days days', + one: '1 day', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveDate(String date) { + return 'Active $date'; + } + + @override + String get userNotActiveInYear => 'Not active in the last year'; + + @override + String get invisibleMode => 'Invisible mode'; + + @override + String get turnOnInvisibleModeErrorTitle => + 'Error turning on invisible mode. Please try again.'; + + @override + String get turnOffInvisibleModeErrorTitle => + 'Error turning off invisible mode. Please try again.'; + + @override + String get userRoleOwner => 'Owner'; + + @override + String get userRoleAdministrator => 'Administrator'; + + @override + String get userRoleModerator => 'Moderator'; + + @override + String get userRoleMember => 'Member'; + + @override + String get userRoleGuest => 'Guest'; + + @override + String get userRoleUnknown => 'Unknown'; + + @override + String get statusButtonLabelStatusSet => 'Status'; + + @override + String get statusButtonLabelStatusUnset => 'Set status'; + + @override + String get noStatusText => 'No status text'; + + @override + String get setStatusPageTitle => 'Set status'; + + @override + String get statusClearButtonLabel => 'Clear'; + + @override + String get statusSaveButtonLabel => 'Save'; + + @override + String get statusTextHint => 'Your status'; + + @override + String get userStatusBusy => 'Busy'; + + @override + String get userStatusInAMeeting => 'In a meeting'; + + @override + String get userStatusCommuting => 'Commuting'; + + @override + String get userStatusOutSick => 'Out sick'; + + @override + String get userStatusVacationing => 'Vacationing'; + + @override + String get userStatusWorkingRemotely => 'Working remotely'; + + @override + String get userStatusAtTheOffice => 'At the office'; + + @override + String get updateStatusErrorTitle => + 'Error updating user status. Please try again.'; + + @override + String get searchMessagesPageTitle => 'Search'; + + @override + String get searchMessagesHintText => 'Search'; + + @override + String get searchMessagesClearButtonTooltip => 'Clear'; + + @override + String get inboxPageTitle => 'Inbox'; + + @override + String get inboxEmptyPlaceholder => + 'There are no unread messages in your inbox. Use the buttons below to view the combined feed or list of channels.'; + + @override + String get recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get recentDmConversationsSectionHeader => 'Direct messages'; + + @override + String get recentDmConversationsEmptyPlaceholder => + 'You have no direct messages yet! Why not start the conversation?'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Starred messages'; + + @override + String get channelsPageTitle => 'Channels'; + + @override + String get channelsEmptyPlaceholder => + 'You’re not subscribed to any channels yet.'; + + @override + String channelsEmptyPlaceholderWithAllChannelsLink( + String allChannelsPageTitle, + ) { + return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + } + + @override + String get sharePageTitle => 'Share'; + + @override + String get mainMenuMyProfile => 'My profile'; + + @override + String get topicsButtonTooltip => 'Topics'; + + @override + String get channelFeedButtonTooltip => 'Channel feed'; + + @override + String notifGroupDmConversationLabel(String senderFullName, int numOthers) { + String _temp0 = intl.Intl.pluralLogic( + numOthers, + locale: localeName, + other: '$numOthers others', + one: '1 other', + ); + return '$senderFullName to you and $_temp0'; + } + + @override + String get pinnedSubscriptionsLabel => 'Pinned'; + + @override + String get unpinnedSubscriptionsLabel => 'Unpinned'; + + @override + String get notifSelfUser => 'You'; + + @override + String get reactedEmojiSelfUser => 'You'; + + @override + String get reactionChipsLabel => 'Reactions'; + + @override + String reactionChipLabel(String emojiName, String votes) { + return '$emojiName: $votes'; + } + + @override + String reactionChipVotesYouAndOthers(int otherUsersCount) { + String _temp0 = intl.Intl.pluralLogic( + otherUsersCount, + locale: localeName, + other: 'You and $otherUsersCount others', + one: 'You and 1 other', + ); + return '$_temp0'; + } + + @override + String onePersonTyping(String typist) { + return '$typist is typing…'; + } + + @override + String twoPeopleTyping(String typist, String otherTypist) { + return '$typist and $otherTypist are typing…'; + } + + @override + String get manyPeopleTyping => 'Several people are typing…'; + + @override + String get wildcardMentionAll => 'all'; + + @override + String get wildcardMentionEveryone => 'everyone'; + + @override + String get wildcardMentionChannel => 'channel'; + + @override + String get wildcardMentionStream => 'stream'; + + @override + String get wildcardMentionTopic => 'topic'; + + @override + String get wildcardMentionChannelDescription => 'Notify channel'; + + @override + String get wildcardMentionStreamDescription => 'Notify stream'; + + @override + String get wildcardMentionAllDmDescription => 'Notify recipients'; + + @override + String get wildcardMentionTopicDescription => 'Notify topic'; + + @override + String get messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get messageNotSentLabel => 'MESSAGE NOT SENT'; + + @override + String pollVoterNames(String voterNames) { + return '($voterNames)'; + } + + @override + String get themeSettingTitle => 'THEME'; + + @override + String get themeSettingDark => 'Dark'; + + @override + String get themeSettingLight => 'Light'; + + @override + String get themeSettingSystem => 'System'; + + @override + String get openLinksWithInAppBrowser => 'Open links with in-app browser'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get initialAnchorSettingTitle => 'Open message feeds at'; + + @override + String get initialAnchorSettingDescription => + 'You can choose whether message feeds open at your first unread message or at the newest messages.'; + + @override + String get initialAnchorSettingFirstUnreadAlways => 'First unread message'; + + @override + String get initialAnchorSettingFirstUnreadConversations => + 'First unread message in conversation views, newest message elsewhere'; + + @override + String get initialAnchorSettingNewestAlways => 'Newest message'; + + @override + String get markReadOnScrollSettingTitle => 'Mark messages as read on scroll'; + + @override + String get markReadOnScrollSettingDescription => + 'When scrolling through messages, should they automatically be marked as read?'; + + @override + String get markReadOnScrollSettingAlways => 'Always'; + + @override + String get markReadOnScrollSettingNever => 'Never'; + + @override + String get markReadOnScrollSettingConversations => + 'Only in conversation views'; + + @override + String get markReadOnScrollSettingConversationsDescription => + 'Messages will be automatically marked as read only when viewing a single topic or direct message conversation.'; + + @override + String get experimentalFeatureSettingsPageTitle => 'Experimental features'; + + @override + String get experimentalFeatureSettingsWarning => + 'These options enable features which are still under development and not ready. They may not work, and may cause issues in other areas of the app.\n\nThe purpose of these settings is for experimentation by people working on developing Zulip.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountNotFound => + 'The account associated with this notification could not be found.'; + + @override + String get errorReactionAddingFailedTitle => 'Adding reaction failed'; + + @override + String get errorReactionRemovingFailedTitle => 'Removing reaction failed'; + + @override + String get errorSharingTitle => 'Failed to share content'; + + @override + String get errorSharingAccountNotLoggedIn => + 'There is no account logged in. Please log in to an account and try again.'; + + @override + String get emojiReactionsMore => 'more'; + + @override + String get emojiPickerSearchEmoji => 'Search emoji'; + + @override + String get noEarlierMessages => 'No earlier messages'; + + @override + String get revealButtonLabel => 'Reveal message'; + + @override + String get mutedUser => 'Muted user'; + + @override + String get scrollToBottomTooltip => 'Scroll to bottom'; + + @override + String get appVersionUnknownPlaceholder => '(…)'; + + @override + String get zulipAppTitle => 'Zulip'; +} diff --git a/lib/generated/l10n/zulip_localizations_es.dart b/lib/generated/l10n/zulip_localizations_es.dart new file mode 100644 index 0000000000..7058e699fd --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_es.dart @@ -0,0 +1,1167 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Spanish Castilian (`es`). +class ZulipLocalizationsEs extends ZulipLocalizations { + ZulipLocalizationsEs([String locale = 'es']) : super(locale); + + @override + String get aboutPageTitle => 'About Zulip'; + + @override + String get aboutPageAppVersion => 'App version'; + + @override + String get aboutPageOpenSourceLicenses => 'Open-source licenses'; + + @override + String get aboutPageTapToView => 'Tap to view'; + + @override + String get upgradeWelcomeDialogTitle => 'Welcome to the new Zulip app!'; + + @override + String get upgradeWelcomeDialogMessage => + 'You’ll find a familiar experience in a faster, sleeker package.'; + + @override + String get upgradeWelcomeDialogLinkText => + 'Check out the announcement blog post!'; + + @override + String get upgradeWelcomeDialogDismiss => 'Let\'s go'; + + @override + String get chooseAccountPageTitle => 'Choose account'; + + @override + String get settingsPageTitle => 'Settings'; + + @override + String get switchAccountButton => 'Switch account'; + + @override + String tryAnotherAccountMessage(Object url) { + return 'Your account at $url is taking a while to load.'; + } + + @override + String get tryAnotherAccountButton => 'Try another account'; + + @override + String get chooseAccountPageLogOutButton => 'Log out'; + + @override + String get logOutConfirmationDialogTitle => 'Log out?'; + + @override + String get logOutConfirmationDialogMessage => + 'To use this account in the future, you will have to re-enter the URL for your organization and your account information.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Log out'; + + @override + String get chooseAccountButtonAddAnAccount => 'Add an account'; + + @override + String get navButtonAllChannels => 'All channels'; + + @override + String get allChannelsPageTitle => 'All channels'; + + @override + String get allChannelsEmptyPlaceholder => + 'There are no channels you can view in this organization.'; + + @override + String get profileButtonSendDirectMessage => 'Send direct message'; + + @override + String get errorCouldNotShowUserProfile => 'Could not show user profile.'; + + @override + String get permissionsNeededTitle => 'Permissions needed'; + + @override + String get permissionsNeededOpenSettings => 'Open settings'; + + @override + String get permissionsDeniedCameraAccess => + 'To upload an image, please grant Zulip additional permissions in Settings.'; + + @override + String get permissionsDeniedReadExternalStorage => + 'To upload files, please grant Zulip additional permissions in Settings.'; + + @override + String get actionSheetOptionSubscribe => 'Subscribe'; + + @override + String get subscribeFailedTitle => 'Failed to subscribe'; + + @override + String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; + + @override + String get actionSheetOptionCopyChannelLink => 'Copy link to channel'; + + @override + String get actionSheetOptionListOfTopics => 'List of topics'; + + @override + String get actionSheetOptionChannelFeed => 'Channel feed'; + + @override + String get actionSheetOptionUnsubscribe => 'Unsubscribe'; + + @override + String unsubscribeConfirmationDialogTitle(String channelName) { + return 'Unsubscribe from $channelName?'; + } + + @override + String get unsubscribeConfirmationDialogMessageCannotResubscribe => + 'Once you leave this channel, you will not be able to rejoin.'; + + @override + String get unsubscribeConfirmationDialogConfirmButton => 'Unsubscribe'; + + @override + String get unsubscribeFailedTitle => 'Failed to unsubscribe'; + + @override + String get actionSheetOptionMuteTopic => 'Mute topic'; + + @override + String get actionSheetOptionUnmuteTopic => 'Unmute topic'; + + @override + String get actionSheetOptionFollowTopic => 'Follow topic'; + + @override + String get actionSheetOptionUnfollowTopic => 'Unfollow topic'; + + @override + String get actionSheetOptionResolveTopic => 'Mark as resolved'; + + @override + String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; + + @override + String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; + + @override + String get errorUnresolveTopicFailedTitle => + 'Failed to mark topic as unresolved'; + + @override + String get actionSheetOptionSeeWhoReacted => 'See who reacted'; + + @override + String get seeWhoReactedSheetNoReactions => 'This message has no reactions.'; + + @override + String seeWhoReactedSheetHeaderLabel(int num) { + return 'Emoji reactions ($num total)'; + } + + @override + String seeWhoReactedSheetEmojiNameWithVoteCount(String emojiName, int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num votes', + one: '1 vote', + ); + return '$emojiName: $_temp0'; + } + + @override + String seeWhoReactedSheetUserListLabel(String emojiName, int num) { + return 'Votes for $emojiName ($num)'; + } + + @override + String get actionSheetOptionViewReadReceipts => 'View read receipts'; + + @override + String get actionSheetReadReceipts => 'Read receipts'; + + @override + String actionSheetReadReceiptsReadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'This message has been read by $count people:', + one: 'This message has been read by $count person:', + ); + return '$_temp0'; + } + + @override + String get actionSheetReadReceiptsZeroReadCount => + 'No one has read this message yet.'; + + @override + String get actionSheetReadReceiptsErrorReadCount => + 'Failed to load read receipts.'; + + @override + String get actionSheetOptionCopyMessageText => 'Copy message text'; + + @override + String get actionSheetOptionCopyMessageLink => 'Copy link to message'; + + @override + String get actionSheetOptionMarkAsUnread => 'Mark as unread from here'; + + @override + String get actionSheetOptionHideMutedMessage => 'Hide muted message again'; + + @override + String get actionSheetOptionShare => 'Share'; + + @override + String get actionSheetOptionQuoteMessage => 'Quote message'; + + @override + String get actionSheetOptionStarMessage => 'Star message'; + + @override + String get actionSheetOptionUnstarMessage => 'Unstar message'; + + @override + String get actionSheetOptionEditMessage => 'Edit message'; + + @override + String get actionSheetOptionDeleteMessage => 'Delete message'; + + @override + String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + + @override + String get deleteMessageConfirmationDialogMessage => + 'Deleting a message permanently removes it for everyone.'; + + @override + String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + + @override + String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + + @override + String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; + + @override + String get actionSheetOptionCopyTopicLink => 'Copy link to topic'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Something went wrong'; + + @override + String get errorWebAuthOperationalError => 'An unexpected error occurred.'; + + @override + String get errorAccountLoggedInTitle => 'Account already logged in'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'The account $email at $server is already in your list of accounts.'; + } + + @override + String get errorCouldNotFetchMessageSource => + 'Could not fetch message source.'; + + @override + String get errorCouldNotAccessUploadedFileTitle => + 'Could not access uploaded file'; + + @override + String get errorCopyingFailed => 'Copying failed'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Failed to upload file: $filename'; + } + + @override + String filenameAndSizeInMiB(String filename, String size) { + return '$filename: $size MiB'; + } + + @override + String errorFilesTooLarge( + int num, + int maxFileUploadSizeMib, + String listMessage, + ) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num files are', + one: 'File is', + ); + return '$_temp0 larger than the server\'s limit of $maxFileUploadSizeMib MiB and will not be uploaded:\n\n$listMessage'; + } + + @override + String errorFilesTooLargeTitle(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: 'Files', + one: 'File', + ); + return '$_temp0 too large'; + } + + @override + String get errorLoginInvalidInputTitle => 'Invalid input'; + + @override + String get errorLoginFailedTitle => 'Login failed'; + + @override + String get errorMessageNotSent => 'Message not sent'; + + @override + String get errorMessageEditNotSaved => 'Message not saved'; + + @override + String errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorCouldNotConnectTitle => 'Could not connect'; + + @override + String get errorMessageDoesNotSeemToExist => + 'That message does not seem to exist.'; + + @override + String get errorQuotationFailed => 'Quotation failed'; + + @override + String errorServerMessage(String message) { + return 'The server said:\n\n$message'; + } + + @override + String get errorConnectingToServerShort => + 'Error connecting to Zulip. Retrying…'; + + @override + String errorConnectingToServerDetails(String serverUrl, String error) { + return 'Error connecting to Zulip at $serverUrl. Will retry:\n\n$error'; + } + + @override + String get errorHandlingEventTitle => + 'Error handling a Zulip event. Retrying connection…'; + + @override + String errorHandlingEventDetails( + String serverUrl, + String error, + String event, + ) { + return 'Error handling a Zulip event from $serverUrl; will retry.\n\nError: $error\n\nEvent: $event'; + } + + @override + String get errorCouldNotOpenLinkTitle => 'Unable to open link'; + + @override + String errorCouldNotOpenLink(String url) { + return 'Link could not be opened: $url'; + } + + @override + String get errorMuteTopicFailed => 'Failed to mute topic'; + + @override + String get errorUnmuteTopicFailed => 'Failed to unmute topic'; + + @override + String get errorFollowTopicFailed => 'Failed to follow topic'; + + @override + String get errorUnfollowTopicFailed => 'Failed to unfollow topic'; + + @override + String get errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Failed to star message'; + + @override + String get errorUnstarMessageFailedTitle => 'Failed to unstar message'; + + @override + String get errorCouldNotEditMessageTitle => 'Could not edit message'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message link copied'; + + @override + String get successTopicLinkCopied => 'Topic link copied'; + + @override + String get successChannelLinkCopied => 'Channel link copied'; + + @override + String get errorBannerDeactivatedDmLabel => + 'You cannot send messages to deactivated users.'; + + @override + String get errorBannerCannotPostInChannelLabel => + 'You do not have permission to post in this channel.'; + + @override + String get composeBoxBannerLabelUnsubscribedWhenCannotSend => + 'New messages will not appear automatically.'; + + @override + String get composeBoxBannerButtonRefresh => 'Refresh'; + + @override + String get composeBoxBannerButtonSubscribe => 'Subscribe'; + + @override + String get composeBoxBannerLabelEditMessage => 'Edit message'; + + @override + String get composeBoxBannerButtonCancel => 'Cancel'; + + @override + String get composeBoxBannerButtonSave => 'Save'; + + @override + String get editAlreadyInProgressTitle => 'Cannot edit message'; + + @override + String get editAlreadyInProgressMessage => + 'An edit is already in progress. Please wait for it to complete.'; + + @override + String get savingMessageEditLabel => 'SAVING EDIT…'; + + @override + String get savingMessageEditFailedLabel => 'EDIT NOT SAVED'; + + @override + String get discardDraftConfirmationDialogTitle => + 'Discard the message you’re writing?'; + + @override + String get discardDraftForEditConfirmationDialogMessage => + 'When you edit a message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftForOutboxConfirmationDialogMessage => + 'When you restore an unsent message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftConfirmationDialogConfirmButton => 'Discard'; + + @override + String get composeBoxAttachFilesTooltip => 'Attach files'; + + @override + String get composeBoxAttachMediaTooltip => 'Attach images or videos'; + + @override + String get composeBoxAttachFromCameraTooltip => 'Take a photo'; + + @override + String get composeBoxGenericContentHint => 'Type a message'; + + @override + String get newDmSheetComposeButtonLabel => 'Compose'; + + @override + String get newDmSheetScreenTitle => 'New DM'; + + @override + String get newDmFabButtonLabel => 'New DM'; + + @override + String get newDmSheetSearchHintEmpty => 'Add one or more users'; + + @override + String get newDmSheetSearchHintSomeSelected => 'Add another user…'; + + @override + String get newDmSheetNoUsersFound => 'No users found'; + + @override + String composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Write yourself a note'; + + @override + String composeBoxChannelContentHint(String destination) { + return 'Message $destination'; + } + + @override + String get preparingEditMessageContentInput => 'Preparing…'; + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get unknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxEnterTopicOrSkipHintText(String defaultTopicName) { + return 'Enter a topic (skip for “$defaultTopicName”)'; + } + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String composeBoxLoadingMessage(int messageId) { + return '(loading message $messageId)'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String get dmsWithYourselfPageTitle => 'DMs with yourself'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String dmsWithOthersPageTitle(String others) { + return 'DMs with $others'; + } + + @override + String get emptyMessageList => 'There are no messages here.'; + + @override + String get emptyMessageListSearch => 'No search results.'; + + @override + String get messageListGroupYouWithYourself => 'Messages with yourself'; + + @override + String get contentValidationErrorTooLong => + 'Message length shouldn\'t be greater than 10000 characters.'; + + @override + String get contentValidationErrorEmpty => 'You have nothing to send!'; + + @override + String get contentValidationErrorQuoteAndReplyInProgress => + 'Please wait for the quotation to complete.'; + + @override + String get contentValidationErrorUploadInProgress => + 'Please wait for the upload to complete.'; + + @override + String get dialogCancel => 'Cancel'; + + @override + String get dialogContinue => 'Continue'; + + @override + String get dialogClose => 'Close'; + + @override + String get errorDialogLearnMore => 'Learn more'; + + @override + String get errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @override + String get lightboxVideoCurrentPosition => 'Current position'; + + @override + String get lightboxVideoDuration => 'Video duration'; + + @override + String get loginPageTitle => 'Log in'; + + @override + String get loginFormSubmitLabel => 'Log in'; + + @override + String get loginMethodDivider => 'OR'; + + @override + String signInWithFoo(String method) { + return 'Sign in with $method'; + } + + @override + String get loginAddAnAccountPageTitle => 'Add an account'; + + @override + String get loginServerUrlLabel => 'Your Zulip server URL'; + + @override + String get loginHidePassword => 'Hide password'; + + @override + String get loginEmailLabel => 'Email address'; + + @override + String get loginErrorMissingEmail => 'Please enter your email.'; + + @override + String get loginPasswordLabel => 'Password'; + + @override + String get loginErrorMissingPassword => 'Please enter your password.'; + + @override + String get loginUsernameLabel => 'Username'; + + @override + String get loginErrorMissingUsername => 'Please enter your username.'; + + @override + String get topicValidationErrorTooLong => + 'Topic length shouldn\'t be greater than 60 characters.'; + + @override + String get topicValidationErrorMandatoryButEmpty => + 'Topics are required in this organization.'; + + @override + String get errorContentNotInsertedTitle => 'Content not inserted'; + + @override + String get errorContentToInsertIsEmpty => + 'The file to be inserted is empty or cannot be accessed.'; + + @override + String errorServerVersionUnsupportedMessage( + String url, + String zulipVersion, + String minSupportedZulipVersion, + ) { + return '$url is running Zulip Server $zulipVersion, which is unsupported. The minimum supported version is Zulip Server $minSupportedZulipVersion.'; + } + + @override + String errorInvalidApiKeyMessage(String url) { + return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; + } + + @override + String get errorInvalidResponse => 'The server sent an invalid response.'; + + @override + String get errorNetworkRequestFailed => 'Network request failed'; + + @override + String errorMalformedResponse(int httpStatus) { + return 'Server gave malformed response; HTTP status $httpStatus'; + } + + @override + String errorMalformedResponseWithCause(int httpStatus, String details) { + return 'Server gave malformed response; HTTP status $httpStatus; $details'; + } + + @override + String errorRequestFailed(int httpStatus) { + return 'Network request failed: HTTP status $httpStatus'; + } + + @override + String get errorVideoPlayerFailed => 'Unable to play the video.'; + + @override + String get serverUrlValidationErrorEmpty => 'Please enter a URL.'; + + @override + String get serverUrlValidationErrorInvalidUrl => 'Please enter a valid URL.'; + + @override + String get serverUrlValidationErrorNoUseEmail => + 'Please enter the server URL, not your email.'; + + @override + String get serverUrlValidationErrorUnsupportedScheme => + 'The server URL must start with http:// or https://.'; + + @override + String get spoilerDefaultHeaderText => 'Spoiler'; + + @override + String get markAllAsReadLabel => 'Mark all messages as read'; + + @override + String markAsReadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as read.'; + } + + @override + String get markAsReadInProgress => 'Marking messages as read…'; + + @override + String get errorMarkAsReadFailedTitle => 'Mark as read failed'; + + @override + String markAsUnreadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as unread.'; + } + + @override + String get markAsUnreadInProgress => 'Marking messages as unread…'; + + @override + String get errorMarkAsUnreadFailedTitle => 'Mark as unread failed'; + + @override + String get today => 'Today'; + + @override + String get yesterday => 'Yesterday'; + + @override + String get userActiveNow => 'Active now'; + + @override + String get userIdle => 'Idle'; + + @override + String userActiveMinutesAgo(int minutes) { + String _temp0 = intl.Intl.pluralLogic( + minutes, + locale: localeName, + other: '$minutes minutes', + one: '1 minute', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveHoursAgo(int hours) { + String _temp0 = intl.Intl.pluralLogic( + hours, + locale: localeName, + other: '$hours hours', + one: '1 hour', + ); + return 'Active $_temp0 ago'; + } + + @override + String get userActiveYesterday => 'Active yesterday'; + + @override + String userActiveDaysAgo(int days) { + String _temp0 = intl.Intl.pluralLogic( + days, + locale: localeName, + other: '$days days', + one: '1 day', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveDate(String date) { + return 'Active $date'; + } + + @override + String get userNotActiveInYear => 'Not active in the last year'; + + @override + String get invisibleMode => 'Invisible mode'; + + @override + String get turnOnInvisibleModeErrorTitle => + 'Error turning on invisible mode. Please try again.'; + + @override + String get turnOffInvisibleModeErrorTitle => + 'Error turning off invisible mode. Please try again.'; + + @override + String get userRoleOwner => 'Owner'; + + @override + String get userRoleAdministrator => 'Administrator'; + + @override + String get userRoleModerator => 'Moderator'; + + @override + String get userRoleMember => 'Member'; + + @override + String get userRoleGuest => 'Guest'; + + @override + String get userRoleUnknown => 'Unknown'; + + @override + String get statusButtonLabelStatusSet => 'Status'; + + @override + String get statusButtonLabelStatusUnset => 'Set status'; + + @override + String get noStatusText => 'No status text'; + + @override + String get setStatusPageTitle => 'Set status'; + + @override + String get statusClearButtonLabel => 'Clear'; + + @override + String get statusSaveButtonLabel => 'Save'; + + @override + String get statusTextHint => 'Your status'; + + @override + String get userStatusBusy => 'Busy'; + + @override + String get userStatusInAMeeting => 'In a meeting'; + + @override + String get userStatusCommuting => 'Commuting'; + + @override + String get userStatusOutSick => 'Out sick'; + + @override + String get userStatusVacationing => 'Vacationing'; + + @override + String get userStatusWorkingRemotely => 'Working remotely'; + + @override + String get userStatusAtTheOffice => 'At the office'; + + @override + String get updateStatusErrorTitle => + 'Error updating user status. Please try again.'; + + @override + String get searchMessagesPageTitle => 'Search'; + + @override + String get searchMessagesHintText => 'Search'; + + @override + String get searchMessagesClearButtonTooltip => 'Clear'; + + @override + String get inboxPageTitle => 'Inbox'; + + @override + String get inboxEmptyPlaceholder => + 'There are no unread messages in your inbox. Use the buttons below to view the combined feed or list of channels.'; + + @override + String get recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get recentDmConversationsSectionHeader => 'Direct messages'; + + @override + String get recentDmConversationsEmptyPlaceholder => + 'You have no direct messages yet! Why not start the conversation?'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Starred messages'; + + @override + String get channelsPageTitle => 'Channels'; + + @override + String get channelsEmptyPlaceholder => + 'You’re not subscribed to any channels yet.'; + + @override + String channelsEmptyPlaceholderWithAllChannelsLink( + String allChannelsPageTitle, + ) { + return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + } + + @override + String get sharePageTitle => 'Share'; + + @override + String get mainMenuMyProfile => 'My profile'; + + @override + String get topicsButtonTooltip => 'Topics'; + + @override + String get channelFeedButtonTooltip => 'Channel feed'; + + @override + String notifGroupDmConversationLabel(String senderFullName, int numOthers) { + String _temp0 = intl.Intl.pluralLogic( + numOthers, + locale: localeName, + other: '$numOthers others', + one: '1 other', + ); + return '$senderFullName to you and $_temp0'; + } + + @override + String get pinnedSubscriptionsLabel => 'Pinned'; + + @override + String get unpinnedSubscriptionsLabel => 'Unpinned'; + + @override + String get notifSelfUser => 'You'; + + @override + String get reactedEmojiSelfUser => 'You'; + + @override + String get reactionChipsLabel => 'Reactions'; + + @override + String reactionChipLabel(String emojiName, String votes) { + return '$emojiName: $votes'; + } + + @override + String reactionChipVotesYouAndOthers(int otherUsersCount) { + String _temp0 = intl.Intl.pluralLogic( + otherUsersCount, + locale: localeName, + other: 'You and $otherUsersCount others', + one: 'You and 1 other', + ); + return '$_temp0'; + } + + @override + String onePersonTyping(String typist) { + return '$typist is typing…'; + } + + @override + String twoPeopleTyping(String typist, String otherTypist) { + return '$typist and $otherTypist are typing…'; + } + + @override + String get manyPeopleTyping => 'Several people are typing…'; + + @override + String get wildcardMentionAll => 'all'; + + @override + String get wildcardMentionEveryone => 'everyone'; + + @override + String get wildcardMentionChannel => 'channel'; + + @override + String get wildcardMentionStream => 'stream'; + + @override + String get wildcardMentionTopic => 'topic'; + + @override + String get wildcardMentionChannelDescription => 'Notify channel'; + + @override + String get wildcardMentionStreamDescription => 'Notify stream'; + + @override + String get wildcardMentionAllDmDescription => 'Notify recipients'; + + @override + String get wildcardMentionTopicDescription => 'Notify topic'; + + @override + String get messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get messageNotSentLabel => 'MESSAGE NOT SENT'; + + @override + String pollVoterNames(String voterNames) { + return '($voterNames)'; + } + + @override + String get themeSettingTitle => 'THEME'; + + @override + String get themeSettingDark => 'Dark'; + + @override + String get themeSettingLight => 'Light'; + + @override + String get themeSettingSystem => 'System'; + + @override + String get openLinksWithInAppBrowser => 'Open links with in-app browser'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get initialAnchorSettingTitle => 'Open message feeds at'; + + @override + String get initialAnchorSettingDescription => + 'You can choose whether message feeds open at your first unread message or at the newest messages.'; + + @override + String get initialAnchorSettingFirstUnreadAlways => 'First unread message'; + + @override + String get initialAnchorSettingFirstUnreadConversations => + 'First unread message in conversation views, newest message elsewhere'; + + @override + String get initialAnchorSettingNewestAlways => 'Newest message'; + + @override + String get markReadOnScrollSettingTitle => 'Mark messages as read on scroll'; + + @override + String get markReadOnScrollSettingDescription => + 'When scrolling through messages, should they automatically be marked as read?'; + + @override + String get markReadOnScrollSettingAlways => 'Always'; + + @override + String get markReadOnScrollSettingNever => 'Never'; + + @override + String get markReadOnScrollSettingConversations => + 'Only in conversation views'; + + @override + String get markReadOnScrollSettingConversationsDescription => + 'Messages will be automatically marked as read only when viewing a single topic or direct message conversation.'; + + @override + String get experimentalFeatureSettingsPageTitle => 'Experimental features'; + + @override + String get experimentalFeatureSettingsWarning => + 'These options enable features which are still under development and not ready. They may not work, and may cause issues in other areas of the app.\n\nThe purpose of these settings is for experimentation by people working on developing Zulip.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountNotFound => + 'The account associated with this notification could not be found.'; + + @override + String get errorReactionAddingFailedTitle => 'Adding reaction failed'; + + @override + String get errorReactionRemovingFailedTitle => 'Removing reaction failed'; + + @override + String get errorSharingTitle => 'Failed to share content'; + + @override + String get errorSharingAccountNotLoggedIn => + 'There is no account logged in. Please log in to an account and try again.'; + + @override + String get emojiReactionsMore => 'more'; + + @override + String get emojiPickerSearchEmoji => 'Search emoji'; + + @override + String get noEarlierMessages => 'No earlier messages'; + + @override + String get revealButtonLabel => 'Reveal message'; + + @override + String get mutedUser => 'Muted user'; + + @override + String get scrollToBottomTooltip => 'Scroll to bottom'; + + @override + String get appVersionUnknownPlaceholder => '(…)'; + + @override + String get zulipAppTitle => 'Zulip'; +} diff --git a/lib/generated/l10n/zulip_localizations_fr.dart b/lib/generated/l10n/zulip_localizations_fr.dart index 7572aa5d3f..2e430ea046 100644 --- a/lib/generated/l10n/zulip_localizations_fr.dart +++ b/lib/generated/l10n/zulip_localizations_fr.dart @@ -162,14 +162,15 @@ class ZulipLocalizationsFr extends ZulipLocalizations { 'Impossible de marquer le sujet comme non résolu'; @override - String get actionSheetOptionSeeWhoReacted => 'See who reacted'; + String get actionSheetOptionSeeWhoReacted => 'Voir qui a réagi'; @override - String get seeWhoReactedSheetNoReactions => 'This message has no reactions.'; + String get seeWhoReactedSheetNoReactions => + 'Aucune réaction associée à ce message.'; @override String seeWhoReactedSheetHeaderLabel(int num) { - return 'Emoji reactions ($num total)'; + return 'Réactions emoji ($num total)'; } @override @@ -180,38 +181,38 @@ class ZulipLocalizationsFr extends ZulipLocalizations { other: '$num votes', one: '1 vote', ); - return '$emojiName: $_temp0'; + return '$emojiName : $_temp0'; } @override String seeWhoReactedSheetUserListLabel(String emojiName, int num) { - return 'Votes for $emojiName ($num)'; + return 'Votes pour $emojiName ($num)'; } @override - String get actionSheetOptionViewReadReceipts => 'View read receipts'; + String get actionSheetOptionViewReadReceipts => 'Voir accusés de réception'; @override - String get actionSheetReadReceipts => 'Read receipts'; + String get actionSheetReadReceipts => 'Accusés de réception'; @override String actionSheetReadReceiptsReadCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, - other: 'This message has been read by $count people:', - one: 'This message has been read by $count person:', + other: 'Ce message a été lu par $count personnes :', + one: 'Ce message a été lu par $count personne:', ); return '$_temp0'; } @override String get actionSheetReadReceiptsZeroReadCount => - 'No one has read this message yet.'; + 'Personne n\'a encore lu ce message.'; @override String get actionSheetReadReceiptsErrorReadCount => - 'Failed to load read receipts.'; + 'Échec du chargement des accusés de réception.'; @override String get actionSheetOptionCopyMessageText => 'Copier le contenu du message'; @@ -243,20 +244,21 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get actionSheetOptionEditMessage => 'Modifier le message'; @override - String get actionSheetOptionDeleteMessage => 'Delete message'; + String get actionSheetOptionDeleteMessage => 'Supprimer message'; @override - String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + String get deleteMessageConfirmationDialogTitle => 'Supprimer message ?'; @override String get deleteMessageConfirmationDialogMessage => - 'Deleting a message permanently removes it for everyone.'; + 'Supprimer un message de façon permanente le supprime pour tout le monde.'; @override - String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + String get deleteMessageConfirmationDialogConfirmButton => 'Supprimer'; @override - String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + String get errorDeleteMessageFailedTitle => + 'Échec de la suppression du message'; @override String get actionSheetOptionMarkTopicAsRead => 'Marquer le sujet comme lu'; @@ -858,120 +860,120 @@ class ZulipLocalizationsFr extends ZulipLocalizations { String get userRoleModerator => 'Moderator'; @override - String get userRoleMember => 'Member'; + String get userRoleMember => 'Membre'; @override - String get userRoleGuest => 'Guest'; + String get userRoleGuest => 'Invité.e'; @override - String get userRoleUnknown => 'Unknown'; + String get userRoleUnknown => 'Inconnu'; @override - String get statusButtonLabelStatusSet => 'Status'; + String get statusButtonLabelStatusSet => 'Statut'; @override - String get statusButtonLabelStatusUnset => 'Set status'; + String get statusButtonLabelStatusUnset => 'Définir mon statut'; @override - String get noStatusText => 'No status text'; + String get noStatusText => 'Statut sans texte'; @override - String get setStatusPageTitle => 'Set status'; + String get setStatusPageTitle => 'Définir statut'; @override - String get statusClearButtonLabel => 'Clear'; + String get statusClearButtonLabel => 'Effacer'; @override - String get statusSaveButtonLabel => 'Save'; + String get statusSaveButtonLabel => 'Sauvegarder'; @override - String get statusTextHint => 'Your status'; + String get statusTextHint => 'Votre statut'; @override - String get userStatusBusy => 'Busy'; + String get userStatusBusy => 'Occupé'; @override - String get userStatusInAMeeting => 'In a meeting'; + String get userStatusInAMeeting => 'En réunion'; @override - String get userStatusCommuting => 'Commuting'; + String get userStatusCommuting => 'En déplacement'; @override - String get userStatusOutSick => 'Out sick'; + String get userStatusOutSick => 'Malade'; @override - String get userStatusVacationing => 'Vacationing'; + String get userStatusVacationing => 'En vacances'; @override - String get userStatusWorkingRemotely => 'Working remotely'; + String get userStatusWorkingRemotely => 'En télétravail'; @override - String get userStatusAtTheOffice => 'At the office'; + String get userStatusAtTheOffice => 'Au bureau'; @override String get updateStatusErrorTitle => - 'Error updating user status. Please try again.'; + 'Erreur lors de la mise à jour du statut de l\'utilisateur. Merci de réessayer.'; @override - String get searchMessagesPageTitle => 'Search'; + String get searchMessagesPageTitle => 'Recherche'; @override - String get searchMessagesHintText => 'Search'; + String get searchMessagesHintText => 'Recherche'; @override - String get searchMessagesClearButtonTooltip => 'Clear'; + String get searchMessagesClearButtonTooltip => 'Effacer'; @override - String get inboxPageTitle => 'Inbox'; + String get inboxPageTitle => 'Boîte de réception'; @override String get inboxEmptyPlaceholder => - 'There are no unread messages in your inbox. Use the buttons below to view the combined feed or list of channels.'; + 'Aucun message non lu dans votre boîte de réception. Utilisez les boutons ci-dessous pour voir le fil groupé ou la liste des chaînes.'; @override - String get recentDmConversationsPageTitle => 'Direct messages'; + String get recentDmConversationsPageTitle => 'Messages directs'; @override - String get recentDmConversationsSectionHeader => 'Direct messages'; + String get recentDmConversationsSectionHeader => 'Messages directs'; @override String get recentDmConversationsEmptyPlaceholder => - 'You have no direct messages yet! Why not start the conversation?'; + 'Vous n\'avez aucun message direct pour l\'instant ! Et si vous lanciez une conversation ?'; @override - String get combinedFeedPageTitle => 'Combined feed'; + String get combinedFeedPageTitle => 'Fil groupé'; @override String get mentionsPageTitle => 'Mentions'; @override - String get starredMessagesPageTitle => 'Starred messages'; + String get starredMessagesPageTitle => 'Messages favoris'; @override - String get channelsPageTitle => 'Channels'; + String get channelsPageTitle => 'Chaînes'; @override String get channelsEmptyPlaceholder => - 'You’re not subscribed to any channels yet.'; + 'Vous n\'êtes abonné à aucune chaîne pour l\'instant.'; @override String channelsEmptyPlaceholderWithAllChannelsLink( String allChannelsPageTitle, ) { - return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + return 'Vous n\'êtes abonné à aucune chaîne pour l\'instant. Allez sur $allChannelsPageTitle pour vous abonner.'; } @override - String get sharePageTitle => 'Share'; + String get sharePageTitle => 'Partager'; @override - String get mainMenuMyProfile => 'My profile'; + String get mainMenuMyProfile => 'Mon profil'; @override - String get topicsButtonTooltip => 'Topics'; + String get topicsButtonTooltip => 'Sujets'; @override - String get channelFeedButtonTooltip => 'Channel feed'; + String get channelFeedButtonTooltip => 'Fil de la chaîne'; @override String notifGroupDmConversationLabel(String senderFullName, int numOthers) { @@ -981,27 +983,27 @@ class ZulipLocalizationsFr extends ZulipLocalizations { other: '$numOthers others', one: '1 other', ); - return '$senderFullName to you and $_temp0'; + return '$senderFullName à vous et $_temp0'; } @override - String get pinnedSubscriptionsLabel => 'Pinned'; + String get pinnedSubscriptionsLabel => 'Épinglé'; @override - String get unpinnedSubscriptionsLabel => 'Unpinned'; + String get unpinnedSubscriptionsLabel => 'Désépingler'; @override - String get notifSelfUser => 'You'; + String get notifSelfUser => 'Vous'; @override - String get reactedEmojiSelfUser => 'You'; + String get reactedEmojiSelfUser => 'Vous'; @override - String get reactionChipsLabel => 'Reactions'; + String get reactionChipsLabel => 'Réactions'; @override String reactionChipLabel(String emojiName, String votes) { - return '$emojiName: $votes'; + return '$emojiName : $votes'; } @override @@ -1017,16 +1019,16 @@ class ZulipLocalizationsFr extends ZulipLocalizations { @override String onePersonTyping(String typist) { - return '$typist is typing…'; + return '$typist est en train d\'écrire…'; } @override String twoPeopleTyping(String typist, String otherTypist) { - return '$typist and $otherTypist are typing…'; + return '$typist et $otherTypist sont en train d\'écrire…'; } @override - String get manyPeopleTyping => 'Several people are typing…'; + String get manyPeopleTyping => 'Plusieurs personnes sont en train d\'écrire…'; @override String get wildcardMentionAll => 'all'; diff --git a/lib/generated/l10n/zulip_localizations_he.dart b/lib/generated/l10n/zulip_localizations_he.dart new file mode 100644 index 0000000000..16324eede7 --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_he.dart @@ -0,0 +1,1167 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hebrew (`he`). +class ZulipLocalizationsHe extends ZulipLocalizations { + ZulipLocalizationsHe([String locale = 'he']) : super(locale); + + @override + String get aboutPageTitle => 'About Zulip'; + + @override + String get aboutPageAppVersion => 'App version'; + + @override + String get aboutPageOpenSourceLicenses => 'Open-source licenses'; + + @override + String get aboutPageTapToView => 'Tap to view'; + + @override + String get upgradeWelcomeDialogTitle => 'Welcome to the new Zulip app!'; + + @override + String get upgradeWelcomeDialogMessage => + 'You’ll find a familiar experience in a faster, sleeker package.'; + + @override + String get upgradeWelcomeDialogLinkText => + 'Check out the announcement blog post!'; + + @override + String get upgradeWelcomeDialogDismiss => 'Let\'s go'; + + @override + String get chooseAccountPageTitle => 'Choose account'; + + @override + String get settingsPageTitle => 'Settings'; + + @override + String get switchAccountButton => 'Switch account'; + + @override + String tryAnotherAccountMessage(Object url) { + return 'Your account at $url is taking a while to load.'; + } + + @override + String get tryAnotherAccountButton => 'Try another account'; + + @override + String get chooseAccountPageLogOutButton => 'Log out'; + + @override + String get logOutConfirmationDialogTitle => 'Log out?'; + + @override + String get logOutConfirmationDialogMessage => + 'To use this account in the future, you will have to re-enter the URL for your organization and your account information.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Log out'; + + @override + String get chooseAccountButtonAddAnAccount => 'Add an account'; + + @override + String get navButtonAllChannels => 'All channels'; + + @override + String get allChannelsPageTitle => 'All channels'; + + @override + String get allChannelsEmptyPlaceholder => + 'There are no channels you can view in this organization.'; + + @override + String get profileButtonSendDirectMessage => 'Send direct message'; + + @override + String get errorCouldNotShowUserProfile => 'Could not show user profile.'; + + @override + String get permissionsNeededTitle => 'Permissions needed'; + + @override + String get permissionsNeededOpenSettings => 'Open settings'; + + @override + String get permissionsDeniedCameraAccess => + 'To upload an image, please grant Zulip additional permissions in Settings.'; + + @override + String get permissionsDeniedReadExternalStorage => + 'To upload files, please grant Zulip additional permissions in Settings.'; + + @override + String get actionSheetOptionSubscribe => 'Subscribe'; + + @override + String get subscribeFailedTitle => 'Failed to subscribe'; + + @override + String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; + + @override + String get actionSheetOptionCopyChannelLink => 'Copy link to channel'; + + @override + String get actionSheetOptionListOfTopics => 'List of topics'; + + @override + String get actionSheetOptionChannelFeed => 'Channel feed'; + + @override + String get actionSheetOptionUnsubscribe => 'Unsubscribe'; + + @override + String unsubscribeConfirmationDialogTitle(String channelName) { + return 'Unsubscribe from $channelName?'; + } + + @override + String get unsubscribeConfirmationDialogMessageCannotResubscribe => + 'Once you leave this channel, you will not be able to rejoin.'; + + @override + String get unsubscribeConfirmationDialogConfirmButton => 'Unsubscribe'; + + @override + String get unsubscribeFailedTitle => 'Failed to unsubscribe'; + + @override + String get actionSheetOptionMuteTopic => 'Mute topic'; + + @override + String get actionSheetOptionUnmuteTopic => 'Unmute topic'; + + @override + String get actionSheetOptionFollowTopic => 'Follow topic'; + + @override + String get actionSheetOptionUnfollowTopic => 'Unfollow topic'; + + @override + String get actionSheetOptionResolveTopic => 'Mark as resolved'; + + @override + String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; + + @override + String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; + + @override + String get errorUnresolveTopicFailedTitle => + 'Failed to mark topic as unresolved'; + + @override + String get actionSheetOptionSeeWhoReacted => 'See who reacted'; + + @override + String get seeWhoReactedSheetNoReactions => 'This message has no reactions.'; + + @override + String seeWhoReactedSheetHeaderLabel(int num) { + return 'Emoji reactions ($num total)'; + } + + @override + String seeWhoReactedSheetEmojiNameWithVoteCount(String emojiName, int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num votes', + one: '1 vote', + ); + return '$emojiName: $_temp0'; + } + + @override + String seeWhoReactedSheetUserListLabel(String emojiName, int num) { + return 'Votes for $emojiName ($num)'; + } + + @override + String get actionSheetOptionViewReadReceipts => 'View read receipts'; + + @override + String get actionSheetReadReceipts => 'Read receipts'; + + @override + String actionSheetReadReceiptsReadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'This message has been read by $count people:', + one: 'This message has been read by $count person:', + ); + return '$_temp0'; + } + + @override + String get actionSheetReadReceiptsZeroReadCount => + 'No one has read this message yet.'; + + @override + String get actionSheetReadReceiptsErrorReadCount => + 'Failed to load read receipts.'; + + @override + String get actionSheetOptionCopyMessageText => 'Copy message text'; + + @override + String get actionSheetOptionCopyMessageLink => 'Copy link to message'; + + @override + String get actionSheetOptionMarkAsUnread => 'Mark as unread from here'; + + @override + String get actionSheetOptionHideMutedMessage => 'Hide muted message again'; + + @override + String get actionSheetOptionShare => 'Share'; + + @override + String get actionSheetOptionQuoteMessage => 'Quote message'; + + @override + String get actionSheetOptionStarMessage => 'Star message'; + + @override + String get actionSheetOptionUnstarMessage => 'Unstar message'; + + @override + String get actionSheetOptionEditMessage => 'Edit message'; + + @override + String get actionSheetOptionDeleteMessage => 'Delete message'; + + @override + String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + + @override + String get deleteMessageConfirmationDialogMessage => + 'Deleting a message permanently removes it for everyone.'; + + @override + String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + + @override + String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + + @override + String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; + + @override + String get actionSheetOptionCopyTopicLink => 'Copy link to topic'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Something went wrong'; + + @override + String get errorWebAuthOperationalError => 'An unexpected error occurred.'; + + @override + String get errorAccountLoggedInTitle => 'Account already logged in'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'The account $email at $server is already in your list of accounts.'; + } + + @override + String get errorCouldNotFetchMessageSource => + 'Could not fetch message source.'; + + @override + String get errorCouldNotAccessUploadedFileTitle => + 'Could not access uploaded file'; + + @override + String get errorCopyingFailed => 'Copying failed'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Failed to upload file: $filename'; + } + + @override + String filenameAndSizeInMiB(String filename, String size) { + return '$filename: $size MiB'; + } + + @override + String errorFilesTooLarge( + int num, + int maxFileUploadSizeMib, + String listMessage, + ) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num files are', + one: 'File is', + ); + return '$_temp0 larger than the server\'s limit of $maxFileUploadSizeMib MiB and will not be uploaded:\n\n$listMessage'; + } + + @override + String errorFilesTooLargeTitle(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: 'Files', + one: 'File', + ); + return '$_temp0 too large'; + } + + @override + String get errorLoginInvalidInputTitle => 'Invalid input'; + + @override + String get errorLoginFailedTitle => 'Login failed'; + + @override + String get errorMessageNotSent => 'Message not sent'; + + @override + String get errorMessageEditNotSaved => 'Message not saved'; + + @override + String errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorCouldNotConnectTitle => 'Could not connect'; + + @override + String get errorMessageDoesNotSeemToExist => + 'That message does not seem to exist.'; + + @override + String get errorQuotationFailed => 'Quotation failed'; + + @override + String errorServerMessage(String message) { + return 'The server said:\n\n$message'; + } + + @override + String get errorConnectingToServerShort => + 'Error connecting to Zulip. Retrying…'; + + @override + String errorConnectingToServerDetails(String serverUrl, String error) { + return 'Error connecting to Zulip at $serverUrl. Will retry:\n\n$error'; + } + + @override + String get errorHandlingEventTitle => + 'Error handling a Zulip event. Retrying connection…'; + + @override + String errorHandlingEventDetails( + String serverUrl, + String error, + String event, + ) { + return 'Error handling a Zulip event from $serverUrl; will retry.\n\nError: $error\n\nEvent: $event'; + } + + @override + String get errorCouldNotOpenLinkTitle => 'Unable to open link'; + + @override + String errorCouldNotOpenLink(String url) { + return 'Link could not be opened: $url'; + } + + @override + String get errorMuteTopicFailed => 'Failed to mute topic'; + + @override + String get errorUnmuteTopicFailed => 'Failed to unmute topic'; + + @override + String get errorFollowTopicFailed => 'Failed to follow topic'; + + @override + String get errorUnfollowTopicFailed => 'Failed to unfollow topic'; + + @override + String get errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Failed to star message'; + + @override + String get errorUnstarMessageFailedTitle => 'Failed to unstar message'; + + @override + String get errorCouldNotEditMessageTitle => 'Could not edit message'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message link copied'; + + @override + String get successTopicLinkCopied => 'Topic link copied'; + + @override + String get successChannelLinkCopied => 'Channel link copied'; + + @override + String get errorBannerDeactivatedDmLabel => + 'You cannot send messages to deactivated users.'; + + @override + String get errorBannerCannotPostInChannelLabel => + 'You do not have permission to post in this channel.'; + + @override + String get composeBoxBannerLabelUnsubscribedWhenCannotSend => + 'New messages will not appear automatically.'; + + @override + String get composeBoxBannerButtonRefresh => 'Refresh'; + + @override + String get composeBoxBannerButtonSubscribe => 'Subscribe'; + + @override + String get composeBoxBannerLabelEditMessage => 'Edit message'; + + @override + String get composeBoxBannerButtonCancel => 'Cancel'; + + @override + String get composeBoxBannerButtonSave => 'Save'; + + @override + String get editAlreadyInProgressTitle => 'Cannot edit message'; + + @override + String get editAlreadyInProgressMessage => + 'An edit is already in progress. Please wait for it to complete.'; + + @override + String get savingMessageEditLabel => 'SAVING EDIT…'; + + @override + String get savingMessageEditFailedLabel => 'EDIT NOT SAVED'; + + @override + String get discardDraftConfirmationDialogTitle => + 'Discard the message you’re writing?'; + + @override + String get discardDraftForEditConfirmationDialogMessage => + 'When you edit a message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftForOutboxConfirmationDialogMessage => + 'When you restore an unsent message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftConfirmationDialogConfirmButton => 'Discard'; + + @override + String get composeBoxAttachFilesTooltip => 'Attach files'; + + @override + String get composeBoxAttachMediaTooltip => 'Attach images or videos'; + + @override + String get composeBoxAttachFromCameraTooltip => 'Take a photo'; + + @override + String get composeBoxGenericContentHint => 'Type a message'; + + @override + String get newDmSheetComposeButtonLabel => 'Compose'; + + @override + String get newDmSheetScreenTitle => 'New DM'; + + @override + String get newDmFabButtonLabel => 'New DM'; + + @override + String get newDmSheetSearchHintEmpty => 'Add one or more users'; + + @override + String get newDmSheetSearchHintSomeSelected => 'Add another user…'; + + @override + String get newDmSheetNoUsersFound => 'No users found'; + + @override + String composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Write yourself a note'; + + @override + String composeBoxChannelContentHint(String destination) { + return 'Message $destination'; + } + + @override + String get preparingEditMessageContentInput => 'Preparing…'; + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get unknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxEnterTopicOrSkipHintText(String defaultTopicName) { + return 'Enter a topic (skip for “$defaultTopicName”)'; + } + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String composeBoxLoadingMessage(int messageId) { + return '(loading message $messageId)'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String get dmsWithYourselfPageTitle => 'DMs with yourself'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String dmsWithOthersPageTitle(String others) { + return 'DMs with $others'; + } + + @override + String get emptyMessageList => 'There are no messages here.'; + + @override + String get emptyMessageListSearch => 'No search results.'; + + @override + String get messageListGroupYouWithYourself => 'Messages with yourself'; + + @override + String get contentValidationErrorTooLong => + 'Message length shouldn\'t be greater than 10000 characters.'; + + @override + String get contentValidationErrorEmpty => 'You have nothing to send!'; + + @override + String get contentValidationErrorQuoteAndReplyInProgress => + 'Please wait for the quotation to complete.'; + + @override + String get contentValidationErrorUploadInProgress => + 'Please wait for the upload to complete.'; + + @override + String get dialogCancel => 'Cancel'; + + @override + String get dialogContinue => 'Continue'; + + @override + String get dialogClose => 'Close'; + + @override + String get errorDialogLearnMore => 'Learn more'; + + @override + String get errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @override + String get lightboxVideoCurrentPosition => 'Current position'; + + @override + String get lightboxVideoDuration => 'Video duration'; + + @override + String get loginPageTitle => 'Log in'; + + @override + String get loginFormSubmitLabel => 'Log in'; + + @override + String get loginMethodDivider => 'OR'; + + @override + String signInWithFoo(String method) { + return 'Sign in with $method'; + } + + @override + String get loginAddAnAccountPageTitle => 'Add an account'; + + @override + String get loginServerUrlLabel => 'Your Zulip server URL'; + + @override + String get loginHidePassword => 'Hide password'; + + @override + String get loginEmailLabel => 'Email address'; + + @override + String get loginErrorMissingEmail => 'Please enter your email.'; + + @override + String get loginPasswordLabel => 'Password'; + + @override + String get loginErrorMissingPassword => 'Please enter your password.'; + + @override + String get loginUsernameLabel => 'Username'; + + @override + String get loginErrorMissingUsername => 'Please enter your username.'; + + @override + String get topicValidationErrorTooLong => + 'Topic length shouldn\'t be greater than 60 characters.'; + + @override + String get topicValidationErrorMandatoryButEmpty => + 'Topics are required in this organization.'; + + @override + String get errorContentNotInsertedTitle => 'Content not inserted'; + + @override + String get errorContentToInsertIsEmpty => + 'The file to be inserted is empty or cannot be accessed.'; + + @override + String errorServerVersionUnsupportedMessage( + String url, + String zulipVersion, + String minSupportedZulipVersion, + ) { + return '$url is running Zulip Server $zulipVersion, which is unsupported. The minimum supported version is Zulip Server $minSupportedZulipVersion.'; + } + + @override + String errorInvalidApiKeyMessage(String url) { + return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; + } + + @override + String get errorInvalidResponse => 'The server sent an invalid response.'; + + @override + String get errorNetworkRequestFailed => 'Network request failed'; + + @override + String errorMalformedResponse(int httpStatus) { + return 'Server gave malformed response; HTTP status $httpStatus'; + } + + @override + String errorMalformedResponseWithCause(int httpStatus, String details) { + return 'Server gave malformed response; HTTP status $httpStatus; $details'; + } + + @override + String errorRequestFailed(int httpStatus) { + return 'Network request failed: HTTP status $httpStatus'; + } + + @override + String get errorVideoPlayerFailed => 'Unable to play the video.'; + + @override + String get serverUrlValidationErrorEmpty => 'Please enter a URL.'; + + @override + String get serverUrlValidationErrorInvalidUrl => 'Please enter a valid URL.'; + + @override + String get serverUrlValidationErrorNoUseEmail => + 'Please enter the server URL, not your email.'; + + @override + String get serverUrlValidationErrorUnsupportedScheme => + 'The server URL must start with http:// or https://.'; + + @override + String get spoilerDefaultHeaderText => 'Spoiler'; + + @override + String get markAllAsReadLabel => 'Mark all messages as read'; + + @override + String markAsReadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as read.'; + } + + @override + String get markAsReadInProgress => 'Marking messages as read…'; + + @override + String get errorMarkAsReadFailedTitle => 'Mark as read failed'; + + @override + String markAsUnreadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as unread.'; + } + + @override + String get markAsUnreadInProgress => 'Marking messages as unread…'; + + @override + String get errorMarkAsUnreadFailedTitle => 'Mark as unread failed'; + + @override + String get today => 'Today'; + + @override + String get yesterday => 'Yesterday'; + + @override + String get userActiveNow => 'Active now'; + + @override + String get userIdle => 'Idle'; + + @override + String userActiveMinutesAgo(int minutes) { + String _temp0 = intl.Intl.pluralLogic( + minutes, + locale: localeName, + other: '$minutes minutes', + one: '1 minute', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveHoursAgo(int hours) { + String _temp0 = intl.Intl.pluralLogic( + hours, + locale: localeName, + other: '$hours hours', + one: '1 hour', + ); + return 'Active $_temp0 ago'; + } + + @override + String get userActiveYesterday => 'Active yesterday'; + + @override + String userActiveDaysAgo(int days) { + String _temp0 = intl.Intl.pluralLogic( + days, + locale: localeName, + other: '$days days', + one: '1 day', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveDate(String date) { + return 'Active $date'; + } + + @override + String get userNotActiveInYear => 'Not active in the last year'; + + @override + String get invisibleMode => 'Invisible mode'; + + @override + String get turnOnInvisibleModeErrorTitle => + 'Error turning on invisible mode. Please try again.'; + + @override + String get turnOffInvisibleModeErrorTitle => + 'Error turning off invisible mode. Please try again.'; + + @override + String get userRoleOwner => 'Owner'; + + @override + String get userRoleAdministrator => 'Administrator'; + + @override + String get userRoleModerator => 'Moderator'; + + @override + String get userRoleMember => 'Member'; + + @override + String get userRoleGuest => 'Guest'; + + @override + String get userRoleUnknown => 'Unknown'; + + @override + String get statusButtonLabelStatusSet => 'Status'; + + @override + String get statusButtonLabelStatusUnset => 'Set status'; + + @override + String get noStatusText => 'No status text'; + + @override + String get setStatusPageTitle => 'Set status'; + + @override + String get statusClearButtonLabel => 'Clear'; + + @override + String get statusSaveButtonLabel => 'Save'; + + @override + String get statusTextHint => 'Your status'; + + @override + String get userStatusBusy => 'Busy'; + + @override + String get userStatusInAMeeting => 'In a meeting'; + + @override + String get userStatusCommuting => 'Commuting'; + + @override + String get userStatusOutSick => 'Out sick'; + + @override + String get userStatusVacationing => 'Vacationing'; + + @override + String get userStatusWorkingRemotely => 'Working remotely'; + + @override + String get userStatusAtTheOffice => 'At the office'; + + @override + String get updateStatusErrorTitle => + 'Error updating user status. Please try again.'; + + @override + String get searchMessagesPageTitle => 'Search'; + + @override + String get searchMessagesHintText => 'Search'; + + @override + String get searchMessagesClearButtonTooltip => 'Clear'; + + @override + String get inboxPageTitle => 'Inbox'; + + @override + String get inboxEmptyPlaceholder => + 'There are no unread messages in your inbox. Use the buttons below to view the combined feed or list of channels.'; + + @override + String get recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get recentDmConversationsSectionHeader => 'Direct messages'; + + @override + String get recentDmConversationsEmptyPlaceholder => + 'You have no direct messages yet! Why not start the conversation?'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Starred messages'; + + @override + String get channelsPageTitle => 'Channels'; + + @override + String get channelsEmptyPlaceholder => + 'You’re not subscribed to any channels yet.'; + + @override + String channelsEmptyPlaceholderWithAllChannelsLink( + String allChannelsPageTitle, + ) { + return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + } + + @override + String get sharePageTitle => 'Share'; + + @override + String get mainMenuMyProfile => 'My profile'; + + @override + String get topicsButtonTooltip => 'Topics'; + + @override + String get channelFeedButtonTooltip => 'Channel feed'; + + @override + String notifGroupDmConversationLabel(String senderFullName, int numOthers) { + String _temp0 = intl.Intl.pluralLogic( + numOthers, + locale: localeName, + other: '$numOthers others', + one: '1 other', + ); + return '$senderFullName to you and $_temp0'; + } + + @override + String get pinnedSubscriptionsLabel => 'Pinned'; + + @override + String get unpinnedSubscriptionsLabel => 'Unpinned'; + + @override + String get notifSelfUser => 'You'; + + @override + String get reactedEmojiSelfUser => 'You'; + + @override + String get reactionChipsLabel => 'Reactions'; + + @override + String reactionChipLabel(String emojiName, String votes) { + return '$emojiName: $votes'; + } + + @override + String reactionChipVotesYouAndOthers(int otherUsersCount) { + String _temp0 = intl.Intl.pluralLogic( + otherUsersCount, + locale: localeName, + other: 'You and $otherUsersCount others', + one: 'You and 1 other', + ); + return '$_temp0'; + } + + @override + String onePersonTyping(String typist) { + return '$typist is typing…'; + } + + @override + String twoPeopleTyping(String typist, String otherTypist) { + return '$typist and $otherTypist are typing…'; + } + + @override + String get manyPeopleTyping => 'Several people are typing…'; + + @override + String get wildcardMentionAll => 'all'; + + @override + String get wildcardMentionEveryone => 'everyone'; + + @override + String get wildcardMentionChannel => 'channel'; + + @override + String get wildcardMentionStream => 'stream'; + + @override + String get wildcardMentionTopic => 'topic'; + + @override + String get wildcardMentionChannelDescription => 'Notify channel'; + + @override + String get wildcardMentionStreamDescription => 'Notify stream'; + + @override + String get wildcardMentionAllDmDescription => 'Notify recipients'; + + @override + String get wildcardMentionTopicDescription => 'Notify topic'; + + @override + String get messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get messageNotSentLabel => 'MESSAGE NOT SENT'; + + @override + String pollVoterNames(String voterNames) { + return '($voterNames)'; + } + + @override + String get themeSettingTitle => 'THEME'; + + @override + String get themeSettingDark => 'Dark'; + + @override + String get themeSettingLight => 'Light'; + + @override + String get themeSettingSystem => 'System'; + + @override + String get openLinksWithInAppBrowser => 'Open links with in-app browser'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get initialAnchorSettingTitle => 'Open message feeds at'; + + @override + String get initialAnchorSettingDescription => + 'You can choose whether message feeds open at your first unread message or at the newest messages.'; + + @override + String get initialAnchorSettingFirstUnreadAlways => 'First unread message'; + + @override + String get initialAnchorSettingFirstUnreadConversations => + 'First unread message in conversation views, newest message elsewhere'; + + @override + String get initialAnchorSettingNewestAlways => 'Newest message'; + + @override + String get markReadOnScrollSettingTitle => 'Mark messages as read on scroll'; + + @override + String get markReadOnScrollSettingDescription => + 'When scrolling through messages, should they automatically be marked as read?'; + + @override + String get markReadOnScrollSettingAlways => 'Always'; + + @override + String get markReadOnScrollSettingNever => 'Never'; + + @override + String get markReadOnScrollSettingConversations => + 'Only in conversation views'; + + @override + String get markReadOnScrollSettingConversationsDescription => + 'Messages will be automatically marked as read only when viewing a single topic or direct message conversation.'; + + @override + String get experimentalFeatureSettingsPageTitle => 'Experimental features'; + + @override + String get experimentalFeatureSettingsWarning => + 'These options enable features which are still under development and not ready. They may not work, and may cause issues in other areas of the app.\n\nThe purpose of these settings is for experimentation by people working on developing Zulip.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountNotFound => + 'The account associated with this notification could not be found.'; + + @override + String get errorReactionAddingFailedTitle => 'Adding reaction failed'; + + @override + String get errorReactionRemovingFailedTitle => 'Removing reaction failed'; + + @override + String get errorSharingTitle => 'Failed to share content'; + + @override + String get errorSharingAccountNotLoggedIn => + 'There is no account logged in. Please log in to an account and try again.'; + + @override + String get emojiReactionsMore => 'more'; + + @override + String get emojiPickerSearchEmoji => 'Search emoji'; + + @override + String get noEarlierMessages => 'No earlier messages'; + + @override + String get revealButtonLabel => 'Reveal message'; + + @override + String get mutedUser => 'Muted user'; + + @override + String get scrollToBottomTooltip => 'Scroll to bottom'; + + @override + String get appVersionUnknownPlaceholder => '(…)'; + + @override + String get zulipAppTitle => 'Zulip'; +} diff --git a/lib/generated/l10n/zulip_localizations_hu.dart b/lib/generated/l10n/zulip_localizations_hu.dart new file mode 100644 index 0000000000..4e3da8f3ef --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_hu.dart @@ -0,0 +1,1167 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Hungarian (`hu`). +class ZulipLocalizationsHu extends ZulipLocalizations { + ZulipLocalizationsHu([String locale = 'hu']) : super(locale); + + @override + String get aboutPageTitle => 'About Zulip'; + + @override + String get aboutPageAppVersion => 'App version'; + + @override + String get aboutPageOpenSourceLicenses => 'Open-source licenses'; + + @override + String get aboutPageTapToView => 'Tap to view'; + + @override + String get upgradeWelcomeDialogTitle => 'Welcome to the new Zulip app!'; + + @override + String get upgradeWelcomeDialogMessage => + 'You’ll find a familiar experience in a faster, sleeker package.'; + + @override + String get upgradeWelcomeDialogLinkText => + 'Check out the announcement blog post!'; + + @override + String get upgradeWelcomeDialogDismiss => 'Let\'s go'; + + @override + String get chooseAccountPageTitle => 'Choose account'; + + @override + String get settingsPageTitle => 'Settings'; + + @override + String get switchAccountButton => 'Switch account'; + + @override + String tryAnotherAccountMessage(Object url) { + return 'Your account at $url is taking a while to load.'; + } + + @override + String get tryAnotherAccountButton => 'Try another account'; + + @override + String get chooseAccountPageLogOutButton => 'Log out'; + + @override + String get logOutConfirmationDialogTitle => 'Log out?'; + + @override + String get logOutConfirmationDialogMessage => + 'To use this account in the future, you will have to re-enter the URL for your organization and your account information.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Log out'; + + @override + String get chooseAccountButtonAddAnAccount => 'Add an account'; + + @override + String get navButtonAllChannels => 'All channels'; + + @override + String get allChannelsPageTitle => 'All channels'; + + @override + String get allChannelsEmptyPlaceholder => + 'There are no channels you can view in this organization.'; + + @override + String get profileButtonSendDirectMessage => 'Send direct message'; + + @override + String get errorCouldNotShowUserProfile => 'Could not show user profile.'; + + @override + String get permissionsNeededTitle => 'Permissions needed'; + + @override + String get permissionsNeededOpenSettings => 'Open settings'; + + @override + String get permissionsDeniedCameraAccess => + 'To upload an image, please grant Zulip additional permissions in Settings.'; + + @override + String get permissionsDeniedReadExternalStorage => + 'To upload files, please grant Zulip additional permissions in Settings.'; + + @override + String get actionSheetOptionSubscribe => 'Subscribe'; + + @override + String get subscribeFailedTitle => 'Failed to subscribe'; + + @override + String get actionSheetOptionMarkChannelAsRead => 'Mark channel as read'; + + @override + String get actionSheetOptionCopyChannelLink => 'Copy link to channel'; + + @override + String get actionSheetOptionListOfTopics => 'List of topics'; + + @override + String get actionSheetOptionChannelFeed => 'Channel feed'; + + @override + String get actionSheetOptionUnsubscribe => 'Unsubscribe'; + + @override + String unsubscribeConfirmationDialogTitle(String channelName) { + return 'Unsubscribe from $channelName?'; + } + + @override + String get unsubscribeConfirmationDialogMessageCannotResubscribe => + 'Once you leave this channel, you will not be able to rejoin.'; + + @override + String get unsubscribeConfirmationDialogConfirmButton => 'Unsubscribe'; + + @override + String get unsubscribeFailedTitle => 'Failed to unsubscribe'; + + @override + String get actionSheetOptionMuteTopic => 'Mute topic'; + + @override + String get actionSheetOptionUnmuteTopic => 'Unmute topic'; + + @override + String get actionSheetOptionFollowTopic => 'Follow topic'; + + @override + String get actionSheetOptionUnfollowTopic => 'Unfollow topic'; + + @override + String get actionSheetOptionResolveTopic => 'Mark as resolved'; + + @override + String get actionSheetOptionUnresolveTopic => 'Mark as unresolved'; + + @override + String get errorResolveTopicFailedTitle => 'Failed to mark topic as resolved'; + + @override + String get errorUnresolveTopicFailedTitle => + 'Failed to mark topic as unresolved'; + + @override + String get actionSheetOptionSeeWhoReacted => 'See who reacted'; + + @override + String get seeWhoReactedSheetNoReactions => 'This message has no reactions.'; + + @override + String seeWhoReactedSheetHeaderLabel(int num) { + return 'Emoji reactions ($num total)'; + } + + @override + String seeWhoReactedSheetEmojiNameWithVoteCount(String emojiName, int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num votes', + one: '1 vote', + ); + return '$emojiName: $_temp0'; + } + + @override + String seeWhoReactedSheetUserListLabel(String emojiName, int num) { + return 'Votes for $emojiName ($num)'; + } + + @override + String get actionSheetOptionViewReadReceipts => 'View read receipts'; + + @override + String get actionSheetReadReceipts => 'Read receipts'; + + @override + String actionSheetReadReceiptsReadCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'This message has been read by $count people:', + one: 'This message has been read by $count person:', + ); + return '$_temp0'; + } + + @override + String get actionSheetReadReceiptsZeroReadCount => + 'No one has read this message yet.'; + + @override + String get actionSheetReadReceiptsErrorReadCount => + 'Failed to load read receipts.'; + + @override + String get actionSheetOptionCopyMessageText => 'Copy message text'; + + @override + String get actionSheetOptionCopyMessageLink => 'Copy link to message'; + + @override + String get actionSheetOptionMarkAsUnread => 'Mark as unread from here'; + + @override + String get actionSheetOptionHideMutedMessage => 'Hide muted message again'; + + @override + String get actionSheetOptionShare => 'Share'; + + @override + String get actionSheetOptionQuoteMessage => 'Quote message'; + + @override + String get actionSheetOptionStarMessage => 'Star message'; + + @override + String get actionSheetOptionUnstarMessage => 'Unstar message'; + + @override + String get actionSheetOptionEditMessage => 'Edit message'; + + @override + String get actionSheetOptionDeleteMessage => 'Delete message'; + + @override + String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + + @override + String get deleteMessageConfirmationDialogMessage => + 'Deleting a message permanently removes it for everyone.'; + + @override + String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + + @override + String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + + @override + String get actionSheetOptionMarkTopicAsRead => 'Mark topic as read'; + + @override + String get actionSheetOptionCopyTopicLink => 'Copy link to topic'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Something went wrong'; + + @override + String get errorWebAuthOperationalError => 'An unexpected error occurred.'; + + @override + String get errorAccountLoggedInTitle => 'Account already logged in'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'The account $email at $server is already in your list of accounts.'; + } + + @override + String get errorCouldNotFetchMessageSource => + 'Could not fetch message source.'; + + @override + String get errorCouldNotAccessUploadedFileTitle => + 'Could not access uploaded file'; + + @override + String get errorCopyingFailed => 'Copying failed'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Failed to upload file: $filename'; + } + + @override + String filenameAndSizeInMiB(String filename, String size) { + return '$filename: $size MiB'; + } + + @override + String errorFilesTooLarge( + int num, + int maxFileUploadSizeMib, + String listMessage, + ) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num files are', + one: 'File is', + ); + return '$_temp0 larger than the server\'s limit of $maxFileUploadSizeMib MiB and will not be uploaded:\n\n$listMessage'; + } + + @override + String errorFilesTooLargeTitle(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: 'Files', + one: 'File', + ); + return '$_temp0 too large'; + } + + @override + String get errorLoginInvalidInputTitle => 'Invalid input'; + + @override + String get errorLoginFailedTitle => 'Login failed'; + + @override + String get errorMessageNotSent => 'Message not sent'; + + @override + String get errorMessageEditNotSaved => 'Message not saved'; + + @override + String errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorCouldNotConnectTitle => 'Could not connect'; + + @override + String get errorMessageDoesNotSeemToExist => + 'That message does not seem to exist.'; + + @override + String get errorQuotationFailed => 'Quotation failed'; + + @override + String errorServerMessage(String message) { + return 'The server said:\n\n$message'; + } + + @override + String get errorConnectingToServerShort => + 'Error connecting to Zulip. Retrying…'; + + @override + String errorConnectingToServerDetails(String serverUrl, String error) { + return 'Error connecting to Zulip at $serverUrl. Will retry:\n\n$error'; + } + + @override + String get errorHandlingEventTitle => + 'Error handling a Zulip event. Retrying connection…'; + + @override + String errorHandlingEventDetails( + String serverUrl, + String error, + String event, + ) { + return 'Error handling a Zulip event from $serverUrl; will retry.\n\nError: $error\n\nEvent: $event'; + } + + @override + String get errorCouldNotOpenLinkTitle => 'Unable to open link'; + + @override + String errorCouldNotOpenLink(String url) { + return 'Link could not be opened: $url'; + } + + @override + String get errorMuteTopicFailed => 'Failed to mute topic'; + + @override + String get errorUnmuteTopicFailed => 'Failed to unmute topic'; + + @override + String get errorFollowTopicFailed => 'Failed to follow topic'; + + @override + String get errorUnfollowTopicFailed => 'Failed to unfollow topic'; + + @override + String get errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Failed to star message'; + + @override + String get errorUnstarMessageFailedTitle => 'Failed to unstar message'; + + @override + String get errorCouldNotEditMessageTitle => 'Could not edit message'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message link copied'; + + @override + String get successTopicLinkCopied => 'Topic link copied'; + + @override + String get successChannelLinkCopied => 'Channel link copied'; + + @override + String get errorBannerDeactivatedDmLabel => + 'You cannot send messages to deactivated users.'; + + @override + String get errorBannerCannotPostInChannelLabel => + 'You do not have permission to post in this channel.'; + + @override + String get composeBoxBannerLabelUnsubscribedWhenCannotSend => + 'New messages will not appear automatically.'; + + @override + String get composeBoxBannerButtonRefresh => 'Refresh'; + + @override + String get composeBoxBannerButtonSubscribe => 'Subscribe'; + + @override + String get composeBoxBannerLabelEditMessage => 'Edit message'; + + @override + String get composeBoxBannerButtonCancel => 'Cancel'; + + @override + String get composeBoxBannerButtonSave => 'Save'; + + @override + String get editAlreadyInProgressTitle => 'Cannot edit message'; + + @override + String get editAlreadyInProgressMessage => + 'An edit is already in progress. Please wait for it to complete.'; + + @override + String get savingMessageEditLabel => 'SAVING EDIT…'; + + @override + String get savingMessageEditFailedLabel => 'EDIT NOT SAVED'; + + @override + String get discardDraftConfirmationDialogTitle => + 'Discard the message you’re writing?'; + + @override + String get discardDraftForEditConfirmationDialogMessage => + 'When you edit a message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftForOutboxConfirmationDialogMessage => + 'When you restore an unsent message, the content that was previously in the compose box is discarded.'; + + @override + String get discardDraftConfirmationDialogConfirmButton => 'Discard'; + + @override + String get composeBoxAttachFilesTooltip => 'Attach files'; + + @override + String get composeBoxAttachMediaTooltip => 'Attach images or videos'; + + @override + String get composeBoxAttachFromCameraTooltip => 'Take a photo'; + + @override + String get composeBoxGenericContentHint => 'Type a message'; + + @override + String get newDmSheetComposeButtonLabel => 'Compose'; + + @override + String get newDmSheetScreenTitle => 'New DM'; + + @override + String get newDmFabButtonLabel => 'New DM'; + + @override + String get newDmSheetSearchHintEmpty => 'Add one or more users'; + + @override + String get newDmSheetSearchHintSomeSelected => 'Add another user…'; + + @override + String get newDmSheetNoUsersFound => 'No users found'; + + @override + String composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Write yourself a note'; + + @override + String composeBoxChannelContentHint(String destination) { + return 'Message $destination'; + } + + @override + String get preparingEditMessageContentInput => 'Preparing…'; + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get unknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxEnterTopicOrSkipHintText(String defaultTopicName) { + return 'Enter a topic (skip for “$defaultTopicName”)'; + } + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String composeBoxLoadingMessage(int messageId) { + return '(loading message $messageId)'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String get dmsWithYourselfPageTitle => 'DMs with yourself'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String dmsWithOthersPageTitle(String others) { + return 'DMs with $others'; + } + + @override + String get emptyMessageList => 'There are no messages here.'; + + @override + String get emptyMessageListSearch => 'No search results.'; + + @override + String get messageListGroupYouWithYourself => 'Messages with yourself'; + + @override + String get contentValidationErrorTooLong => + 'Message length shouldn\'t be greater than 10000 characters.'; + + @override + String get contentValidationErrorEmpty => 'You have nothing to send!'; + + @override + String get contentValidationErrorQuoteAndReplyInProgress => + 'Please wait for the quotation to complete.'; + + @override + String get contentValidationErrorUploadInProgress => + 'Please wait for the upload to complete.'; + + @override + String get dialogCancel => 'Cancel'; + + @override + String get dialogContinue => 'Continue'; + + @override + String get dialogClose => 'Close'; + + @override + String get errorDialogLearnMore => 'Learn more'; + + @override + String get errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @override + String get lightboxVideoCurrentPosition => 'Current position'; + + @override + String get lightboxVideoDuration => 'Video duration'; + + @override + String get loginPageTitle => 'Log in'; + + @override + String get loginFormSubmitLabel => 'Log in'; + + @override + String get loginMethodDivider => 'OR'; + + @override + String signInWithFoo(String method) { + return 'Sign in with $method'; + } + + @override + String get loginAddAnAccountPageTitle => 'Add an account'; + + @override + String get loginServerUrlLabel => 'Your Zulip server URL'; + + @override + String get loginHidePassword => 'Hide password'; + + @override + String get loginEmailLabel => 'Email address'; + + @override + String get loginErrorMissingEmail => 'Please enter your email.'; + + @override + String get loginPasswordLabel => 'Password'; + + @override + String get loginErrorMissingPassword => 'Please enter your password.'; + + @override + String get loginUsernameLabel => 'Username'; + + @override + String get loginErrorMissingUsername => 'Please enter your username.'; + + @override + String get topicValidationErrorTooLong => + 'Topic length shouldn\'t be greater than 60 characters.'; + + @override + String get topicValidationErrorMandatoryButEmpty => + 'Topics are required in this organization.'; + + @override + String get errorContentNotInsertedTitle => 'Content not inserted'; + + @override + String get errorContentToInsertIsEmpty => + 'The file to be inserted is empty or cannot be accessed.'; + + @override + String errorServerVersionUnsupportedMessage( + String url, + String zulipVersion, + String minSupportedZulipVersion, + ) { + return '$url is running Zulip Server $zulipVersion, which is unsupported. The minimum supported version is Zulip Server $minSupportedZulipVersion.'; + } + + @override + String errorInvalidApiKeyMessage(String url) { + return 'Your account at $url could not be authenticated. Please try logging in again or use another account.'; + } + + @override + String get errorInvalidResponse => 'The server sent an invalid response.'; + + @override + String get errorNetworkRequestFailed => 'Network request failed'; + + @override + String errorMalformedResponse(int httpStatus) { + return 'Server gave malformed response; HTTP status $httpStatus'; + } + + @override + String errorMalformedResponseWithCause(int httpStatus, String details) { + return 'Server gave malformed response; HTTP status $httpStatus; $details'; + } + + @override + String errorRequestFailed(int httpStatus) { + return 'Network request failed: HTTP status $httpStatus'; + } + + @override + String get errorVideoPlayerFailed => 'Unable to play the video.'; + + @override + String get serverUrlValidationErrorEmpty => 'Please enter a URL.'; + + @override + String get serverUrlValidationErrorInvalidUrl => 'Please enter a valid URL.'; + + @override + String get serverUrlValidationErrorNoUseEmail => + 'Please enter the server URL, not your email.'; + + @override + String get serverUrlValidationErrorUnsupportedScheme => + 'The server URL must start with http:// or https://.'; + + @override + String get spoilerDefaultHeaderText => 'Spoiler'; + + @override + String get markAllAsReadLabel => 'Mark all messages as read'; + + @override + String markAsReadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as read.'; + } + + @override + String get markAsReadInProgress => 'Marking messages as read…'; + + @override + String get errorMarkAsReadFailedTitle => 'Mark as read failed'; + + @override + String markAsUnreadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num messages', + one: '1 message', + ); + return 'Marked $_temp0 as unread.'; + } + + @override + String get markAsUnreadInProgress => 'Marking messages as unread…'; + + @override + String get errorMarkAsUnreadFailedTitle => 'Mark as unread failed'; + + @override + String get today => 'Today'; + + @override + String get yesterday => 'Yesterday'; + + @override + String get userActiveNow => 'Active now'; + + @override + String get userIdle => 'Idle'; + + @override + String userActiveMinutesAgo(int minutes) { + String _temp0 = intl.Intl.pluralLogic( + minutes, + locale: localeName, + other: '$minutes minutes', + one: '1 minute', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveHoursAgo(int hours) { + String _temp0 = intl.Intl.pluralLogic( + hours, + locale: localeName, + other: '$hours hours', + one: '1 hour', + ); + return 'Active $_temp0 ago'; + } + + @override + String get userActiveYesterday => 'Active yesterday'; + + @override + String userActiveDaysAgo(int days) { + String _temp0 = intl.Intl.pluralLogic( + days, + locale: localeName, + other: '$days days', + one: '1 day', + ); + return 'Active $_temp0 ago'; + } + + @override + String userActiveDate(String date) { + return 'Active $date'; + } + + @override + String get userNotActiveInYear => 'Not active in the last year'; + + @override + String get invisibleMode => 'Invisible mode'; + + @override + String get turnOnInvisibleModeErrorTitle => + 'Error turning on invisible mode. Please try again.'; + + @override + String get turnOffInvisibleModeErrorTitle => + 'Error turning off invisible mode. Please try again.'; + + @override + String get userRoleOwner => 'Owner'; + + @override + String get userRoleAdministrator => 'Administrator'; + + @override + String get userRoleModerator => 'Moderator'; + + @override + String get userRoleMember => 'Member'; + + @override + String get userRoleGuest => 'Guest'; + + @override + String get userRoleUnknown => 'Unknown'; + + @override + String get statusButtonLabelStatusSet => 'Status'; + + @override + String get statusButtonLabelStatusUnset => 'Set status'; + + @override + String get noStatusText => 'No status text'; + + @override + String get setStatusPageTitle => 'Set status'; + + @override + String get statusClearButtonLabel => 'Clear'; + + @override + String get statusSaveButtonLabel => 'Save'; + + @override + String get statusTextHint => 'Your status'; + + @override + String get userStatusBusy => 'Busy'; + + @override + String get userStatusInAMeeting => 'In a meeting'; + + @override + String get userStatusCommuting => 'Commuting'; + + @override + String get userStatusOutSick => 'Out sick'; + + @override + String get userStatusVacationing => 'Vacationing'; + + @override + String get userStatusWorkingRemotely => 'Working remotely'; + + @override + String get userStatusAtTheOffice => 'At the office'; + + @override + String get updateStatusErrorTitle => + 'Error updating user status. Please try again.'; + + @override + String get searchMessagesPageTitle => 'Search'; + + @override + String get searchMessagesHintText => 'Search'; + + @override + String get searchMessagesClearButtonTooltip => 'Clear'; + + @override + String get inboxPageTitle => 'Inbox'; + + @override + String get inboxEmptyPlaceholder => + 'There are no unread messages in your inbox. Use the buttons below to view the combined feed or list of channels.'; + + @override + String get recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get recentDmConversationsSectionHeader => 'Direct messages'; + + @override + String get recentDmConversationsEmptyPlaceholder => + 'You have no direct messages yet! Why not start the conversation?'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Starred messages'; + + @override + String get channelsPageTitle => 'Channels'; + + @override + String get channelsEmptyPlaceholder => + 'You’re not subscribed to any channels yet.'; + + @override + String channelsEmptyPlaceholderWithAllChannelsLink( + String allChannelsPageTitle, + ) { + return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + } + + @override + String get sharePageTitle => 'Share'; + + @override + String get mainMenuMyProfile => 'My profile'; + + @override + String get topicsButtonTooltip => 'Topics'; + + @override + String get channelFeedButtonTooltip => 'Channel feed'; + + @override + String notifGroupDmConversationLabel(String senderFullName, int numOthers) { + String _temp0 = intl.Intl.pluralLogic( + numOthers, + locale: localeName, + other: '$numOthers others', + one: '1 other', + ); + return '$senderFullName to you and $_temp0'; + } + + @override + String get pinnedSubscriptionsLabel => 'Pinned'; + + @override + String get unpinnedSubscriptionsLabel => 'Unpinned'; + + @override + String get notifSelfUser => 'You'; + + @override + String get reactedEmojiSelfUser => 'You'; + + @override + String get reactionChipsLabel => 'Reactions'; + + @override + String reactionChipLabel(String emojiName, String votes) { + return '$emojiName: $votes'; + } + + @override + String reactionChipVotesYouAndOthers(int otherUsersCount) { + String _temp0 = intl.Intl.pluralLogic( + otherUsersCount, + locale: localeName, + other: 'You and $otherUsersCount others', + one: 'You and 1 other', + ); + return '$_temp0'; + } + + @override + String onePersonTyping(String typist) { + return '$typist is typing…'; + } + + @override + String twoPeopleTyping(String typist, String otherTypist) { + return '$typist and $otherTypist are typing…'; + } + + @override + String get manyPeopleTyping => 'Several people are typing…'; + + @override + String get wildcardMentionAll => 'all'; + + @override + String get wildcardMentionEveryone => 'everyone'; + + @override + String get wildcardMentionChannel => 'channel'; + + @override + String get wildcardMentionStream => 'stream'; + + @override + String get wildcardMentionTopic => 'topic'; + + @override + String get wildcardMentionChannelDescription => 'Notify channel'; + + @override + String get wildcardMentionStreamDescription => 'Notify stream'; + + @override + String get wildcardMentionAllDmDescription => 'Notify recipients'; + + @override + String get wildcardMentionTopicDescription => 'Notify topic'; + + @override + String get messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get messageNotSentLabel => 'MESSAGE NOT SENT'; + + @override + String pollVoterNames(String voterNames) { + return '($voterNames)'; + } + + @override + String get themeSettingTitle => 'THEME'; + + @override + String get themeSettingDark => 'Dark'; + + @override + String get themeSettingLight => 'Light'; + + @override + String get themeSettingSystem => 'System'; + + @override + String get openLinksWithInAppBrowser => 'Open links with in-app browser'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get initialAnchorSettingTitle => 'Open message feeds at'; + + @override + String get initialAnchorSettingDescription => + 'You can choose whether message feeds open at your first unread message or at the newest messages.'; + + @override + String get initialAnchorSettingFirstUnreadAlways => 'First unread message'; + + @override + String get initialAnchorSettingFirstUnreadConversations => + 'First unread message in conversation views, newest message elsewhere'; + + @override + String get initialAnchorSettingNewestAlways => 'Newest message'; + + @override + String get markReadOnScrollSettingTitle => 'Mark messages as read on scroll'; + + @override + String get markReadOnScrollSettingDescription => + 'When scrolling through messages, should they automatically be marked as read?'; + + @override + String get markReadOnScrollSettingAlways => 'Always'; + + @override + String get markReadOnScrollSettingNever => 'Never'; + + @override + String get markReadOnScrollSettingConversations => + 'Only in conversation views'; + + @override + String get markReadOnScrollSettingConversationsDescription => + 'Messages will be automatically marked as read only when viewing a single topic or direct message conversation.'; + + @override + String get experimentalFeatureSettingsPageTitle => 'Experimental features'; + + @override + String get experimentalFeatureSettingsWarning => + 'These options enable features which are still under development and not ready. They may not work, and may cause issues in other areas of the app.\n\nThe purpose of these settings is for experimentation by people working on developing Zulip.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountNotFound => + 'The account associated with this notification could not be found.'; + + @override + String get errorReactionAddingFailedTitle => 'Adding reaction failed'; + + @override + String get errorReactionRemovingFailedTitle => 'Removing reaction failed'; + + @override + String get errorSharingTitle => 'Failed to share content'; + + @override + String get errorSharingAccountNotLoggedIn => + 'There is no account logged in. Please log in to an account and try again.'; + + @override + String get emojiReactionsMore => 'more'; + + @override + String get emojiPickerSearchEmoji => 'Search emoji'; + + @override + String get noEarlierMessages => 'No earlier messages'; + + @override + String get revealButtonLabel => 'Reveal message'; + + @override + String get mutedUser => 'Muted user'; + + @override + String get scrollToBottomTooltip => 'Scroll to bottom'; + + @override + String get appVersionUnknownPlaceholder => '(…)'; + + @override + String get zulipAppTitle => 'Zulip'; +} diff --git a/lib/generated/l10n/zulip_localizations_it.dart b/lib/generated/l10n/zulip_localizations_it.dart index e42ef1f08e..5d5dd0e278 100644 --- a/lib/generated/l10n/zulip_localizations_it.dart +++ b/lib/generated/l10n/zulip_localizations_it.dart @@ -68,10 +68,11 @@ class ZulipLocalizationsIt extends ZulipLocalizations { String get chooseAccountButtonAddAnAccount => 'Aggiungi un account'; @override - String get navButtonAllChannels => 'All channels'; + String get navButtonAllChannels => + 'Titolo per un pulsante di navigazione che apre la pagina \"Tutti i canali\".'; @override - String get allChannelsPageTitle => 'All channels'; + String get allChannelsPageTitle => 'Titolo per la pagina \"Tutti i canali\".'; @override String get allChannelsEmptyPlaceholder => @@ -444,7 +445,8 @@ class ZulipLocalizationsIt extends ZulipLocalizations { 'New messages will not appear automatically.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => + 'Etichetta il testo per il pulsante \"Aggiorna\" nel banner della casella di composizione quando visualizzi un canale a cui non sei iscritto.'; @override String get composeBoxBannerButtonSubscribe => 'Subscribe'; @@ -914,10 +916,12 @@ class ZulipLocalizationsIt extends ZulipLocalizations { 'Error updating user status. Please try again.'; @override - String get searchMessagesPageTitle => 'Search'; + String get searchMessagesPageTitle => + 'Titolo della pagina per la visualizzazione del messaggio \"Cerca\".'; @override - String get searchMessagesHintText => 'Search'; + String get searchMessagesHintText => + 'Testo di suggerimento per il campo di testo di ricerca del messaggio.'; @override String get searchMessagesClearButtonTooltip => 'Clear'; diff --git a/lib/generated/l10n/zulip_localizations_pl.dart b/lib/generated/l10n/zulip_localizations_pl.dart index c7c14cf77e..b038e14fed 100644 --- a/lib/generated/l10n/zulip_localizations_pl.dart +++ b/lib/generated/l10n/zulip_localizations_pl.dart @@ -127,7 +127,7 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get unsubscribeConfirmationDialogMessageCannotResubscribe => - 'Once you leave this channel, you will not be able to rejoin.'; + 'Opuszczając ten kanał utracisz możliwość ponownego przyłączenia.'; @override String get unsubscribeConfirmationDialogConfirmButton => 'Odsubskrybuj'; @@ -290,7 +290,7 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get errorCouldNotAccessUploadedFileTitle => - 'Could not access uploaded file'; + 'Brak dostępu do załadowanego pliku'; @override String get errorCopyingFailed => 'Nie udało się skopiować'; @@ -443,13 +443,13 @@ class ZulipLocalizationsPl extends ZulipLocalizations { @override String get composeBoxBannerLabelUnsubscribedWhenCannotSend => - 'New messages will not appear automatically.'; + 'Nowe wiadomości nie pojawią się z automatu.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => 'Odśwież'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'Subskrybuj'; @override String get composeBoxBannerLabelEditMessage => 'Zmień wiadomość'; @@ -528,7 +528,7 @@ class ZulipLocalizationsPl extends ZulipLocalizations { String get composeBoxGroupDmContentHint => 'Napisz do grupy'; @override - String get composeBoxSelfDmContentHint => 'Zanotuj coś na przyszłość'; + String get composeBoxSelfDmContentHint => 'Zostaw notatkę dla siebie'; @override String composeBoxChannelContentHint(String destination) { @@ -790,7 +790,7 @@ class ZulipLocalizationsPl extends ZulipLocalizations { String get yesterday => 'Wczoraj'; @override - String get userActiveNow => 'Dostępny'; + String get userActiveNow => 'Teraz dostępny'; @override String get userIdle => 'Bezczynny'; diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart index ae8ce816c4..e13c7cc1a6 100644 --- a/lib/generated/l10n/zulip_localizations_ru.dart +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -127,7 +127,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get unsubscribeConfirmationDialogMessageCannotResubscribe => - 'Once you leave this channel, you will not be able to rejoin.'; + 'Если вы покинете этот канал, вы не сможете к нему присоединиться.'; @override String get unsubscribeConfirmationDialogConfirmButton => 'Отписаться'; @@ -291,7 +291,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get errorCouldNotAccessUploadedFileTitle => - 'Could not access uploaded file'; + 'Не удалось получить доступ к загруженному файлу'; @override String get errorCopyingFailed => 'Сбой копирования'; @@ -445,13 +445,13 @@ class ZulipLocalizationsRu extends ZulipLocalizations { @override String get composeBoxBannerLabelUnsubscribedWhenCannotSend => - 'New messages will not appear automatically.'; + 'Новые сообщения не будут отображаться автоматически.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => 'Обновить'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'Подписаться'; @override String get composeBoxBannerLabelEditMessage => 'Редактирование сообщения'; @@ -529,7 +529,7 @@ class ZulipLocalizationsRu extends ZulipLocalizations { String get composeBoxGroupDmContentHint => 'Сообщение для группы'; @override - String get composeBoxSelfDmContentHint => 'Сделать заметку'; + String get composeBoxSelfDmContentHint => 'Написать себе записку'; @override String composeBoxChannelContentHint(String destination) { diff --git a/lib/generated/l10n/zulip_localizations_sl.dart b/lib/generated/l10n/zulip_localizations_sl.dart index 3e72b30aac..4c34d94983 100644 --- a/lib/generated/l10n/zulip_localizations_sl.dart +++ b/lib/generated/l10n/zulip_localizations_sl.dart @@ -67,14 +67,14 @@ class ZulipLocalizationsSl extends ZulipLocalizations { String get chooseAccountButtonAddAnAccount => 'Dodaj račun'; @override - String get navButtonAllChannels => 'All channels'; + String get navButtonAllChannels => 'Vsi kanali'; @override - String get allChannelsPageTitle => 'All channels'; + String get allChannelsPageTitle => 'Vsi kanali'; @override String get allChannelsEmptyPlaceholder => - 'There are no channels you can view in this organization.'; + 'V tej organizaciji ni kanalov, ki bi si jih lahko ogledali.'; @override String get profileButtonSendDirectMessage => 'Pošlji neposredno sporočilo'; @@ -125,7 +125,7 @@ class ZulipLocalizationsSl extends ZulipLocalizations { @override String get unsubscribeConfirmationDialogMessageCannotResubscribe => - 'Once you leave this channel, you will not be able to rejoin.'; + 'Ko zapustite kanal, se ne boste več mogli pridružiti nazaj.'; @override String get unsubscribeConfirmationDialogConfirmButton => 'Prekliči naročnino'; @@ -246,20 +246,20 @@ class ZulipLocalizationsSl extends ZulipLocalizations { String get actionSheetOptionEditMessage => 'Uredi sporočilo'; @override - String get actionSheetOptionDeleteMessage => 'Delete message'; + String get actionSheetOptionDeleteMessage => 'Izbriši sporočilo'; @override - String get deleteMessageConfirmationDialogTitle => 'Delete message?'; + String get deleteMessageConfirmationDialogTitle => 'Izbrišem sporočilo?'; @override String get deleteMessageConfirmationDialogMessage => - 'Deleting a message permanently removes it for everyone.'; + 'Brisanje sporočila ga trajno odstrani za vse.'; @override - String get deleteMessageConfirmationDialogConfirmButton => 'Delete'; + String get deleteMessageConfirmationDialogConfirmButton => 'Izbriši'; @override - String get errorDeleteMessageFailedTitle => 'Failed to delete message'; + String get errorDeleteMessageFailedTitle => 'Sporočila se ne da izbrisati'; @override String get actionSheetOptionMarkTopicAsRead => 'Označi temo kot prebrano'; @@ -288,7 +288,7 @@ class ZulipLocalizationsSl extends ZulipLocalizations { @override String get errorCouldNotAccessUploadedFileTitle => - 'Could not access uploaded file'; + 'Dostop do naložene datoteke ni mogoč'; @override String get errorCopyingFailed => 'Kopiranje ni uspelo'; @@ -455,13 +455,13 @@ class ZulipLocalizationsSl extends ZulipLocalizations { @override String get composeBoxBannerLabelUnsubscribedWhenCannotSend => - 'New messages will not appear automatically.'; + 'Nova sporočila se ne bodo prikazala samodejno.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => 'Osveži'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'Naroči se'; @override String get composeBoxBannerLabelEditMessage => 'Uredi sporočilo'; @@ -540,7 +540,7 @@ class ZulipLocalizationsSl extends ZulipLocalizations { String get composeBoxGroupDmContentHint => 'Skupinsko sporočilo'; @override - String get composeBoxSelfDmContentHint => 'Zapišite opombo zase'; + String get composeBoxSelfDmContentHint => 'Zapišite si opombo'; @override String composeBoxChannelContentHint(String destination) { @@ -979,7 +979,7 @@ class ZulipLocalizationsSl extends ZulipLocalizations { String channelsEmptyPlaceholderWithAllChannelsLink( String allChannelsPageTitle, ) { - return 'You’re not subscribed to any channels yet. Try going to $allChannelsPageTitle and joining some of them.'; + return 'Naročeni še niste na noben kanal. Poskusite odpreti $allChannelsPageTitle in se pridružiti kateremu od njih.'; } @override diff --git a/lib/generated/l10n/zulip_localizations_uk.dart b/lib/generated/l10n/zulip_localizations_uk.dart index 993cb65cdb..d9bc2ae98c 100644 --- a/lib/generated/l10n/zulip_localizations_uk.dart +++ b/lib/generated/l10n/zulip_localizations_uk.dart @@ -128,7 +128,7 @@ class ZulipLocalizationsUk extends ZulipLocalizations { @override String get unsubscribeConfirmationDialogMessageCannotResubscribe => - 'Once you leave this channel, you will not be able to rejoin.'; + 'Після того, як ви покинете цей канал, ви не зможете приєднатися знову.'; @override String get unsubscribeConfirmationDialogConfirmButton => 'Скасувати підписку'; @@ -289,7 +289,7 @@ class ZulipLocalizationsUk extends ZulipLocalizations { @override String get errorCouldNotAccessUploadedFileTitle => - 'Could not access uploaded file'; + 'Не вдалося отримати доступ до завантаженого файлу'; @override String get errorCopyingFailed => 'Помилка копіювання'; @@ -445,13 +445,13 @@ class ZulipLocalizationsUk extends ZulipLocalizations { @override String get composeBoxBannerLabelUnsubscribedWhenCannotSend => - 'New messages will not appear automatically.'; + 'Нові повідомлення не з’являтимуться автоматично.'; @override - String get composeBoxBannerButtonRefresh => 'Refresh'; + String get composeBoxBannerButtonRefresh => 'Оновити'; @override - String get composeBoxBannerButtonSubscribe => 'Subscribe'; + String get composeBoxBannerButtonSubscribe => 'Підписатися'; @override String get composeBoxBannerLabelEditMessage => 'Редагування повідомлення'; @@ -529,7 +529,7 @@ class ZulipLocalizationsUk extends ZulipLocalizations { String get composeBoxGroupDmContentHint => 'Написати групі'; @override - String get composeBoxSelfDmContentHint => 'Занотувати щось'; + String get composeBoxSelfDmContentHint => 'Напишіть собі записку'; @override String composeBoxChannelContentHint(String destination) { diff --git a/lib/generated/l10n/zulip_localizations_zh.dart b/lib/generated/l10n/zulip_localizations_zh.dart index 6d62f29892..9a5015cf01 100644 --- a/lib/generated/l10n/zulip_localizations_zh.dart +++ b/lib/generated/l10n/zulip_localizations_zh.dart @@ -1174,7 +1174,7 @@ class ZulipLocalizationsZhHansCn extends ZulipLocalizationsZh { String get aboutPageTitle => '关于 Zulip'; @override - String get aboutPageAppVersion => '应用程序版本'; + String get aboutPageAppVersion => 'App 版本'; @override String get aboutPageOpenSourceLicenses => '开源许可'; @@ -1226,6 +1226,15 @@ class ZulipLocalizationsZhHansCn extends ZulipLocalizationsZh { @override String get chooseAccountButtonAddAnAccount => '添加一个账号'; + @override + String get navButtonAllChannels => '所有频道'; + + @override + String get allChannelsPageTitle => '所有频道'; + + @override + String get allChannelsEmptyPlaceholder => '在该组织里你没有可以查看的频道。'; + @override String get profileButtonSendDirectMessage => '发送私信'; @@ -1260,6 +1269,9 @@ class ZulipLocalizationsZhHansCn extends ZulipLocalizationsZh { @override String get actionSheetOptionListOfTopics => '话题列表'; + @override + String get actionSheetOptionChannelFeed => '频道动态'; + @override String get actionSheetOptionUnsubscribe => '取消订阅'; @@ -1375,6 +1387,21 @@ class ZulipLocalizationsZhHansCn extends ZulipLocalizationsZh { @override String get actionSheetOptionEditMessage => '编辑消息'; + @override + String get actionSheetOptionDeleteMessage => '删除消息'; + + @override + String get deleteMessageConfirmationDialogTitle => '删除消息?'; + + @override + String get deleteMessageConfirmationDialogMessage => '对所有人永久删除消息。'; + + @override + String get deleteMessageConfirmationDialogConfirmButton => '删除'; + + @override + String get errorDeleteMessageFailedTitle => '删除消息失败'; + @override String get actionSheetOptionMarkTopicAsRead => '将话题标为已读'; @@ -2024,6 +2051,13 @@ class ZulipLocalizationsZhHansCn extends ZulipLocalizationsZh { @override String get channelsEmptyPlaceholder => '您还没有订阅任何频道。'; + @override + String channelsEmptyPlaceholderWithAllChannelsLink( + String allChannelsPageTitle, + ) { + return '你还没订阅任何频道。可以访问 $allChannelsPageTitle然后加入。'; + } + @override String get sharePageTitle => '分享'; @@ -2352,6 +2386,10 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { return '確定要取消訂閱 $channelName 嗎?'; } + @override + String get unsubscribeConfirmationDialogMessageCannotResubscribe => + '一旦您離開此頻道,將無法重新加入。'; + @override String get unsubscribeConfirmationDialogConfirmButton => '取消訂閱'; @@ -2497,6 +2535,9 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { @override String get errorCouldNotFetchMessageSource => '無法取得訊息來源。'; + @override + String get errorCouldNotAccessUploadedFileTitle => '無法存取上傳的檔案'; + @override String get errorCopyingFailed => '複製失敗'; @@ -2640,6 +2681,15 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { @override String get errorBannerCannotPostInChannelLabel => '您沒有權限在此頻道發佈訊息。'; + @override + String get composeBoxBannerLabelUnsubscribedWhenCannotSend => '新訊息將不會自動顯示。'; + + @override + String get composeBoxBannerButtonRefresh => '重新整理'; + + @override + String get composeBoxBannerButtonSubscribe => '訂閱'; + @override String get composeBoxBannerLabelEditMessage => '編輯訊息'; @@ -2714,7 +2764,7 @@ class ZulipLocalizationsZhHantTw extends ZulipLocalizationsZh { String get composeBoxGroupDmContentHint => '訊息群組'; @override - String get composeBoxSelfDmContentHint => '記下些什麼'; + String get composeBoxSelfDmContentHint => '寫給自己的備忘'; @override String composeBoxChannelContentHint(String destination) {