From 65e61f56aaf5c96e798bc3ead723ecf639fc3c8b Mon Sep 17 00:00:00 2001 From: Shu Chen Date: Wed, 20 Sep 2023 22:43:10 +0100 Subject: [PATCH] assets: add more translatable strings --- assets/l10n/app_en.arb | 328 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 320 insertions(+), 8 deletions(-) diff --git a/assets/l10n/app_en.arb b/assets/l10n/app_en.arb index f642df803c0..153ed087bf2 100644 --- a/assets/l10n/app_en.arb +++ b/assets/l10n/app_en.arb @@ -15,6 +15,10 @@ "@aboutPageTapToView": { "description": "Item subtitle in About Zulip page to navigate to Licenses page" }, + "apiConnectionNetworkRequestFailed": "Network request failed", + "@apiConnectionNetworkRequestFailed": { + "description": "Message for error dialog when a network request fails." + }, "chooseAccountPageTitle": "Choose account", "@chooseAccountPageTitle": { "description": "Title for ChooseAccountPage" @@ -27,18 +31,290 @@ "@profileButtonSendDirectMessage": { "description": "Label for button in profile screen to navigate to DMs with the shown user." }, - "cameraAccessDeniedTitle": "Permissions needed", - "@cameraAccessDeniedTitle": { - "description": "Title for dialog when the user needs to grant permissions for camera access." + "permissionsNeededError": "Error", + "@permissionsNeededError": { + "description": "General title for access dialog when we encounter an unknown error." }, - "cameraAccessDeniedMessage": "To upload an image, please grant Zulip additional permissions in Settings.", - "@cameraAccessDeniedMessage": { - "description": "Message for dialog when the user needs to grant permissions for camera access." + "permissionsNeededTitle": "Permissions needed", + "@permissionsNeededTitle": { + "description": "Title for dialog when the user needs to grant additional permissions." }, - "cameraAccessDeniedButtonText": "Open settings", - "@cameraAccessDeniedButtonText": { + "permissionsNeededOpenSettings": "Open settings", + "@permissionsNeededOpenSettings": { + "description": "Button label for permissions dialog button that opens the system settings screen." + }, + "permissionsNeededCameraAccessDenied": "To upload an image, please grant Zulip additional permissions in Settings.", + "@permissionsNeededCameraAccessDenied": { "description": "Message for dialog when the user needs to grant permissions for camera access." }, + "permissionsReadExternalStorageDenied": "To upload files, please grant Zulip additional permissions in Settings.", + "@permissionsReadExternalStorageDenied": { + "description": "Message for dialog when the user needs to grant permissions for external storage read access." + }, + "actionSheetCopyMessageText": "Copy message text", + "@actionSheetCopyMessageText": { + "description": "Label for copy message text button on action sheet." + }, + "actionSheetCouldNotFetchMessageSource": "Could not fetch message source", + "@actionSheetCouldNotFetchMessageSource": { + "description": "Dialog message when the source of a message could not be fetched." + }, + "actionSheetCopyingFailed": "Copying failed", + "@actionSheetCopyingFailed": { + "description": "Dialog message when copying the text of a message to the users system clipboard failed." + }, + "actionSheetMessageCopied": "Message Copied", + "@actionSheetMessageCopied": { + "description": "Dialog message when content of a message was copied to the users system clipboard." + }, + "actionSheetMessageDoesNotSeemToExist": "That message does not seem to exist.", + "@actionSheetMessageDoesNotSeemToExist": { + "description": "Dialog message in action sheet when loading a message that does not exist." + }, + "actionSheetQuoteAndReply": "Quote and reply", + "@actionSheetQuoteAndReply": { + "description": "Label for Quote and reply button on action sheet." + }, + "actionSheetQuotationFailed": "Quotation failed", + "@actionSheetQuotationFailed": { + "description": "Error dialog message when quoting a message failed." + }, + "actionSheetShare": "Share", + "@actionSheetShare": { + "description": "Label for share button on action sheet." + }, + "composeBoxAttachFilesTooltip": "Attach files", + "@composeBoxAttachFilesTooltip": { + "description": "Tooltip for compose box icon to attach a file to the message." + }, + "composeBoxAttachMediaTooltip": "Attach images or videos", + "@composeBoxAttachMediaTooltip": { + "description": "Tooltip for compose box icon to attach media to the message." + }, + "composeBoxAttachFromCameraTooltip": "Take a photo", + "@composeBoxAttachFromCameraTooltip": { + "description": "Tooltip for compose box icon to attach an image from the camera to the message." + }, + "composeBoxFailedToUploadFile": "Failed to upload file: {filename}", + "@composeBoxFailedToUploadFile": { + "description": "Label in compose box showing the specified file failed to upload.", + "placeholders": { + "filename": { + "type": "String", + "example": "file.txt" + } + } + }, + "composeBoxFilesTooLargeTitle": "{num, plural, =1{File} other{Files}} too large", + "@composeBoxFilesTooLargeTitle": { + "description": "Error dialog title when attached files are too large in size.", + "placeholders": { + "num": { + "type": "int", + "example": "4" + } + } + }, + "composeBoxFilesTooLargeMessage": "{num, plural, =1{File is} other{{num} files are}} larger than the server's limit of {maxFileUploadSizeMib} MiB and will not be uploaded:\n\n{listMessage}", + "@composeBoxFilesTooLargeMessage": { + "description": "Error dialog message when attached files are too large in size.", + "placeholders": { + "num": { + "type": "int", + "example": "4" + }, + "maxFileUploadSizeMib": { + "type": "int", + "example": "15" + }, + "listMessage": { + "type": "String", + "example": "foo.txt\nbar.txt" + } + } + }, + "composeBoxMessageNotSent": "Message not sent", + "@composeBoxMessageNotSent": { + "description": "Message for compose box when a message could not be sent." + }, + "composeBoxSelfDMHint": "Jot down something", + "@composeBoxSelfDMHint": { + "description": "Hint text for content input when sending a message to yourself." + }, + "composeBoxDMHintNoName": "Type a message", + "@composeBoxDMHintNoName": { + "description": "Hint text for content input when sending a message to one other person but we cannot determine their name." + }, + "composeBoxDMHint": "Message @{user}", + "@composeBoxDMHint": { + "description": "Hint text for content input when sending a message to one other person.", + "placeholders": { + "user": { + "type": "String", + "example": "stream name" + } + } + }, + "composeBoxGroupDMHint": "Message group", + "@composeBoxGroupDMHint": { + "description": "Hint text for content input when sending a message to a group." + }, + "composeBoxStreamContentHint": "Message #{stream} > ${topic}", + "@composeBoxStreamContentHint": { + "description": "Hint text for content input when sending a message to a stream", + "placeholders": { + "stream": { + "type": "String", + "example": "stream name" + }, + "topic": { + "type": "String", + "example": "topic name" + } + } + }, + "composeBoxSendTooltip": "Send", + "@composeBoxSendTooltip": { + "description": "Tooltip for send button in compose box." + }, + "composeBoxUnknownStreamName": "(unknown stream)", + "@composeBoxUnknownStreamName": { + "description": "Replacement name for stream when it cannot be found in the store." + }, + "composeBoxTopicHintText": "Topic", + "@composeBoxTopicHintText": { + "description": "Hint text for topic input widget in compose box." + }, + "composeBoxUploadingFilename": "Uploading {filename}...", + "@composeBoxUploadingFilename": { + "description": "Label in compose box showing the specified file is currently uploading.", + "placeholders": { + "filename": { + "type": "String", + "example": "file.txt" + } + } + }, + "contentValidationErrorTooLong": "Message length shouldn't be greater than 10000 characters.", + "@contentValidationErrorTooLong": { + "description": "Content validation error message when the message is too long." + }, + "contentValidationErrorEmpty": "You have nothing to send!", + "@contentValidationErrorEmpty": { + "description": "Content validation error message when the message is empty." + }, + "contentValidationErrorQuoteAndReplyInProgress": "Please wait for the quotation to complete.", + "@contentValidationErrorQuoteAndReplyInProgress": { + "description": "Content validation error message when a quotation has not completed yet." + }, + "contentValidationErrorUploadInProgress": "Please wait for the upload to complete.", + "@contentValidationErrorUploadInProgress": { + "description": "Content validation error message when attachments have not finished uploading." + }, + "dialogButtonOK": "OK", + "@dialogButtonOK": { + "description": "Button label in generic dialogs to confirm." + }, + "dialogButtonCancel": "Cancel", + "@dialogButtonCancel": { + "description": "Button label in generic dialogs to cancel." + }, + "dialogButtonContinue": "Continue", + "@dialogButtonContinue": { + "description": "Button label in generic dialogs to continue." + }, + "lightboxCopyLinkTooltip": "Copy link", + "@lightboxCopyLinkTooltip": { + "description": "Tooltip in lightbox for the copy link action." + }, + "lightboxCopyLinkSuccessToast": "Link copied", + "@lightboxCopyLinkSuccessToast": { + "description": "Success message in lightbox after copy link action completed." + }, + "loginPageTitle": "Log in", + "@loginPageTitle": { + "description": "Page title for login page." + }, + "loginFormSubmitLabel": "Log in", + "@loginFormSubmitLabel": { + "description": "Button text to submit login credentials." + }, + "loginAddAnAccount": "Add an account", + "@loginAddAnAccount": { + "description": "Page title for screen to add a zulip account." + }, + "loginServerLoginFailed": "Login failed", + "@loginServerLoginFailed": { + "description": "Error dialog title when login for a Zulip server fails." + }, + "loginServerUrlInputLabel": "Your Zulip server URL", + "@loginServerUrlInputLabel": { + "description": "Input label in login page for Zulip server URL entry." + }, + "loginServerErrorMessage": "The server said:\n\n{message}", + "@loginServerErrorMessage": { + "description": "Error message for login that quotes an error from the server.", + "placeholders": { + "message": { + "type": "String", + "example": "Invalid format" + } + } + }, + "loginCouldNotConnectMessage": "Failed to connect to server:\n{url}", + "@loginCouldNotConnectMessage": { + "description": "Message for login dialog the app could not connect to the server.", + "placeholders": { + "url": { + "type": "String", + "example": "http://example.com/" + } + } + }, + "loginCouldNotConnectTitle": "Could not connect", + "@loginCouldNotConnectTitle": { + "description": "Title for login dialog the app could not connect to the server." + }, + "loginHidePassword": "Hide password", + "@loginHidePassword": { + "description": "Icon label for button to hide password in input form." + }, + "loginInvalidInput": "Invalid input", + "@loginInvalidInput": { + "description": "Title for login dialog when input is invalid." + }, + "loginValidationPassword": "Please enter your password", + "@loginValidationPassword": { + "description": "Prompt for input for password field." + }, + "loginValidationPasswordLabel": "Password", + "@loginValidationPasswordLabel": { + "description": "Label for input for password field." + }, + "loginValidationRequireEmail": "Please enter your email", + "@loginValidationRequireEmail": { + "description": "Prompt when an email is required to login." + }, + "loginValidationRequireEmailLabel": "Email", + "@loginValidationRequireEmailLabel": { + "description": "Label for input when an email is required to login." + }, + "loginValidationRequireUsername": "Please enter your username", + "@loginValidationRequireUsername": { + "description": "Prompt when a username is required to login." + }, + "loginValidationRequireUsernameLabel": "Username", + "@loginValidationRequireUsernameLabel": { + "description": "Label for input when a username is required to login." + }, + "topicValidationErrorTooLong": "Topic length shouldn't be greater than 60 characters.", + "@topicValidationErrorTooLong": { + "description": "Topic validation error when topic is too long." + }, + "topicValidationErrorMandatoryButEmpty": "Topics are required in this organization.", + "@topicValidationErrorMandatoryButEmpty": { + "description": "Topic validation error when topic is required but was empty." + }, "subscribedToNStreams": "Subscribed to {num, plural, =0{no streams} =1{1 stream} other{{num} streams}}", "@subscribedToNStreams": { "description": "Test page label showing number of streams user is subscribed to.", @@ -49,6 +325,42 @@ } } }, + "serverExceptionMalformedResponse": "Server gave malformed response; HTTP status {httpStatus}", + "@serverExceptionMalformedResponse": { + "description": "Message for error dialog when an API call fails because we could not parse it.", + "placeholders": { + "httpStatus": { + "type": "int", + "example": "500" + } + } + }, + "serverExceptionRequestFailed": "Network request failed: HTTP status {httpStatus}", + "@serverExceptionRequestFailed": { + "description": "Message for error dialog when an API call fails.", + "placeholders": { + "httpStatus": { + "type": "int", + "example": "500" + } + } + }, + "serverUrlValidationErrorEmpty": "Please enter a URL.", + "@serverUrlValidationErrorEmpty": { + "description": "Server validation error message when URL is empty" + }, + "serverUrlValidationErrorInvalidUrl": "Please enter a valid URL.", + "@serverUrlValidationErrorInvalidUrl": { + "description": "Server validation error message when URL is not in a valid format." + }, + "serverUrlValidationErrorNoUseEmail": "Please enter the server URL, not your email.", + "@serverUrlValidationErrorNoUseEmail": { + "description": "Server validation error message when URL provided looks like an email" + }, + "serverUrlValidationErrorUnsupportedScheme": "The server URL must start with http:// or https://.", + "@serverUrlValidationErrorUnsupportedScheme": { + "description": "Server validation error message when URL does not have a scheme defined." + }, "userRoleOwner": "Owner", "@userRoleOwner": { "description": "Label for UserRole.owner"