|
27 | 27 | "@profileButtonSendDirectMessage": {
|
28 | 28 | "description": "Label for button in profile screen to navigate to DMs with the shown user."
|
29 | 29 | },
|
30 |
| - "cameraAccessDeniedTitle": "Permissions needed", |
31 |
| - "@cameraAccessDeniedTitle": { |
32 |
| - "description": "Title for dialog when the user needs to grant permissions for camera access." |
| 30 | + "permissionsNeededError": "Error", |
| 31 | + "@permissionsNeededError": { |
| 32 | + "description": "General title for access dialog when we encounter an unknown error." |
33 | 33 | },
|
34 |
| - "cameraAccessDeniedMessage": "To upload an image, please grant Zulip additional permissions in Settings.", |
35 |
| - "@cameraAccessDeniedMessage": { |
36 |
| - "description": "Message for dialog when the user needs to grant permissions for camera access." |
| 34 | + "permissionsNeededTitle": "Permissions needed", |
| 35 | + "@permissionsNeededTitle": { |
| 36 | + "description": "Title for dialog when the user needs to grant additional permissions." |
| 37 | + }, |
| 38 | + "permissionsNeededOpenSettings": "Open settings", |
| 39 | + "@permissionsNeededOpenSettings": { |
| 40 | + "description": "Button label for permissions dialog button that opens the system settings screen." |
37 | 41 | },
|
38 |
| - "cameraAccessDeniedButtonText": "Open settings", |
39 |
| - "@cameraAccessDeniedButtonText": { |
| 42 | + "permissionsDeniedCameraAccess": "To upload an image, please grant Zulip additional permissions in Settings.", |
| 43 | + "@permissionsDeniedCameraAccess": { |
40 | 44 | "description": "Message for dialog when the user needs to grant permissions for camera access."
|
41 | 45 | },
|
| 46 | + "permissionsDeniedReadExternalStorage": "To upload files, please grant Zulip additional permissions in Settings.", |
| 47 | + "@permissionsDeniedReadExternalStorage": { |
| 48 | + "description": "Message for dialog when the user needs to grant permissions for external storage read access." |
| 49 | + }, |
42 | 50 | "actionSheetOptionCopy": "Copy message text",
|
43 | 51 | "@actionSheetOptionCopy": {
|
44 | 52 | "description": "Label for copy message text button on action sheet."
|
|
59 | 67 | "@errorCopyingFailed": {
|
60 | 68 | "description": "Dialog message when copying the text of a message to the users system clipboard failed."
|
61 | 69 | },
|
| 70 | + "errorFailedToUploadFile": "Failed to upload file: {filename}", |
| 71 | + "@errorFailedToUploadFile": { |
| 72 | + "description": "Label in compose box showing the specified file failed to upload.", |
| 73 | + "placeholders": { |
| 74 | + "filename": {"type": "String", "example": "file.txt"} |
| 75 | + } |
| 76 | + }, |
| 77 | + "errorFilesTooLarge": "{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}", |
| 78 | + "@errorFilesTooLarge": { |
| 79 | + "description": "Error message when attached files are too large in size.", |
| 80 | + "placeholders": { |
| 81 | + "num": {"type": "int", "example": "2"}, |
| 82 | + "maxFileUploadSizeMib": {"type": "int", "example": "15"}, |
| 83 | + "listMessage": {"type": "String", "example": "foo.txt\nbar.txt"} |
| 84 | + } |
| 85 | + }, |
| 86 | + "errorFilesTooLargeTitle": "{num, plural, =1{File} other{Files}} too large", |
| 87 | + "@errorFilesTooLargeTitle": { |
| 88 | + "description": "Error title when attached files are too large in size.", |
| 89 | + "placeholders": { |
| 90 | + "num": {"type": "int", "example": "4"} |
| 91 | + } |
| 92 | + }, |
| 93 | + "errorLoginInvalidInputTitle": "Invalid input", |
| 94 | + "@errorLoginInvalidInputTitle": { |
| 95 | + "description": "Error dialog title for login dialog when input is invalid." |
| 96 | + }, |
| 97 | + "errorLoginFailed": "Login failed", |
| 98 | + "@errorLoginFailed": { |
| 99 | + "description": "Error dialog title when login for a Zulip server fails." |
| 100 | + }, |
| 101 | + "errorMessageNotSent": "Message not sent", |
| 102 | + "@errorMessageNotSent": { |
| 103 | + "description": "Message for compose box when a message could not be sent." |
| 104 | + }, |
| 105 | + "errorMessageDoesNotSeemToExist": "That message does not seem to exist.", |
| 106 | + "@errorMessageDoesNotSeemToExist": { |
| 107 | + "description": "Error message when loading a message that does not exist." |
| 108 | + }, |
| 109 | + "errorServerErrorMessage": "The server said:\n\n{message}", |
| 110 | + "@errorServerErrorMessage": { |
| 111 | + "description": "Error message that quotes an error from the server.", |
| 112 | + "placeholders": { |
| 113 | + "message": {"type": "String", "example": "Invalid format"} |
| 114 | + } |
| 115 | + }, |
| 116 | + "errorLoginCouldNotConnect": "Failed to connect to server:\n{url}", |
| 117 | + "@errorLoginCouldNotConnect": { |
| 118 | + "description": "Error message when the app could not connect to the server.", |
| 119 | + "placeholders": { |
| 120 | + "url": {"type": "String", "example": "http://example.com/"} |
| 121 | + } |
| 122 | + }, |
| 123 | + "errorLoginCouldNotConnectTitle": "Could not connect", |
| 124 | + "@errorLoginCouldNotConnectTitle": { |
| 125 | + "description": "Error title when the app could not connect to the server." |
| 126 | + }, |
62 | 127 | "errorMessageDoesNotSeemToExist": "That message does not seem to exist.",
|
63 | 128 | "@errorMessageDoesNotSeemToExist": {
|
64 | 129 | "description": "Error message when loading a message that does not exist."
|
|
67 | 132 | "@errorQuotationFailed": {
|
68 | 133 | "description": "Error dialog message when quoting a message failed."
|
69 | 134 | },
|
| 135 | + "errorServerMessage": "The server said:\n\n{message}", |
| 136 | + "@errorServerMessage": { |
| 137 | + "description": "Error message that quotes an error from the server.", |
| 138 | + "placeholders": { |
| 139 | + "message": {"type": "String", "example": "Invalid format"} |
| 140 | + } |
| 141 | + }, |
70 | 142 | "successLinkCopied": "Link copied",
|
71 | 143 | "@successLinkCopied": {
|
72 | 144 | "description": "Success message after copy link action completed."
|
|
75 | 147 | "@successMessageCopied": {
|
76 | 148 | "description": "Dialog message when content of a message was copied to the users system clipboard."
|
77 | 149 | },
|
| 150 | + "composeBoxAttachFilesTooltip": "Attach files", |
| 151 | + "@composeBoxAttachFilesTooltip": { |
| 152 | + "description": "Tooltip for compose box icon to attach a file to the message." |
| 153 | + }, |
| 154 | + "composeBoxAttachMediaTooltip": "Attach images or videos", |
| 155 | + "@composeBoxAttachMediaTooltip": { |
| 156 | + "description": "Tooltip for compose box icon to attach media to the message." |
| 157 | + }, |
| 158 | + "composeBoxAttachFromCameraTooltip": "Take a photo", |
| 159 | + "@composeBoxAttachFromCameraTooltip": { |
| 160 | + "description": "Tooltip for compose box icon to attach an image from the camera to the message." |
| 161 | + }, |
| 162 | + "composeBoxSelfDmHint": "Jot down something", |
| 163 | + "@composeBoxSelfDmHint": { |
| 164 | + "description": "Hint text for content input when sending a message to yourself." |
| 165 | + }, |
| 166 | + "composeBoxDmHintNoName": "Type a message", |
| 167 | + "@composeBoxDmHintNoName": { |
| 168 | + "description": "Hint text for content input when sending a message to one other person but we cannot determine their name." |
| 169 | + }, |
| 170 | + "composeBoxDmHint": "Message @{user}", |
| 171 | + "@composeBoxDmHint": { |
| 172 | + "description": "Hint text for content input when sending a message to one other person.", |
| 173 | + "placeholders": { |
| 174 | + "user": {"type": "String", "example": "stream name"} |
| 175 | + } |
| 176 | + }, |
| 177 | + "composeBoxGroupDmHint": "Message group", |
| 178 | + "@composeBoxGroupDmHint": { |
| 179 | + "description": "Hint text for content input when sending a message to a group." |
| 180 | + }, |
| 181 | + "composeBoxStreamContentHint": "Message #{stream} > ${topic}", |
| 182 | + "@composeBoxStreamContentHint": { |
| 183 | + "description": "Hint text for content input when sending a message to a stream", |
| 184 | + "placeholders": { |
| 185 | + "stream": {"type": "String", "example": "stream name"}, |
| 186 | + "topic": {"type": "String", "example": "topic name"} |
| 187 | + } |
| 188 | + }, |
| 189 | + "composeBoxSendTooltip": "Send", |
| 190 | + "@composeBoxSendTooltip": { |
| 191 | + "description": "Tooltip for send button in compose box." |
| 192 | + }, |
| 193 | + "composeBoxUnknownStreamName": "(unknown stream)", |
| 194 | + "@composeBoxUnknownStreamName": { |
| 195 | + "description": "Replacement name for stream when it cannot be found in the store." |
| 196 | + }, |
| 197 | + "composeBoxTopicHintText": "Topic", |
| 198 | + "@composeBoxTopicHintText": { |
| 199 | + "description": "Hint text for topic input widget in compose box." |
| 200 | + }, |
| 201 | + "composeBoxUploadingFilename": "Uploading {filename}...", |
| 202 | + "@composeBoxUploadingFilename": { |
| 203 | + "description": "Label in compose box showing the specified file is currently uploading.", |
| 204 | + "placeholders": { |
| 205 | + "filename": {"type": "String", "example": "file.txt"} |
| 206 | + } |
| 207 | + }, |
| 208 | + "contentValidationErrorTooLong": "Message length shouldn't be greater than 10000 characters.", |
| 209 | + "@contentValidationErrorTooLong": { |
| 210 | + "description": "Content validation error message when the message is too long." |
| 211 | + }, |
| 212 | + "contentValidationErrorEmpty": "You have nothing to send!", |
| 213 | + "@contentValidationErrorEmpty": { |
| 214 | + "description": "Content validation error message when the message is empty." |
| 215 | + }, |
| 216 | + "contentValidationErrorQuoteAndReplyInProgress": "Please wait for the quotation to complete.", |
| 217 | + "@contentValidationErrorQuoteAndReplyInProgress": { |
| 218 | + "description": "Content validation error message when a quotation has not completed yet." |
| 219 | + }, |
| 220 | + "contentValidationErrorUploadInProgress": "Please wait for the upload to complete.", |
| 221 | + "@contentValidationErrorUploadInProgress": { |
| 222 | + "description": "Content validation error message when attachments have not finished uploading." |
| 223 | + }, |
78 | 224 | "suggestedActionDialogCancel": "Cancel",
|
79 | 225 | "@suggestedActionDialogCancel": {
|
80 | 226 | "description": "Button label to cancel a suggested action."
|
|
87 | 233 | "@errorDialogContinue": {
|
88 | 234 | "description": "Button label in error dialogs to acknowledge error."
|
89 | 235 | },
|
| 236 | + "errorDialogTitle": "Error", |
| 237 | + "@errorDialogTitle": { |
| 238 | + "description": "Generic title for error dialog." |
| 239 | + }, |
90 | 240 | "lightboxCopyLinkTooltip": "Copy link",
|
91 | 241 | "@lightboxCopyLinkTooltip": {
|
92 | 242 | "description": "Tooltip in lightbox for the copy link action."
|
93 | 243 | },
|
| 244 | + "loginPageTitle": "Log in", |
| 245 | + "@loginPageTitle": { |
| 246 | + "description": "Page title for login page." |
| 247 | + }, |
| 248 | + "loginFormSubmitLabel": "Log in", |
| 249 | + "@loginFormSubmitLabel": { |
| 250 | + "description": "Button text to submit login credentials." |
| 251 | + }, |
| 252 | + "loginAddAnAccount": "Add an account", |
| 253 | + "@loginAddAnAccount": { |
| 254 | + "description": "Page title for screen to add a zulip account." |
| 255 | + }, |
| 256 | + "loginAddAnAccountConfirm": "Continue", |
| 257 | + "@loginAddAnAccountConfirm": { |
| 258 | + "description": "Button label to submit form for adding an account." |
| 259 | + }, |
| 260 | + "loginServerUrlInputLabel": "Your Zulip server URL", |
| 261 | + "@loginServerUrlInputLabel": { |
| 262 | + "description": "Input label in login page for Zulip server URL entry." |
| 263 | + }, |
| 264 | + "loginHidePassword": "Hide password", |
| 265 | + "@loginHidePassword": { |
| 266 | + "description": "Icon label for button to hide password in input form." |
| 267 | + }, |
| 268 | + "loginEmailLabel": "Email", |
| 269 | + "@loginEmailLabel": { |
| 270 | + "description": "Label for input when an email is required to login." |
| 271 | + }, |
| 272 | + "loginErrorMissingEmail": "Please enter your email", |
| 273 | + "@loginErrorMissingEmail": { |
| 274 | + "description": "Error when an empty email was provided." |
| 275 | + }, |
| 276 | + "loginPasswordLabel": "Password", |
| 277 | + "@loginPasswordLabel": { |
| 278 | + "description": "Label for input for password field." |
| 279 | + }, |
| 280 | + "loginErrorMissingPassword": "Please enter your password", |
| 281 | + "@loginErrorMissingPassword": { |
| 282 | + "description": "Error when an empty password was provided." |
| 283 | + }, |
| 284 | + "loginUsernameLabel": "Username", |
| 285 | + "@loginUsernameLabel": { |
| 286 | + "description": "Label for input when a username is required to login." |
| 287 | + }, |
| 288 | + "loginErrorMissingUsername": "Please enter your username", |
| 289 | + "@loginErrorMissingUsername": { |
| 290 | + "description": "Error when an empty username was provided." |
| 291 | + }, |
| 292 | + "topicValidationErrorTooLong": "Topic length shouldn't be greater than 60 characters.", |
| 293 | + "@topicValidationErrorTooLong": { |
| 294 | + "description": "Topic validation error when topic is too long." |
| 295 | + }, |
| 296 | + "topicValidationErrorMandatoryButEmpty": "Topics are required in this organization.", |
| 297 | + "@topicValidationErrorMandatoryButEmpty": { |
| 298 | + "description": "Topic validation error when topic is required but was empty." |
| 299 | + }, |
94 | 300 | "subscribedToNStreams": "Subscribed to {num, plural, =0{no streams} =1{1 stream} other{{num} streams}}",
|
95 | 301 | "@subscribedToNStreams": {
|
96 | 302 | "description": "Test page label showing number of streams user is subscribed to.",
|
|
116 | 322 | "httpStatus": {"type": "int", "example": "500"}
|
117 | 323 | }
|
118 | 324 | },
|
| 325 | + "serverUrlValidationErrorEmpty": "Please enter a URL.", |
| 326 | + "@serverUrlValidationErrorEmpty": { |
| 327 | + "description": "Server validation error message when URL is empty" |
| 328 | + }, |
| 329 | + "serverUrlValidationErrorInvalidUrl": "Please enter a valid URL.", |
| 330 | + "@serverUrlValidationErrorInvalidUrl": { |
| 331 | + "description": "Server validation error message when URL is not in a valid format." |
| 332 | + }, |
| 333 | + "serverUrlValidationErrorNoUseEmail": "Please enter the server URL, not your email.", |
| 334 | + "@serverUrlValidationErrorNoUseEmail": { |
| 335 | + "description": "Server validation error message when URL provided looks like an email" |
| 336 | + }, |
| 337 | + "serverUrlValidationErrorUnsupportedScheme": "The server URL must start with http:// or https://.", |
| 338 | + "@serverUrlValidationErrorUnsupportedScheme": { |
| 339 | + "description": "Server validation error message when URL does not have a scheme defined." |
| 340 | + }, |
119 | 341 | "userRoleOwner": "Owner",
|
120 | 342 | "@userRoleOwner": {
|
121 | 343 | "description": "Label for UserRole.owner"
|
|
0 commit comments