Skip to content

Commit 65e61f5

Browse files
committed
assets: add more translatable strings
1 parent 67dff51 commit 65e61f5

File tree

1 file changed

+320
-8
lines changed

1 file changed

+320
-8
lines changed

assets/l10n/app_en.arb

Lines changed: 320 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@
1515
"@aboutPageTapToView": {
1616
"description": "Item subtitle in About Zulip page to navigate to Licenses page"
1717
},
18+
"apiConnectionNetworkRequestFailed": "Network request failed",
19+
"@apiConnectionNetworkRequestFailed": {
20+
"description": "Message for error dialog when a network request fails."
21+
},
1822
"chooseAccountPageTitle": "Choose account",
1923
"@chooseAccountPageTitle": {
2024
"description": "Title for ChooseAccountPage"
@@ -27,18 +31,290 @@
2731
"@profileButtonSendDirectMessage": {
2832
"description": "Label for button in profile screen to navigate to DMs with the shown user."
2933
},
30-
"cameraAccessDeniedTitle": "Permissions needed",
31-
"@cameraAccessDeniedTitle": {
32-
"description": "Title for dialog when the user needs to grant permissions for camera access."
34+
"permissionsNeededError": "Error",
35+
"@permissionsNeededError": {
36+
"description": "General title for access dialog when we encounter an unknown error."
3337
},
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."
38+
"permissionsNeededTitle": "Permissions needed",
39+
"@permissionsNeededTitle": {
40+
"description": "Title for dialog when the user needs to grant additional permissions."
3741
},
38-
"cameraAccessDeniedButtonText": "Open settings",
39-
"@cameraAccessDeniedButtonText": {
42+
"permissionsNeededOpenSettings": "Open settings",
43+
"@permissionsNeededOpenSettings": {
44+
"description": "Button label for permissions dialog button that opens the system settings screen."
45+
},
46+
"permissionsNeededCameraAccessDenied": "To upload an image, please grant Zulip additional permissions in Settings.",
47+
"@permissionsNeededCameraAccessDenied": {
4048
"description": "Message for dialog when the user needs to grant permissions for camera access."
4149
},
50+
"permissionsReadExternalStorageDenied": "To upload files, please grant Zulip additional permissions in Settings.",
51+
"@permissionsReadExternalStorageDenied": {
52+
"description": "Message for dialog when the user needs to grant permissions for external storage read access."
53+
},
54+
"actionSheetCopyMessageText": "Copy message text",
55+
"@actionSheetCopyMessageText": {
56+
"description": "Label for copy message text button on action sheet."
57+
},
58+
"actionSheetCouldNotFetchMessageSource": "Could not fetch message source",
59+
"@actionSheetCouldNotFetchMessageSource": {
60+
"description": "Dialog message when the source of a message could not be fetched."
61+
},
62+
"actionSheetCopyingFailed": "Copying failed",
63+
"@actionSheetCopyingFailed": {
64+
"description": "Dialog message when copying the text of a message to the users system clipboard failed."
65+
},
66+
"actionSheetMessageCopied": "Message Copied",
67+
"@actionSheetMessageCopied": {
68+
"description": "Dialog message when content of a message was copied to the users system clipboard."
69+
},
70+
"actionSheetMessageDoesNotSeemToExist": "That message does not seem to exist.",
71+
"@actionSheetMessageDoesNotSeemToExist": {
72+
"description": "Dialog message in action sheet when loading a message that does not exist."
73+
},
74+
"actionSheetQuoteAndReply": "Quote and reply",
75+
"@actionSheetQuoteAndReply": {
76+
"description": "Label for Quote and reply button on action sheet."
77+
},
78+
"actionSheetQuotationFailed": "Quotation failed",
79+
"@actionSheetQuotationFailed": {
80+
"description": "Error dialog message when quoting a message failed."
81+
},
82+
"actionSheetShare": "Share",
83+
"@actionSheetShare": {
84+
"description": "Label for share button on action sheet."
85+
},
86+
"composeBoxAttachFilesTooltip": "Attach files",
87+
"@composeBoxAttachFilesTooltip": {
88+
"description": "Tooltip for compose box icon to attach a file to the message."
89+
},
90+
"composeBoxAttachMediaTooltip": "Attach images or videos",
91+
"@composeBoxAttachMediaTooltip": {
92+
"description": "Tooltip for compose box icon to attach media to the message."
93+
},
94+
"composeBoxAttachFromCameraTooltip": "Take a photo",
95+
"@composeBoxAttachFromCameraTooltip": {
96+
"description": "Tooltip for compose box icon to attach an image from the camera to the message."
97+
},
98+
"composeBoxFailedToUploadFile": "Failed to upload file: {filename}",
99+
"@composeBoxFailedToUploadFile": {
100+
"description": "Label in compose box showing the specified file failed to upload.",
101+
"placeholders": {
102+
"filename": {
103+
"type": "String",
104+
"example": "file.txt"
105+
}
106+
}
107+
},
108+
"composeBoxFilesTooLargeTitle": "{num, plural, =1{File} other{Files}} too large",
109+
"@composeBoxFilesTooLargeTitle": {
110+
"description": "Error dialog title when attached files are too large in size.",
111+
"placeholders": {
112+
"num": {
113+
"type": "int",
114+
"example": "4"
115+
}
116+
}
117+
},
118+
"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}",
119+
"@composeBoxFilesTooLargeMessage": {
120+
"description": "Error dialog message when attached files are too large in size.",
121+
"placeholders": {
122+
"num": {
123+
"type": "int",
124+
"example": "4"
125+
},
126+
"maxFileUploadSizeMib": {
127+
"type": "int",
128+
"example": "15"
129+
},
130+
"listMessage": {
131+
"type": "String",
132+
"example": "foo.txt\nbar.txt"
133+
}
134+
}
135+
},
136+
"composeBoxMessageNotSent": "Message not sent",
137+
"@composeBoxMessageNotSent": {
138+
"description": "Message for compose box when a message could not be sent."
139+
},
140+
"composeBoxSelfDMHint": "Jot down something",
141+
"@composeBoxSelfDMHint": {
142+
"description": "Hint text for content input when sending a message to yourself."
143+
},
144+
"composeBoxDMHintNoName": "Type a message",
145+
"@composeBoxDMHintNoName": {
146+
"description": "Hint text for content input when sending a message to one other person but we cannot determine their name."
147+
},
148+
"composeBoxDMHint": "Message @{user}",
149+
"@composeBoxDMHint": {
150+
"description": "Hint text for content input when sending a message to one other person.",
151+
"placeholders": {
152+
"user": {
153+
"type": "String",
154+
"example": "stream name"
155+
}
156+
}
157+
},
158+
"composeBoxGroupDMHint": "Message group",
159+
"@composeBoxGroupDMHint": {
160+
"description": "Hint text for content input when sending a message to a group."
161+
},
162+
"composeBoxStreamContentHint": "Message #{stream} > ${topic}",
163+
"@composeBoxStreamContentHint": {
164+
"description": "Hint text for content input when sending a message to a stream",
165+
"placeholders": {
166+
"stream": {
167+
"type": "String",
168+
"example": "stream name"
169+
},
170+
"topic": {
171+
"type": "String",
172+
"example": "topic name"
173+
}
174+
}
175+
},
176+
"composeBoxSendTooltip": "Send",
177+
"@composeBoxSendTooltip": {
178+
"description": "Tooltip for send button in compose box."
179+
},
180+
"composeBoxUnknownStreamName": "(unknown stream)",
181+
"@composeBoxUnknownStreamName": {
182+
"description": "Replacement name for stream when it cannot be found in the store."
183+
},
184+
"composeBoxTopicHintText": "Topic",
185+
"@composeBoxTopicHintText": {
186+
"description": "Hint text for topic input widget in compose box."
187+
},
188+
"composeBoxUploadingFilename": "Uploading {filename}...",
189+
"@composeBoxUploadingFilename": {
190+
"description": "Label in compose box showing the specified file is currently uploading.",
191+
"placeholders": {
192+
"filename": {
193+
"type": "String",
194+
"example": "file.txt"
195+
}
196+
}
197+
},
198+
"contentValidationErrorTooLong": "Message length shouldn't be greater than 10000 characters.",
199+
"@contentValidationErrorTooLong": {
200+
"description": "Content validation error message when the message is too long."
201+
},
202+
"contentValidationErrorEmpty": "You have nothing to send!",
203+
"@contentValidationErrorEmpty": {
204+
"description": "Content validation error message when the message is empty."
205+
},
206+
"contentValidationErrorQuoteAndReplyInProgress": "Please wait for the quotation to complete.",
207+
"@contentValidationErrorQuoteAndReplyInProgress": {
208+
"description": "Content validation error message when a quotation has not completed yet."
209+
},
210+
"contentValidationErrorUploadInProgress": "Please wait for the upload to complete.",
211+
"@contentValidationErrorUploadInProgress": {
212+
"description": "Content validation error message when attachments have not finished uploading."
213+
},
214+
"dialogButtonOK": "OK",
215+
"@dialogButtonOK": {
216+
"description": "Button label in generic dialogs to confirm."
217+
},
218+
"dialogButtonCancel": "Cancel",
219+
"@dialogButtonCancel": {
220+
"description": "Button label in generic dialogs to cancel."
221+
},
222+
"dialogButtonContinue": "Continue",
223+
"@dialogButtonContinue": {
224+
"description": "Button label in generic dialogs to continue."
225+
},
226+
"lightboxCopyLinkTooltip": "Copy link",
227+
"@lightboxCopyLinkTooltip": {
228+
"description": "Tooltip in lightbox for the copy link action."
229+
},
230+
"lightboxCopyLinkSuccessToast": "Link copied",
231+
"@lightboxCopyLinkSuccessToast": {
232+
"description": "Success message in lightbox after copy link action completed."
233+
},
234+
"loginPageTitle": "Log in",
235+
"@loginPageTitle": {
236+
"description": "Page title for login page."
237+
},
238+
"loginFormSubmitLabel": "Log in",
239+
"@loginFormSubmitLabel": {
240+
"description": "Button text to submit login credentials."
241+
},
242+
"loginAddAnAccount": "Add an account",
243+
"@loginAddAnAccount": {
244+
"description": "Page title for screen to add a zulip account."
245+
},
246+
"loginServerLoginFailed": "Login failed",
247+
"@loginServerLoginFailed": {
248+
"description": "Error dialog title when login for a Zulip server fails."
249+
},
250+
"loginServerUrlInputLabel": "Your Zulip server URL",
251+
"@loginServerUrlInputLabel": {
252+
"description": "Input label in login page for Zulip server URL entry."
253+
},
254+
"loginServerErrorMessage": "The server said:\n\n{message}",
255+
"@loginServerErrorMessage": {
256+
"description": "Error message for login that quotes an error from the server.",
257+
"placeholders": {
258+
"message": {
259+
"type": "String",
260+
"example": "Invalid format"
261+
}
262+
}
263+
},
264+
"loginCouldNotConnectMessage": "Failed to connect to server:\n{url}",
265+
"@loginCouldNotConnectMessage": {
266+
"description": "Message for login dialog the app could not connect to the server.",
267+
"placeholders": {
268+
"url": {
269+
"type": "String",
270+
"example": "http://example.com/"
271+
}
272+
}
273+
},
274+
"loginCouldNotConnectTitle": "Could not connect",
275+
"@loginCouldNotConnectTitle": {
276+
"description": "Title for login dialog the app could not connect to the server."
277+
},
278+
"loginHidePassword": "Hide password",
279+
"@loginHidePassword": {
280+
"description": "Icon label for button to hide password in input form."
281+
},
282+
"loginInvalidInput": "Invalid input",
283+
"@loginInvalidInput": {
284+
"description": "Title for login dialog when input is invalid."
285+
},
286+
"loginValidationPassword": "Please enter your password",
287+
"@loginValidationPassword": {
288+
"description": "Prompt for input for password field."
289+
},
290+
"loginValidationPasswordLabel": "Password",
291+
"@loginValidationPasswordLabel": {
292+
"description": "Label for input for password field."
293+
},
294+
"loginValidationRequireEmail": "Please enter your email",
295+
"@loginValidationRequireEmail": {
296+
"description": "Prompt when an email is required to login."
297+
},
298+
"loginValidationRequireEmailLabel": "Email",
299+
"@loginValidationRequireEmailLabel": {
300+
"description": "Label for input when an email is required to login."
301+
},
302+
"loginValidationRequireUsername": "Please enter your username",
303+
"@loginValidationRequireUsername": {
304+
"description": "Prompt when a username is required to login."
305+
},
306+
"loginValidationRequireUsernameLabel": "Username",
307+
"@loginValidationRequireUsernameLabel": {
308+
"description": "Label for input when a username is required to login."
309+
},
310+
"topicValidationErrorTooLong": "Topic length shouldn't be greater than 60 characters.",
311+
"@topicValidationErrorTooLong": {
312+
"description": "Topic validation error when topic is too long."
313+
},
314+
"topicValidationErrorMandatoryButEmpty": "Topics are required in this organization.",
315+
"@topicValidationErrorMandatoryButEmpty": {
316+
"description": "Topic validation error when topic is required but was empty."
317+
},
42318
"subscribedToNStreams": "Subscribed to {num, plural, =0{no streams} =1{1 stream} other{{num} streams}}",
43319
"@subscribedToNStreams": {
44320
"description": "Test page label showing number of streams user is subscribed to.",
@@ -49,6 +325,42 @@
49325
}
50326
}
51327
},
328+
"serverExceptionMalformedResponse": "Server gave malformed response; HTTP status {httpStatus}",
329+
"@serverExceptionMalformedResponse": {
330+
"description": "Message for error dialog when an API call fails because we could not parse it.",
331+
"placeholders": {
332+
"httpStatus": {
333+
"type": "int",
334+
"example": "500"
335+
}
336+
}
337+
},
338+
"serverExceptionRequestFailed": "Network request failed: HTTP status {httpStatus}",
339+
"@serverExceptionRequestFailed": {
340+
"description": "Message for error dialog when an API call fails.",
341+
"placeholders": {
342+
"httpStatus": {
343+
"type": "int",
344+
"example": "500"
345+
}
346+
}
347+
},
348+
"serverUrlValidationErrorEmpty": "Please enter a URL.",
349+
"@serverUrlValidationErrorEmpty": {
350+
"description": "Server validation error message when URL is empty"
351+
},
352+
"serverUrlValidationErrorInvalidUrl": "Please enter a valid URL.",
353+
"@serverUrlValidationErrorInvalidUrl": {
354+
"description": "Server validation error message when URL is not in a valid format."
355+
},
356+
"serverUrlValidationErrorNoUseEmail": "Please enter the server URL, not your email.",
357+
"@serverUrlValidationErrorNoUseEmail": {
358+
"description": "Server validation error message when URL provided looks like an email"
359+
},
360+
"serverUrlValidationErrorUnsupportedScheme": "The server URL must start with http:// or https://.",
361+
"@serverUrlValidationErrorUnsupportedScheme": {
362+
"description": "Server validation error message when URL does not have a scheme defined."
363+
},
52364
"userRoleOwner": "Owner",
53365
"@userRoleOwner": {
54366
"description": "Label for UserRole.owner"

0 commit comments

Comments
 (0)