From c9c5f3d4d3a7154ae9b3cf0d12acaef1ed436f9c Mon Sep 17 00:00:00 2001 From: Greg Price Date: Wed, 11 Dec 2024 13:09:38 -0800 Subject: [PATCH] l10n: Update translations from Weblate! Fixes most of #276. (The remaining work is to have this process a bit more automated; that's in progress.) Thanks to Alex for doing the bulk of the actual work of setting this up. The steps to produce this were those in the current version of .github/workflows/update-translations.yml : git remote add weblate https://hosted.weblate.org/git/zulip/zulip-flutter/ git fetch weblate git merge --ff-only weblate/main plus: tools/check l10n --fix git add lib/generated/l10n/ git commit --amend Trying the app out, it seems to work great. If I switch my system language setting to Polish, I see the new Polish translations. Co-authored-by: Alex Vandiver --- assets/l10n/app_fr.arb | 1 + assets/l10n/app_ja.arb | 15 +- assets/l10n/app_pl.arb | 700 ++++++++++++++++++ assets/l10n/app_ru.arb | 150 ++++ lib/generated/l10n/zulip_localizations.dart | 13 +- .../l10n/zulip_localizations_fr.dart | 481 ++++++++++++ .../l10n/zulip_localizations_pl.dart | 481 ++++++++++++ .../l10n/zulip_localizations_ru.dart | 481 ++++++++++++ 8 files changed, 2315 insertions(+), 7 deletions(-) create mode 100644 assets/l10n/app_fr.arb create mode 100644 assets/l10n/app_pl.arb create mode 100644 assets/l10n/app_ru.arb create mode 100644 lib/generated/l10n/zulip_localizations_fr.dart create mode 100644 lib/generated/l10n/zulip_localizations_pl.dart create mode 100644 lib/generated/l10n/zulip_localizations_ru.dart diff --git a/assets/l10n/app_fr.arb b/assets/l10n/app_fr.arb new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/assets/l10n/app_fr.arb @@ -0,0 +1 @@ +{} diff --git a/assets/l10n/app_ja.arb b/assets/l10n/app_ja.arb index 72c2dc9603..a66aede69e 100644 --- a/assets/l10n/app_ja.arb +++ b/assets/l10n/app_ja.arb @@ -1,15 +1,20 @@ { "chooseAccountPageTitle": "アカウントを選択", + "@chooseAccountPageTitle": {}, "chooseAccountButtonAddAnAccount": "新しいアカウントを追加", + "@chooseAccountButtonAddAnAccount": {}, "profileButtonSendDirectMessage": "ダイレクトメッセージを送信", - "cameraAccessDeniedTitle": "権限が必要です", - "cameraAccessDeniedMessage": "画像をアップロードするには、「設定」で Zulip に追加の権限を許可してください。", - "cameraAccessDeniedButtonText": "設定を開く", - "subscribedToNChannels": "{num, plural, other{{num}つのチャンネルをフォローしています}}", + "@profileButtonSendDirectMessage": {}, "userRoleOwner": "オーナー", + "@userRoleOwner": {}, "userRoleAdministrator": "管理者", + "@userRoleAdministrator": {}, "userRoleModerator": "モデレータ", + "@userRoleModerator": {}, "userRoleMember": "メンバー", + "@userRoleMember": {}, "userRoleGuest": "ゲスト", - "userRoleUnknown": "不明" + "@userRoleGuest": {}, + "userRoleUnknown": "不明", + "@userRoleUnknown": {} } diff --git a/assets/l10n/app_pl.arb b/assets/l10n/app_pl.arb new file mode 100644 index 0000000000..dd20616c7a --- /dev/null +++ b/assets/l10n/app_pl.arb @@ -0,0 +1,700 @@ +{ + "errorConnectingToServerDetails": "Błąd połączenia z Zulip {serverUrl}. Spróbujmy ponownie:\n\n{error}", + "@errorConnectingToServerDetails": { + "description": "Dialog error message for a generic unknown error connecting to the server with details.", + "placeholders": { + "serverUrl": { + "type": "String", + "example": "http://example.com/" + }, + "error": { + "type": "String", + "example": "Invalid format" + } + } + }, + "aboutPageAppVersion": "Wydanie apki", + "@aboutPageAppVersion": { + "description": "Label for Zulip app version in About Zulip page" + }, + "aboutPageTapToView": "Dotknij, aby pokazać", + "@aboutPageTapToView": { + "description": "Item subtitle in About Zulip page to navigate to Licenses page" + }, + "logOutConfirmationDialogConfirmButton": "Wyloguj", + "@logOutConfirmationDialogConfirmButton": { + "description": "Label for the 'Log out' button on a confirmation dialog for logging out." + }, + "chooseAccountButtonAddAnAccount": "Dodaj konto", + "@chooseAccountButtonAddAnAccount": { + "description": "Label for ChooseAccountPage button to add an account" + }, + "profileButtonSendDirectMessage": "Wyślij wiadomość bezpośrednią", + "@profileButtonSendDirectMessage": { + "description": "Label for button in profile screen to navigate to DMs with the shown user." + }, + "permissionsNeededTitle": "Wymagane uprawnienia", + "@permissionsNeededTitle": { + "description": "Title for dialog asking the user to grant additional permissions." + }, + "permissionsNeededOpenSettings": "Otwórz ustawienia", + "@permissionsNeededOpenSettings": { + "description": "Button label for permissions dialog button that opens the system settings screen." + }, + "actionSheetOptionCopyMessageText": "Skopiuj tekst wiadomości", + "@actionSheetOptionCopyMessageText": { + "description": "Label for copy message text button on action sheet." + }, + "actionSheetOptionCopyMessageLink": "Skopiuj odnośnik do wiadomości", + "@actionSheetOptionCopyMessageLink": { + "description": "Label for copy message link button on action sheet." + }, + "actionSheetOptionShare": "Udostępnij", + "@actionSheetOptionShare": { + "description": "Label for share button on action sheet." + }, + "actionSheetOptionQuoteAndReply": "Odpowiedz cytując", + "@actionSheetOptionQuoteAndReply": { + "description": "Label for Quote and reply button on action sheet." + }, + "actionSheetOptionStarMessage": "Oznacz gwiazdką", + "@actionSheetOptionStarMessage": { + "description": "Label for star button on action sheet." + }, + "actionSheetOptionUnstarMessage": "Odbierz gwiazdkę", + "@actionSheetOptionUnstarMessage": { + "description": "Label for unstar button on action sheet." + }, + "errorWebAuthOperationalErrorTitle": "Coś poszło nie tak", + "@errorWebAuthOperationalErrorTitle": { + "description": "Error title when third-party authentication has an operational error (not necessarily caused by invalid credentials)." + }, + "actionSheetOptionMarkAsUnread": "Odtąd oznacz jako nieprzeczytane", + "@actionSheetOptionMarkAsUnread": { + "description": "Label for mark as unread button on action sheet." + }, + "logOutConfirmationDialogMessage": "Aby użyć tego konta należy wypełnić URL organizacji oraz dane konta.", + "@logOutConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for logging out." + }, + "permissionsDeniedCameraAccess": "Aby odebrać obraz Zulip musi uzyskać dodatkowe uprawnienia w Ustawieniach.", + "@permissionsDeniedCameraAccess": { + "description": "Message for dialog asking the user to grant permissions for camera access." + }, + "permissionsDeniedReadExternalStorage": "Aby odebrać pliki Zulip musi uzyskać dodatkowe uprawnienia w Ustawieniach.", + "@permissionsDeniedReadExternalStorage": { + "description": "Message for dialog asking the user to grant permissions for external storage read access." + }, + "errorWebAuthOperationalError": "Wystąpił niespodziewany błąd.", + "@errorWebAuthOperationalError": { + "description": "Error message when third-party authentication has an operational error (not necessarily caused by invalid credentials)." + }, + "errorAccountLoggedInTitle": "Konto już wylogowane", + "@errorAccountLoggedInTitle": { + "description": "Error title on attempting to log into an account that's already logged in." + }, + "errorAccountLoggedIn": "Konto {email} na {server} znajduje się już na liście dodanych kont.", + "@errorAccountLoggedIn": { + "description": "Error message on attempting to log into an account that's already logged in.", + "placeholders": { + "email": { + "type": "String", + "example": "user@example.com" + }, + "server": { + "type": "String", + "example": "https://example.com" + } + } + }, + "errorCouldNotFetchMessageSource": "Nie można uzyskać źródłowej wiadomości", + "@errorCouldNotFetchMessageSource": { + "description": "Error message when the source of a message could not be fetched." + }, + "errorCopyingFailed": "Nie udało się skopiować", + "@errorCopyingFailed": { + "description": "Error message when copying the text of a message to the user's system clipboard failed." + }, + "errorFilesTooLargeTitle": "{num, plural, =1{Plik} other{Pliki}} ponad limit", + "@errorFilesTooLargeTitle": { + "description": "Error title when attached files are too large in size.", + "placeholders": { + "num": { + "type": "int", + "example": "4" + } + } + }, + "errorLoginInvalidInputTitle": "Błędny wsad", + "@errorLoginInvalidInputTitle": { + "description": "Error title for login when input is invalid." + }, + "errorLoginFailedTitle": "Logowanie bez powodzenia", + "@errorLoginFailedTitle": { + "description": "Error title for login when signing into a Zulip server fails." + }, + "errorMessageNotSent": "Nie wysłano wiadomości", + "@errorMessageNotSent": { + "description": "Error message for compose box when a message could not be sent." + }, + "errorLoginCouldNotConnect": "Nie udało się połączyć z serwerem:\n{url}", + "@errorLoginCouldNotConnect": { + "description": "Error message when the app could not connect to the server.", + "placeholders": { + "url": { + "type": "String", + "example": "http://example.com/" + } + } + }, + "errorFilesTooLarge": "{num, plural, =1{Plik jest} other{{num} Pliki są}} ponad limit serwera {maxFileUploadSizeMib} MiB i nie zostaną przyjęte:\n\n{listMessage}", + "@errorFilesTooLarge": { + "description": "Error message when attached files are too large in size.", + "placeholders": { + "num": { + "type": "int", + "example": "2" + }, + "maxFileUploadSizeMib": { + "type": "int", + "example": "15" + }, + "listMessage": { + "type": "String", + "example": "foo.txt\nbar.txt" + } + } + }, + "errorServerMessage": "Odpowiedź serwera:\n\n{message}", + "@errorServerMessage": { + "description": "Error message that quotes an error from the server.", + "placeholders": { + "message": { + "type": "String", + "example": "Invalid format" + } + } + }, + "errorConnectingToServerShort": "Błąd połączenia z Zulip. Ponawiam…", + "@errorConnectingToServerShort": { + "description": "Short error message for a generic unknown error connecting to the server." + }, + "errorHandlingEventTitle": "Błąd obsługi zdarzenia Zulip. Ponnawiam połączenie…", + "@errorHandlingEventTitle": { + "description": "Error title on failing to handle a Zulip server event." + }, + "errorHandlingEventDetails": "Błąd zdarzenia Zulip z {serverUrl}; ponawiam.\n\nBłąd: {error}\n\nZdarzenie: {event}", + "@errorHandlingEventDetails": { + "description": "Error details on failing to handle a Zulip server event.", + "placeholders": { + "serverUrl": { + "type": "String", + "example": "https://chat.example.com" + }, + "error": { + "type": "String", + "example": "Unexpected null value" + }, + "event": { + "type": "String", + "example": "UpdateMessageEvent(id: 123, messageIds: [2345, 3456], newTopic: 'dinner')" + } + } + }, + "errorSharingFailed": "Udostępnianie bez powodzenia", + "@errorSharingFailed": { + "description": "Error message when sharing a message failed." + }, + "errorStarMessageFailedTitle": "Dodanie gwiazdki bez powodzenia", + "@errorStarMessageFailedTitle": { + "description": "Error title when starring a message failed." + }, + "errorUnstarMessageFailedTitle": "Odebranie gwiazdki bez powodzenia", + "@errorUnstarMessageFailedTitle": { + "description": "Error title when unstarring a message failed." + }, + "successLinkCopied": "Skopiowano odnośnik", + "@successLinkCopied": { + "description": "Success message after copy link action completed." + }, + "successMessageTextCopied": "Skopiowano tekst wiadomości", + "@successMessageTextCopied": { + "description": "Message when content of a message was copied to the user's system clipboard." + }, + "successMessageLinkCopied": "Skopiowano odnośnik wiadomości", + "@successMessageLinkCopied": { + "description": "Message when link of a message was copied to the user's system clipboard." + }, + "errorBannerCannotPostInChannelLabel": "Nie masz uprawnień do dodawania wpisów w tym kanale.", + "@errorBannerCannotPostInChannelLabel": { + "description": "Error-banner text replacing the compose box when you do not have permission to send a message to the channel." + }, + "composeBoxAttachFilesTooltip": "Dołącz pliki", + "@composeBoxAttachFilesTooltip": { + "description": "Tooltip for compose box icon to attach a file to the message." + }, + "composeBoxAttachMediaTooltip": "Dołącz obrazy lub wideo", + "@composeBoxAttachMediaTooltip": { + "description": "Tooltip for compose box icon to attach media to the message." + }, + "composeBoxAttachFromCameraTooltip": "Zrób zdjęcie", + "@composeBoxAttachFromCameraTooltip": { + "description": "Tooltip for compose box icon to attach an image from the camera to the message." + }, + "composeBoxGenericContentHint": "Wpisz wiadomość", + "@composeBoxGenericContentHint": { + "description": "Hint text for content input when sending a message." + }, + "composeBoxDmContentHint": "Napisz do @{user}", + "@composeBoxDmContentHint": { + "description": "Hint text for content input when sending a message to one other person.", + "placeholders": { + "user": { + "type": "String", + "example": "channel name" + } + } + }, + "composeBoxGroupDmContentHint": "Napisz do grupy", + "@composeBoxGroupDmContentHint": { + "description": "Hint text for content input when sending a message to a group." + }, + "composeBoxSelfDmContentHint": "Zanotuj coś na przyszłość", + "@composeBoxSelfDmContentHint": { + "description": "Hint text for content input when sending a message to yourself." + }, + "composeBoxChannelContentHint": "Wiadomość #{channel} > {topic}", + "@composeBoxChannelContentHint": { + "description": "Hint text for content input when sending a message to a channel", + "placeholders": { + "channel": { + "type": "String", + "example": "channel name" + }, + "topic": { + "type": "String", + "example": "topic name" + } + } + }, + "composeBoxUnknownChannelName": "(nieznany kanał)", + "@composeBoxUnknownChannelName": { + "description": "Replacement name for channel when it cannot be found in the store." + }, + "composeBoxTopicHintText": "Wątek", + "@composeBoxTopicHintText": { + "description": "Hint text for topic input widget in compose box." + }, + "composeBoxUploadingFilename": "Przekazywanie {filename}…", + "@composeBoxUploadingFilename": { + "description": "Placeholder in compose box showing the specified file is currently uploading.", + "placeholders": { + "filename": { + "type": "String", + "example": "file.txt" + } + } + }, + "unknownUserName": "(nieznany użytkownik)", + "@unknownUserName": { + "description": "Name placeholder to use for a user when we don't know their name." + }, + "messageListGroupYouAndOthers": "Ty i {others}", + "@messageListGroupYouAndOthers": { + "description": "Message list recipient header for a DM group with others.", + "placeholders": { + "others": { + "type": "String", + "example": "Alice, Bob" + } + } + }, + "contentValidationErrorTooLong": "Wiadomość nie może być dłuższa niż 10000 znaków.", + "@contentValidationErrorTooLong": { + "description": "Content validation error message when the message is too long." + }, + "dialogCancel": "Anuluj", + "@dialogCancel": { + "description": "Button label in dialogs to cancel." + }, + "dialogContinue": "Kontynuuj", + "@dialogContinue": { + "description": "Button label in dialogs to proceed." + }, + "errorDialogTitle": "Błąd", + "@errorDialogTitle": { + "description": "Generic title for error dialog." + }, + "snackBarDetails": "Szczegóły", + "@snackBarDetails": { + "description": "Button label for snack bar button that opens a dialog with more details." + }, + "lightboxCopyLinkTooltip": "Skopiuj odnośnik", + "@lightboxCopyLinkTooltip": { + "description": "Tooltip in lightbox for the copy link action." + }, + "loginPageTitle": "Zaloguj", + "@loginPageTitle": { + "description": "Title for login page." + }, + "loginFormSubmitLabel": "Zaloguj", + "@loginFormSubmitLabel": { + "description": "Button text to submit login credentials." + }, + "loginMethodDivider": "LUB", + "@loginMethodDivider": { + "description": "Text on the divider between the username/password form and the third-party login options. Uppercase (for languages with letter case)." + }, + "signInWithFoo": "Logowanie z {method}", + "@signInWithFoo": { + "description": "Button to use {method} to sign in to the app.", + "placeholders": { + "method": { + "type": "String", + "example": "Google" + } + } + }, + "loginAddAnAccountPageTitle": "Dodaj konto", + "@loginAddAnAccountPageTitle": { + "description": "Title for page to add a Zulip account." + }, + "loginServerUrlInputLabel": "URL serwera Zulip", + "@loginServerUrlInputLabel": { + "description": "Input label in login page for Zulip server URL entry." + }, + "loginHidePassword": "Ukryj hasło", + "@loginHidePassword": { + "description": "Icon label for button to hide password in input form." + }, + "loginEmailLabel": "Adres email", + "@loginEmailLabel": { + "description": "Label for input when an email is required to log in." + }, + "loginErrorMissingEmail": "Proszę podaj swój email.", + "@loginErrorMissingEmail": { + "description": "Error message when an empty email was provided." + }, + "loginPasswordLabel": "Hasło", + "@loginPasswordLabel": { + "description": "Label for password input field." + }, + "loginErrorMissingPassword": "Proszę wprowadź hasło.", + "@loginErrorMissingPassword": { + "description": "Error message when an empty password was provided." + }, + "loginUsernameLabel": "Użytkownik", + "@loginUsernameLabel": { + "description": "Label for input when a username is required to log in." + }, + "loginErrorMissingUsername": "Proszę podaj nazwę użytkownika.", + "@loginErrorMissingUsername": { + "description": "Error message when an empty username was provided." + }, + "topicValidationErrorMandatoryButEmpty": "Wątki są wymagane przez tę organizację.", + "@topicValidationErrorMandatoryButEmpty": { + "description": "Topic validation error when topic is required but was empty." + }, + "errorInvalidResponse": "Nieprawidłowa odpowiedź serwera", + "@errorInvalidResponse": { + "description": "Error message when an API call returned an invalid response." + }, + "errorVideoPlayerFailed": "Nie da rady odtworzyć wideo", + "@errorVideoPlayerFailed": { + "description": "Error message when a video fails to play." + }, + "serverUrlValidationErrorEmpty": "Proszę podaj URL.", + "@serverUrlValidationErrorEmpty": { + "description": "Error message when URL is empty" + }, + "serverUrlValidationErrorInvalidUrl": "Proszę podaj poprawny URL.", + "@serverUrlValidationErrorInvalidUrl": { + "description": "Error message when URL is not in a valid format." + }, + "serverUrlValidationErrorNoUseEmail": "Proszę podaj adres URL serwera a nie swój email.", + "@serverUrlValidationErrorNoUseEmail": { + "description": "Error message when URL looks like an email" + }, + "spoilerDefaultHeaderText": "Spoiler", + "@spoilerDefaultHeaderText": { + "description": "The default header text in a spoiler block ( https://zulip.com/help/spoilers )." + }, + "markAllAsReadLabel": "Oznacz wszystkie jako przeczytane", + "@markAllAsReadLabel": { + "description": "Button text to mark messages as read." + }, + "markAsReadComplete": "Oznaczono {num, plural, =1{1 wiadomość} other{{num} wiadomości}} jako przeczytane.", + "@markAsReadComplete": { + "description": "Message when marking messages as read has completed.", + "placeholders": { + "num": { + "type": "int", + "example": "4" + } + } + }, + "topicValidationErrorTooLong": "Tytuł nie może być dłuższy niż 60 znaków.", + "@topicValidationErrorTooLong": { + "description": "Topic validation error when topic is too long." + }, + "errorMalformedResponse": "Zdeforomowana odpowiedź serwera; status HTTP {httpStatus}", + "@errorMalformedResponse": { + "description": "Error message when an API call fails because we could not parse the response.", + "placeholders": { + "httpStatus": { + "type": "int", + "example": "200" + } + } + }, + "errorRequestFailed": "Błąd uzyskania sieci: status HTTP {httpStatus}", + "@errorRequestFailed": { + "description": "Error message when an API call fails.", + "placeholders": { + "httpStatus": { + "type": "int", + "example": "500" + } + } + }, + "errorMarkAsReadFailedTitle": "Oznaczanie jako przeczytane bez powodzenia", + "@errorMarkAsReadFailedTitle": { + "description": "Error title when mark as read action failed." + }, + "markAsUnreadInProgress": "Oznaczanie jako nieprzeczytane…", + "@markAsUnreadInProgress": { + "description": "Progress message when marking messages as unread." + }, + "errorMarkAsUnreadFailedTitle": "Oznaczanie jako nieprzeczytane bez powodzenia", + "@errorMarkAsUnreadFailedTitle": { + "description": "Error title when mark as unread action failed." + }, + "today": "Dzisiaj", + "@today": { + "description": "Term to use to reference the current day." + }, + "yesterday": "Wczoraj", + "@yesterday": { + "description": "Term to use to reference the previous day." + }, + "userRoleOwner": "Właściciel", + "@userRoleOwner": { + "description": "Label for UserRole.owner" + }, + "userRoleAdministrator": "Administrator", + "@userRoleAdministrator": { + "description": "Label for UserRole.administrator" + }, + "userRoleMember": "Członek", + "@userRoleMember": { + "description": "Label for UserRole.member" + }, + "userRoleGuest": "Gość", + "@userRoleGuest": { + "description": "Label for UserRole.guest" + }, + "userRoleUnknown": "Nieznany", + "@userRoleUnknown": { + "description": "Label for UserRole.unknown" + }, + "recentDmConversationsPageTitle": "Wiadomości bezpośrednie", + "@recentDmConversationsPageTitle": { + "description": "Title for the page with a list of DM conversations." + }, + "combinedFeedPageTitle": "Mieszany widok", + "@combinedFeedPageTitle": { + "description": "Page title for the 'Combined feed' message view." + }, + "starredMessagesPageTitle": "Wiadomości z gwiazdką", + "@starredMessagesPageTitle": { + "description": "Page title for the 'Starred messages' message view." + }, + "channelFeedButtonTooltip": "Strumień kanału", + "@channelFeedButtonTooltip": { + "description": "Tooltip for button to navigate to a given channel's feed" + }, + "notifGroupDmConversationLabel": "{senderFullName} do ciebie i {numOthers, plural, =1{1 innego} other{{numOthers} innych}}", + "@notifGroupDmConversationLabel": { + "description": "Label for a group DM conversation notification.", + "placeholders": { + "senderFullName": { + "type": "String", + "example": "Alice" + }, + "numOthers": { + "type": "int", + "example": "4" + } + } + }, + "notifSelfUser": "Ty", + "@notifSelfUser": { + "description": "Display name for the user themself, to show after replying in an Android notification" + }, + "onePersonTyping": "{typist} coś pisze…", + "@onePersonTyping": { + "description": "Text to display when there is one user typing.", + "placeholders": { + "typist": { + "type": "String", + "example": "Alice" + } + } + }, + "twoPeopleTyping": "{typist} i {otherTypist} coś piszą…", + "@twoPeopleTyping": { + "description": "Text to display when there are two users typing.", + "placeholders": { + "typist": { + "type": "String", + "example": "Alice" + }, + "otherTypist": { + "type": "String", + "example": "Bob" + } + } + }, + "manyPeopleTyping": "Wielu ludzi coś pisze…", + "@manyPeopleTyping": { + "description": "Text to display when there are multiple users typing." + }, + "messageIsEditedLabel": "ZMIENIONO", + "@messageIsEditedLabel": { + "description": "Label for an edited message. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)" + }, + "pollWidgetQuestionMissing": "Brak pytania.", + "@pollWidgetQuestionMissing": { + "description": "Text to display for a poll when the question is missing" + }, + "pollWidgetOptionsMissing": "Ta sonda nie ma opcji do wyboru.", + "@pollWidgetOptionsMissing": { + "description": "Text to display for a poll when it has no options" + }, + "errorNotificationOpenTitle": "Otwieranie powiadomienia bez powodzenia", + "@errorNotificationOpenTitle": { + "description": "Error title when notification opening fails" + }, + "errorNotificationOpenAccountMissing": "Konto związane z tym powiadomieniem już nie istnieje.", + "@errorNotificationOpenAccountMissing": { + "description": "Error message when the account associated with the notification is not found" + }, + "aboutPageOpenSourceLicenses": "Licencje otwartego źródła", + "@aboutPageOpenSourceLicenses": { + "description": "Item title in About Zulip page to navigate to Licenses page" + }, + "serverUrlValidationErrorUnsupportedScheme": "Adres URL serwera musi zaczynać się od http:// or https://.", + "@serverUrlValidationErrorUnsupportedScheme": { + "description": "Error message when URL has an unsupported scheme." + }, + "errorMessageDoesNotSeemToExist": "Taka wiadomość raczej nie istnieje.", + "@errorMessageDoesNotSeemToExist": { + "description": "Error message when loading a message that does not exist." + }, + "chooseAccountPageTitle": "Wybierz konto", + "@chooseAccountPageTitle": { + "description": "Title for the page to choose between Zulip accounts." + }, + "chooseAccountPageLogOutButton": "Wyloguj", + "@chooseAccountPageLogOutButton": { + "description": "Label for the 'Log out' button for an account on the choose-account page" + }, + "composeBoxSendTooltip": "Wyślij", + "@composeBoxSendTooltip": { + "description": "Tooltip for send button in compose box." + }, + "messageListGroupYouWithYourself": "Ty ze sobą", + "@messageListGroupYouWithYourself": { + "description": "Message list recipient header for a DM group that only includes yourself." + }, + "logOutConfirmationDialogTitle": "Wylogować?", + "@logOutConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for logging out." + }, + "aboutPageTitle": "O Zulip", + "@aboutPageTitle": { + "description": "Title for About Zulip page." + }, + "errorLoginCouldNotConnectTitle": "Nie można połączyć", + "@errorLoginCouldNotConnectTitle": { + "description": "Error title when the app could not connect to the server." + }, + "contentValidationErrorEmpty": "Nie masz nic do wysłania!", + "@contentValidationErrorEmpty": { + "description": "Content validation error message when the message is empty." + }, + "errorDialogContinue": "OK", + "@errorDialogContinue": { + "description": "Button label in error dialogs to acknowledge the error and close the dialog." + }, + "errorFailedToUploadFileTitle": "Nie udało się załadować pliku: {filename}", + "@errorFailedToUploadFileTitle": { + "description": "Error title when the specified file failed to upload.", + "placeholders": { + "filename": { + "type": "String", + "example": "file.txt" + } + } + }, + "errorMalformedResponseWithCause": "Zdeformowana odpowiedź serwera; status HTTP {httpStatus}; {details}", + "@errorMalformedResponseWithCause": { + "description": "Error message when an API call fails because we could not parse the response, with details of the failure.", + "placeholders": { + "httpStatus": { + "type": "int", + "example": "200" + }, + "details": { + "type": "String", + "example": "type 'Null' is not a subtype of type 'String' in type cast" + } + } + }, + "errorQuotationFailed": "Cytowanie bez powodzenia", + "@errorQuotationFailed": { + "description": "Error message when quoting a message failed." + }, + "errorBannerDeactivatedDmLabel": "Nie można wysyłać wiadomości do dezaktywowanych użytkowników.", + "@errorBannerDeactivatedDmLabel": { + "description": "Label text for error banner when sending a message to one or multiple deactivated users." + }, + "contentValidationErrorUploadInProgress": "Zaczekaj na zakończenie przekazywania.", + "@contentValidationErrorUploadInProgress": { + "description": "Content validation error message when attachments have not finished uploading." + }, + "messageIsMovedLabel": "PRZENIESIONO", + "@messageIsMovedLabel": { + "description": "Label for a moved message. (Use ALL CAPS for cased alphabets: Latin, Greek, Cyrillic, etc.)" + }, + "markAsUnreadComplete": "Oznaczono {num, plural, =1{1 wiadomość} other{{num} wiadomości}} jako nieprzeczytane.", + "@markAsUnreadComplete": { + "description": "Message when marking messages as unread has completed.", + "placeholders": { + "num": { + "type": "int", + "example": "4" + } + } + }, + "contentValidationErrorQuoteAndReplyInProgress": "Zaczekaj na zakończenie pobierania cytatu.", + "@contentValidationErrorQuoteAndReplyInProgress": { + "description": "Content validation error message when a quotation has not completed yet." + }, + "errorNetworkRequestFailed": "Dostęp do sieci bez powodzenia", + "@errorNetworkRequestFailed": { + "description": "Error message when a network request fails." + }, + "markAsReadInProgress": "Oznaczanie wiadomości jako przeczytane…", + "@markAsReadInProgress": { + "description": "Progress message when marking messages as read." + }, + "mentionsPageTitle": "Wzmianki", + "@mentionsPageTitle": { + "description": "Page title for the 'Mentions' message view." + }, + "userRoleModerator": "Moderator", + "@userRoleModerator": { + "description": "Label for UserRole.moderator" + } +} diff --git a/assets/l10n/app_ru.arb b/assets/l10n/app_ru.arb new file mode 100644 index 0000000000..7ec35d144a --- /dev/null +++ b/assets/l10n/app_ru.arb @@ -0,0 +1,150 @@ +{ + "aboutPageTitle": "О Zulip", + "@aboutPageTitle": { + "description": "Title for About Zulip page." + }, + "aboutPageAppVersion": "Версия приложения", + "@aboutPageAppVersion": { + "description": "Label for Zulip app version in About Zulip page" + }, + "aboutPageOpenSourceLicenses": "Лицензии открытого исходного кода", + "@aboutPageOpenSourceLicenses": { + "description": "Item title in About Zulip page to navigate to Licenses page" + }, + "aboutPageTapToView": "Нажмите для просмотра", + "@aboutPageTapToView": { + "description": "Item subtitle in About Zulip page to navigate to Licenses page" + }, + "chooseAccountPageTitle": "Выберите учетную запись", + "@chooseAccountPageTitle": { + "description": "Title for the page to choose between Zulip accounts." + }, + "chooseAccountPageLogOutButton": "Выход из системы", + "@chooseAccountPageLogOutButton": { + "description": "Label for the 'Log out' button for an account on the choose-account page" + }, + "logOutConfirmationDialogTitle": "Выйти из системы?", + "@logOutConfirmationDialogTitle": { + "description": "Title for a confirmation dialog for logging out." + }, + "logOutConfirmationDialogMessage": "Чтобы использовать эту учетную запись в будущем, вам придется заново ввести URL-адрес вашей организации и информацию о вашей учетной записи.", + "@logOutConfirmationDialogMessage": { + "description": "Message for a confirmation dialog for logging out." + }, + "logOutConfirmationDialogConfirmButton": "Выйти", + "@logOutConfirmationDialogConfirmButton": { + "description": "Label for the 'Log out' button on a confirmation dialog for logging out." + }, + "chooseAccountButtonAddAnAccount": "Добавить учетную запись", + "@chooseAccountButtonAddAnAccount": { + "description": "Label for ChooseAccountPage button to add an account" + }, + "profileButtonSendDirectMessage": "Отправить личное сообщение", + "@profileButtonSendDirectMessage": { + "description": "Label for button in profile screen to navigate to DMs with the shown user." + }, + "permissionsNeededTitle": "Требуются разрешения", + "@permissionsNeededTitle": { + "description": "Title for dialog asking the user to grant additional permissions." + }, + "permissionsNeededOpenSettings": "Открыть настройки", + "@permissionsNeededOpenSettings": { + "description": "Button label for permissions dialog button that opens the system settings screen." + }, + "permissionsDeniedCameraAccess": "Для загрузки изображения, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.", + "@permissionsDeniedCameraAccess": { + "description": "Message for dialog asking the user to grant permissions for camera access." + }, + "permissionsDeniedReadExternalStorage": "Для загрузки файлов, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.", + "@permissionsDeniedReadExternalStorage": { + "description": "Message for dialog asking the user to grant permissions for external storage read access." + }, + "actionSheetOptionCopyMessageText": "Скопировать текст сообщения", + "@actionSheetOptionCopyMessageText": { + "description": "Label for copy message text button on action sheet." + }, + "actionSheetOptionCopyMessageLink": "Скопировать ссылку на сообщение", + "@actionSheetOptionCopyMessageLink": { + "description": "Label for copy message link button on action sheet." + }, + "actionSheetOptionMarkAsUnread": "Отметить как непрочитанные начиная отсюда", + "@actionSheetOptionMarkAsUnread": { + "description": "Label for mark as unread button on action sheet." + }, + "actionSheetOptionShare": "Поделиться", + "@actionSheetOptionShare": { + "description": "Label for share button on action sheet." + }, + "actionSheetOptionQuoteAndReply": "Ответить с цитированием", + "@actionSheetOptionQuoteAndReply": { + "description": "Label for Quote and reply button on action sheet." + }, + "actionSheetOptionStarMessage": "Отметить сообщение", + "@actionSheetOptionStarMessage": { + "description": "Label for star button on action sheet." + }, + "actionSheetOptionUnstarMessage": "Снять отметку с сообщения", + "@actionSheetOptionUnstarMessage": { + "description": "Label for unstar button on action sheet." + }, + "errorWebAuthOperationalErrorTitle": "Что-то пошло не так", + "@errorWebAuthOperationalErrorTitle": { + "description": "Error title when third-party authentication has an operational error (not necessarily caused by invalid credentials)." + }, + "errorWebAuthOperationalError": "Произошла непредвиденная ошибка.", + "@errorWebAuthOperationalError": { + "description": "Error message when third-party authentication has an operational error (not necessarily caused by invalid credentials)." + }, + "errorAccountLoggedInTitle": "Вход в учетную запись уже выполнен", + "@errorAccountLoggedInTitle": { + "description": "Error title on attempting to log into an account that's already logged in." + }, + "errorAccountLoggedIn": "Учетная запись {email} на {server} уже присутствует.", + "@errorAccountLoggedIn": { + "description": "Error message on attempting to log into an account that's already logged in.", + "placeholders": { + "email": { + "type": "String", + "example": "user@example.com" + }, + "server": { + "type": "String", + "example": "https://example.com" + } + } + }, + "errorCouldNotFetchMessageSource": "Не удалось извлечь источник сообщения", + "@errorCouldNotFetchMessageSource": { + "description": "Error message when the source of a message could not be fetched." + }, + "errorCopyingFailed": "Сбой копирования", + "@errorCopyingFailed": { + "description": "Error message when copying the text of a message to the user's system clipboard failed." + }, + "errorFailedToUploadFileTitle": "Не удалось загрузить файл: {filename}", + "@errorFailedToUploadFileTitle": { + "description": "Error title when the specified file failed to upload.", + "placeholders": { + "filename": { + "type": "String", + "example": "file.txt" + } + } + }, + "errorStarMessageFailedTitle": "Не удалось отметить сообщение", + "@errorStarMessageFailedTitle": { + "description": "Error title when starring a message failed." + }, + "errorUnstarMessageFailedTitle": "Не удалось снять отметку с сообщения", + "@errorUnstarMessageFailedTitle": { + "description": "Error title when unstarring a message failed." + }, + "serverUrlValidationErrorUnsupportedScheme": "URL сервера должен начинаться с http:// или https://.", + "@serverUrlValidationErrorUnsupportedScheme": { + "description": "Error message when URL has an unsupported scheme." + }, + "starredMessagesPageTitle": "Отмеченные сообщения", + "@starredMessagesPageTitle": { + "description": "Page title for the 'Starred messages' message view." + } +} diff --git a/lib/generated/l10n/zulip_localizations.dart b/lib/generated/l10n/zulip_localizations.dart index b058af8f2b..53936a926d 100644 --- a/lib/generated/l10n/zulip_localizations.dart +++ b/lib/generated/l10n/zulip_localizations.dart @@ -7,7 +7,10 @@ import 'package:intl/intl.dart' as intl; import 'zulip_localizations_ar.dart'; import 'zulip_localizations_en.dart'; +import 'zulip_localizations_fr.dart'; import 'zulip_localizations_ja.dart'; +import 'zulip_localizations_pl.dart'; +import 'zulip_localizations_ru.dart'; // ignore_for_file: type=lint @@ -94,7 +97,10 @@ abstract class ZulipLocalizations { static const List supportedLocales = [ Locale('en'), Locale('ar'), - Locale('ja') + Locale('fr'), + Locale('ja'), + Locale('pl'), + Locale('ru') ]; /// Title for About Zulip page. @@ -905,7 +911,7 @@ class _ZulipLocalizationsDelegate extends LocalizationsDelegate ['ar', 'en', 'ja'].contains(locale.languageCode); + bool isSupported(Locale locale) => ['ar', 'en', 'fr', 'ja', 'pl', 'ru'].contains(locale.languageCode); @override bool shouldReload(_ZulipLocalizationsDelegate old) => false; @@ -918,7 +924,10 @@ ZulipLocalizations lookupZulipLocalizations(Locale locale) { switch (locale.languageCode) { case 'ar': return ZulipLocalizationsAr(); case 'en': return ZulipLocalizationsEn(); + case 'fr': return ZulipLocalizationsFr(); case 'ja': return ZulipLocalizationsJa(); + case 'pl': return ZulipLocalizationsPl(); + case 'ru': return ZulipLocalizationsRu(); } throw FlutterError( diff --git a/lib/generated/l10n/zulip_localizations_fr.dart b/lib/generated/l10n/zulip_localizations_fr.dart new file mode 100644 index 0000000000..0caaba81f9 --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_fr.dart @@ -0,0 +1,481 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for French (`fr`). +class ZulipLocalizationsFr extends ZulipLocalizations { + ZulipLocalizationsFr([String locale = 'fr']) : 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 chooseAccountPageTitle => 'Choose 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 profileButtonSendDirectMessage => 'Send direct message'; + + @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 actionSheetOptionCopyMessageText => 'Copy message text'; + + @override + String get actionSheetOptionCopyMessageLink => 'Copy link to message'; + + @override + String get actionSheetOptionMarkAsUnread => 'Mark as unread from here'; + + @override + String get actionSheetOptionShare => 'Share'; + + @override + String get actionSheetOptionQuoteAndReply => 'Quote and reply'; + + @override + String get actionSheetOptionStarMessage => 'Star message'; + + @override + String get actionSheetOptionUnstarMessage => 'Unstar message'; + + @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 errorCopyingFailed => 'Copying failed'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Failed to upload file: $filename'; + } + + @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 errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorLoginCouldNotConnectTitle => '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 errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Failed to star message'; + + @override + String get errorUnstarMessageFailedTitle => 'Failed to unstar message'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message 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 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 composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Jot down something'; + + @override + String composeBoxChannelContentHint(String channel, String topic) { + return 'Message #$channel > $topic'; + } + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get composeBoxUnknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String get messageListGroupYouWithYourself => 'You 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 errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @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 loginServerUrlInputLabel => '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 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 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 recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Starred messages'; + + @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 notifSelfUser => 'You'; + + @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 messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountMissing => 'The account associated with this notification no longer exists.'; +} diff --git a/lib/generated/l10n/zulip_localizations_pl.dart b/lib/generated/l10n/zulip_localizations_pl.dart new file mode 100644 index 0000000000..03d4c91302 --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_pl.dart @@ -0,0 +1,481 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Polish (`pl`). +class ZulipLocalizationsPl extends ZulipLocalizations { + ZulipLocalizationsPl([String locale = 'pl']) : super(locale); + + @override + String get aboutPageTitle => 'O Zulip'; + + @override + String get aboutPageAppVersion => 'Wydanie apki'; + + @override + String get aboutPageOpenSourceLicenses => 'Licencje otwartego źródła'; + + @override + String get aboutPageTapToView => 'Dotknij, aby pokazać'; + + @override + String get chooseAccountPageTitle => 'Wybierz konto'; + + @override + String get chooseAccountPageLogOutButton => 'Wyloguj'; + + @override + String get logOutConfirmationDialogTitle => 'Wylogować?'; + + @override + String get logOutConfirmationDialogMessage => 'Aby użyć tego konta należy wypełnić URL organizacji oraz dane konta.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Wyloguj'; + + @override + String get chooseAccountButtonAddAnAccount => 'Dodaj konto'; + + @override + String get profileButtonSendDirectMessage => 'Wyślij wiadomość bezpośrednią'; + + @override + String get permissionsNeededTitle => 'Wymagane uprawnienia'; + + @override + String get permissionsNeededOpenSettings => 'Otwórz ustawienia'; + + @override + String get permissionsDeniedCameraAccess => 'Aby odebrać obraz Zulip musi uzyskać dodatkowe uprawnienia w Ustawieniach.'; + + @override + String get permissionsDeniedReadExternalStorage => 'Aby odebrać pliki Zulip musi uzyskać dodatkowe uprawnienia w Ustawieniach.'; + + @override + String get actionSheetOptionCopyMessageText => 'Skopiuj tekst wiadomości'; + + @override + String get actionSheetOptionCopyMessageLink => 'Skopiuj odnośnik do wiadomości'; + + @override + String get actionSheetOptionMarkAsUnread => 'Odtąd oznacz jako nieprzeczytane'; + + @override + String get actionSheetOptionShare => 'Udostępnij'; + + @override + String get actionSheetOptionQuoteAndReply => 'Odpowiedz cytując'; + + @override + String get actionSheetOptionStarMessage => 'Oznacz gwiazdką'; + + @override + String get actionSheetOptionUnstarMessage => 'Odbierz gwiazdkę'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Coś poszło nie tak'; + + @override + String get errorWebAuthOperationalError => 'Wystąpił niespodziewany błąd.'; + + @override + String get errorAccountLoggedInTitle => 'Konto już wylogowane'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'Konto $email na $server znajduje się już na liście dodanych kont.'; + } + + @override + String get errorCouldNotFetchMessageSource => 'Nie można uzyskać źródłowej wiadomości'; + + @override + String get errorCopyingFailed => 'Nie udało się skopiować'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Nie udało się załadować pliku: $filename'; + } + + @override + String errorFilesTooLarge(int num, int maxFileUploadSizeMib, String listMessage) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num Pliki są', + one: 'Plik jest', + ); + return '$_temp0 ponad limit serwera $maxFileUploadSizeMib MiB i nie zostaną przyjęte:\n\n$listMessage'; + } + + @override + String errorFilesTooLargeTitle(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: 'Pliki', + one: 'Plik', + ); + return '$_temp0 ponad limit'; + } + + @override + String get errorLoginInvalidInputTitle => 'Błędny wsad'; + + @override + String get errorLoginFailedTitle => 'Logowanie bez powodzenia'; + + @override + String get errorMessageNotSent => 'Nie wysłano wiadomości'; + + @override + String errorLoginCouldNotConnect(String url) { + return 'Nie udało się połączyć z serwerem:\n$url'; + } + + @override + String get errorLoginCouldNotConnectTitle => 'Nie można połączyć'; + + @override + String get errorMessageDoesNotSeemToExist => 'Taka wiadomość raczej nie istnieje.'; + + @override + String get errorQuotationFailed => 'Cytowanie bez powodzenia'; + + @override + String errorServerMessage(String message) { + return 'Odpowiedź serwera:\n\n$message'; + } + + @override + String get errorConnectingToServerShort => 'Błąd połączenia z Zulip. Ponawiam…'; + + @override + String errorConnectingToServerDetails(String serverUrl, String error) { + return 'Błąd połączenia z Zulip $serverUrl. Spróbujmy ponownie:\n\n$error'; + } + + @override + String get errorHandlingEventTitle => 'Błąd obsługi zdarzenia Zulip. Ponnawiam połączenie…'; + + @override + String errorHandlingEventDetails(String serverUrl, String error, String event) { + return 'Błąd zdarzenia Zulip z $serverUrl; ponawiam.\n\nBłąd: $error\n\nZdarzenie: $event'; + } + + @override + String get errorSharingFailed => 'Udostępnianie bez powodzenia'; + + @override + String get errorStarMessageFailedTitle => 'Dodanie gwiazdki bez powodzenia'; + + @override + String get errorUnstarMessageFailedTitle => 'Odebranie gwiazdki bez powodzenia'; + + @override + String get successLinkCopied => 'Skopiowano odnośnik'; + + @override + String get successMessageTextCopied => 'Skopiowano tekst wiadomości'; + + @override + String get successMessageLinkCopied => 'Skopiowano odnośnik wiadomości'; + + @override + String get errorBannerDeactivatedDmLabel => 'Nie można wysyłać wiadomości do dezaktywowanych użytkowników.'; + + @override + String get errorBannerCannotPostInChannelLabel => 'Nie masz uprawnień do dodawania wpisów w tym kanale.'; + + @override + String get composeBoxAttachFilesTooltip => 'Dołącz pliki'; + + @override + String get composeBoxAttachMediaTooltip => 'Dołącz obrazy lub wideo'; + + @override + String get composeBoxAttachFromCameraTooltip => 'Zrób zdjęcie'; + + @override + String get composeBoxGenericContentHint => 'Wpisz wiadomość'; + + @override + String composeBoxDmContentHint(String user) { + return 'Napisz do @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Napisz do grupy'; + + @override + String get composeBoxSelfDmContentHint => 'Zanotuj coś na przyszłość'; + + @override + String composeBoxChannelContentHint(String channel, String topic) { + return 'Wiadomość #$channel > $topic'; + } + + @override + String get composeBoxSendTooltip => 'Wyślij'; + + @override + String get composeBoxUnknownChannelName => '(nieznany kanał)'; + + @override + String get composeBoxTopicHintText => 'Wątek'; + + @override + String composeBoxUploadingFilename(String filename) { + return 'Przekazywanie $filename…'; + } + + @override + String get unknownUserName => '(nieznany użytkownik)'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'Ty i $others'; + } + + @override + String get messageListGroupYouWithYourself => 'Ty ze sobą'; + + @override + String get contentValidationErrorTooLong => 'Wiadomość nie może być dłuższa niż 10000 znaków.'; + + @override + String get contentValidationErrorEmpty => 'Nie masz nic do wysłania!'; + + @override + String get contentValidationErrorQuoteAndReplyInProgress => 'Zaczekaj na zakończenie pobierania cytatu.'; + + @override + String get contentValidationErrorUploadInProgress => 'Zaczekaj na zakończenie przekazywania.'; + + @override + String get dialogCancel => 'Anuluj'; + + @override + String get dialogContinue => 'Kontynuuj'; + + @override + String get errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Błąd'; + + @override + String get snackBarDetails => 'Szczegóły'; + + @override + String get lightboxCopyLinkTooltip => 'Skopiuj odnośnik'; + + @override + String get loginPageTitle => 'Zaloguj'; + + @override + String get loginFormSubmitLabel => 'Zaloguj'; + + @override + String get loginMethodDivider => 'LUB'; + + @override + String signInWithFoo(String method) { + return 'Logowanie z $method'; + } + + @override + String get loginAddAnAccountPageTitle => 'Dodaj konto'; + + @override + String get loginServerUrlInputLabel => 'URL serwera Zulip'; + + @override + String get loginHidePassword => 'Ukryj hasło'; + + @override + String get loginEmailLabel => 'Adres email'; + + @override + String get loginErrorMissingEmail => 'Proszę podaj swój email.'; + + @override + String get loginPasswordLabel => 'Hasło'; + + @override + String get loginErrorMissingPassword => 'Proszę wprowadź hasło.'; + + @override + String get loginUsernameLabel => 'Użytkownik'; + + @override + String get loginErrorMissingUsername => 'Proszę podaj nazwę użytkownika.'; + + @override + String get topicValidationErrorTooLong => 'Tytuł nie może być dłuższy niż 60 znaków.'; + + @override + String get topicValidationErrorMandatoryButEmpty => 'Wątki są wymagane przez tę organizację.'; + + @override + String get errorInvalidResponse => 'Nieprawidłowa odpowiedź serwera'; + + @override + String get errorNetworkRequestFailed => 'Dostęp do sieci bez powodzenia'; + + @override + String errorMalformedResponse(int httpStatus) { + return 'Zdeforomowana odpowiedź serwera; status HTTP $httpStatus'; + } + + @override + String errorMalformedResponseWithCause(int httpStatus, String details) { + return 'Zdeformowana odpowiedź serwera; status HTTP $httpStatus; $details'; + } + + @override + String errorRequestFailed(int httpStatus) { + return 'Błąd uzyskania sieci: status HTTP $httpStatus'; + } + + @override + String get errorVideoPlayerFailed => 'Nie da rady odtworzyć wideo'; + + @override + String get serverUrlValidationErrorEmpty => 'Proszę podaj URL.'; + + @override + String get serverUrlValidationErrorInvalidUrl => 'Proszę podaj poprawny URL.'; + + @override + String get serverUrlValidationErrorNoUseEmail => 'Proszę podaj adres URL serwera a nie swój email.'; + + @override + String get serverUrlValidationErrorUnsupportedScheme => 'Adres URL serwera musi zaczynać się od http:// or https://.'; + + @override + String get spoilerDefaultHeaderText => 'Spoiler'; + + @override + String get markAllAsReadLabel => 'Oznacz wszystkie jako przeczytane'; + + @override + String markAsReadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num wiadomości', + one: '1 wiadomość', + ); + return 'Oznaczono $_temp0 jako przeczytane.'; + } + + @override + String get markAsReadInProgress => 'Oznaczanie wiadomości jako przeczytane…'; + + @override + String get errorMarkAsReadFailedTitle => 'Oznaczanie jako przeczytane bez powodzenia'; + + @override + String markAsUnreadComplete(int num) { + String _temp0 = intl.Intl.pluralLogic( + num, + locale: localeName, + other: '$num wiadomości', + one: '1 wiadomość', + ); + return 'Oznaczono $_temp0 jako nieprzeczytane.'; + } + + @override + String get markAsUnreadInProgress => 'Oznaczanie jako nieprzeczytane…'; + + @override + String get errorMarkAsUnreadFailedTitle => 'Oznaczanie jako nieprzeczytane bez powodzenia'; + + @override + String get today => 'Dzisiaj'; + + @override + String get yesterday => 'Wczoraj'; + + @override + String get userRoleOwner => 'Właściciel'; + + @override + String get userRoleAdministrator => 'Administrator'; + + @override + String get userRoleModerator => 'Moderator'; + + @override + String get userRoleMember => 'Członek'; + + @override + String get userRoleGuest => 'Gość'; + + @override + String get userRoleUnknown => 'Nieznany'; + + @override + String get recentDmConversationsPageTitle => 'Wiadomości bezpośrednie'; + + @override + String get combinedFeedPageTitle => 'Mieszany widok'; + + @override + String get mentionsPageTitle => 'Wzmianki'; + + @override + String get starredMessagesPageTitle => 'Wiadomości z gwiazdką'; + + @override + String get channelFeedButtonTooltip => 'Strumień kanału'; + + @override + String notifGroupDmConversationLabel(String senderFullName, int numOthers) { + String _temp0 = intl.Intl.pluralLogic( + numOthers, + locale: localeName, + other: '$numOthers innych', + one: '1 innego', + ); + return '$senderFullName do ciebie i $_temp0'; + } + + @override + String get notifSelfUser => 'Ty'; + + @override + String onePersonTyping(String typist) { + return '$typist coś pisze…'; + } + + @override + String twoPeopleTyping(String typist, String otherTypist) { + return '$typist i $otherTypist coś piszą…'; + } + + @override + String get manyPeopleTyping => 'Wielu ludzi coś pisze…'; + + @override + String get messageIsEditedLabel => 'ZMIENIONO'; + + @override + String get messageIsMovedLabel => 'PRZENIESIONO'; + + @override + String get pollWidgetQuestionMissing => 'Brak pytania.'; + + @override + String get pollWidgetOptionsMissing => 'Ta sonda nie ma opcji do wyboru.'; + + @override + String get errorNotificationOpenTitle => 'Otwieranie powiadomienia bez powodzenia'; + + @override + String get errorNotificationOpenAccountMissing => 'Konto związane z tym powiadomieniem już nie istnieje.'; +} diff --git a/lib/generated/l10n/zulip_localizations_ru.dart b/lib/generated/l10n/zulip_localizations_ru.dart new file mode 100644 index 0000000000..025f940e46 --- /dev/null +++ b/lib/generated/l10n/zulip_localizations_ru.dart @@ -0,0 +1,481 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'zulip_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Russian (`ru`). +class ZulipLocalizationsRu extends ZulipLocalizations { + ZulipLocalizationsRu([String locale = 'ru']) : super(locale); + + @override + String get aboutPageTitle => 'О Zulip'; + + @override + String get aboutPageAppVersion => 'Версия приложения'; + + @override + String get aboutPageOpenSourceLicenses => 'Лицензии открытого исходного кода'; + + @override + String get aboutPageTapToView => 'Нажмите для просмотра'; + + @override + String get chooseAccountPageTitle => 'Выберите учетную запись'; + + @override + String get chooseAccountPageLogOutButton => 'Выход из системы'; + + @override + String get logOutConfirmationDialogTitle => 'Выйти из системы?'; + + @override + String get logOutConfirmationDialogMessage => 'Чтобы использовать эту учетную запись в будущем, вам придется заново ввести URL-адрес вашей организации и информацию о вашей учетной записи.'; + + @override + String get logOutConfirmationDialogConfirmButton => 'Выйти'; + + @override + String get chooseAccountButtonAddAnAccount => 'Добавить учетную запись'; + + @override + String get profileButtonSendDirectMessage => 'Отправить личное сообщение'; + + @override + String get permissionsNeededTitle => 'Требуются разрешения'; + + @override + String get permissionsNeededOpenSettings => 'Открыть настройки'; + + @override + String get permissionsDeniedCameraAccess => 'Для загрузки изображения, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.'; + + @override + String get permissionsDeniedReadExternalStorage => 'Для загрузки файлов, пожалуйста, предоставьте Zulip дополнительные разрешения в настройках.'; + + @override + String get actionSheetOptionCopyMessageText => 'Скопировать текст сообщения'; + + @override + String get actionSheetOptionCopyMessageLink => 'Скопировать ссылку на сообщение'; + + @override + String get actionSheetOptionMarkAsUnread => 'Отметить как непрочитанные начиная отсюда'; + + @override + String get actionSheetOptionShare => 'Поделиться'; + + @override + String get actionSheetOptionQuoteAndReply => 'Ответить с цитированием'; + + @override + String get actionSheetOptionStarMessage => 'Отметить сообщение'; + + @override + String get actionSheetOptionUnstarMessage => 'Снять отметку с сообщения'; + + @override + String get errorWebAuthOperationalErrorTitle => 'Что-то пошло не так'; + + @override + String get errorWebAuthOperationalError => 'Произошла непредвиденная ошибка.'; + + @override + String get errorAccountLoggedInTitle => 'Вход в учетную запись уже выполнен'; + + @override + String errorAccountLoggedIn(String email, String server) { + return 'Учетная запись $email на $server уже присутствует.'; + } + + @override + String get errorCouldNotFetchMessageSource => 'Не удалось извлечь источник сообщения'; + + @override + String get errorCopyingFailed => 'Сбой копирования'; + + @override + String errorFailedToUploadFileTitle(String filename) { + return 'Не удалось загрузить файл: $filename'; + } + + @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 errorLoginCouldNotConnect(String url) { + return 'Failed to connect to server:\n$url'; + } + + @override + String get errorLoginCouldNotConnectTitle => '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 errorSharingFailed => 'Sharing failed'; + + @override + String get errorStarMessageFailedTitle => 'Не удалось отметить сообщение'; + + @override + String get errorUnstarMessageFailedTitle => 'Не удалось снять отметку с сообщения'; + + @override + String get successLinkCopied => 'Link copied'; + + @override + String get successMessageTextCopied => 'Message text copied'; + + @override + String get successMessageLinkCopied => 'Message 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 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 composeBoxDmContentHint(String user) { + return 'Message @$user'; + } + + @override + String get composeBoxGroupDmContentHint => 'Message group'; + + @override + String get composeBoxSelfDmContentHint => 'Jot down something'; + + @override + String composeBoxChannelContentHint(String channel, String topic) { + return 'Message #$channel > $topic'; + } + + @override + String get composeBoxSendTooltip => 'Send'; + + @override + String get composeBoxUnknownChannelName => '(unknown channel)'; + + @override + String get composeBoxTopicHintText => 'Topic'; + + @override + String composeBoxUploadingFilename(String filename) { + return 'Uploading $filename…'; + } + + @override + String get unknownUserName => '(unknown user)'; + + @override + String messageListGroupYouAndOthers(String others) { + return 'You and $others'; + } + + @override + String get messageListGroupYouWithYourself => 'You 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 errorDialogContinue => 'OK'; + + @override + String get errorDialogTitle => 'Error'; + + @override + String get snackBarDetails => 'Details'; + + @override + String get lightboxCopyLinkTooltip => 'Copy link'; + + @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 loginServerUrlInputLabel => '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 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 => 'URL сервера должен начинаться с http:// или 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 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 recentDmConversationsPageTitle => 'Direct messages'; + + @override + String get combinedFeedPageTitle => 'Combined feed'; + + @override + String get mentionsPageTitle => 'Mentions'; + + @override + String get starredMessagesPageTitle => 'Отмеченные сообщения'; + + @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 notifSelfUser => 'You'; + + @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 messageIsEditedLabel => 'EDITED'; + + @override + String get messageIsMovedLabel => 'MOVED'; + + @override + String get pollWidgetQuestionMissing => 'No question.'; + + @override + String get pollWidgetOptionsMissing => 'This poll has no options yet.'; + + @override + String get errorNotificationOpenTitle => 'Failed to open notification'; + + @override + String get errorNotificationOpenAccountMissing => 'The account associated with this notification no longer exists.'; +}