@ethora/chat-component-rn 26.8.7 → 26.8.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +27 -4
- package/lib/commonjs/components/Header/HeaderRoomList.js +34 -6
- package/lib/commonjs/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +15 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +5 -3
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +8 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +63 -11
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +26 -13
- package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/commonjs/components/MenuRoom/MenuRoom.js +5 -3
- package/lib/commonjs/components/MenuRoom/MenuRoom.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Message.js +3 -3
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +5 -3
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +5 -4
- package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -5
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/Modal.js +33 -11
- package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +8 -8
- package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js +279 -0
- package/lib/commonjs/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js.map +1 -0
- package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +10 -8
- package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js +13 -11
- package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +22 -38
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js +121 -0
- package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -0
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +11 -6
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js +133 -0
- package/lib/commonjs/components/RoomComponents/SwipeableRoomRow.js.map +1 -0
- package/lib/commonjs/components/Thread/ThreadWrapper.js +4 -2
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +15 -3
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/e2ee/stanza.js +1 -1
- package/lib/commonjs/e2ee/stanza.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +2 -0
- package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js +1 -0
- package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/commonjs/helpers/preferencesStorage.js.map +1 -1
- package/lib/commonjs/hooks/useChatSettingState.js +4 -0
- package/lib/commonjs/hooks/useChatSettingState.js.map +1 -1
- package/lib/commonjs/hooks/useChatWrapperInit.js +4 -0
- package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/commonjs/hooks/useConnectionLabel.js +29 -0
- package/lib/commonjs/hooks/useConnectionLabel.js.map +1 -0
- package/lib/commonjs/i18n/strings.js +199 -1
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/i18n/useT.js +8 -4
- package/lib/commonjs/i18n/useT.js.map +1 -1
- package/lib/commonjs/networking/api-requests/user.api.js +13 -0
- package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +29 -1
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/chatSettingsSlice.js +12 -2
- package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/commonjs/services/languageSettings.js +177 -0
- package/lib/commonjs/services/languageSettings.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/module/components/Header/HeaderRoomList.js +34 -6
- package/lib/module/components/Header/HeaderRoomList.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +15 -1
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +5 -3
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +9 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +64 -12
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/Menu/HeaderRoomListMenu.js +26 -13
- package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
- package/lib/module/components/MenuRoom/MenuRoom.js +5 -3
- package/lib/module/components/MenuRoom/MenuRoom.js.map +1 -1
- package/lib/module/components/MessageBubble/Message.js +3 -3
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +5 -3
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +5 -4
- package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +7 -5
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/Modal/Modal.js +33 -11
- package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js +8 -8
- package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js +274 -0
- package/lib/module/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js.map +1 -0
- package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +10 -8
- package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
- package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js +13 -11
- package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +24 -40
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js +116 -0
- package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -0
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +10 -5
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/RoomComponents/SwipeableRoomRow.js +126 -0
- package/lib/module/components/RoomComponents/SwipeableRoomRow.js.map +1 -0
- package/lib/module/components/Thread/ThreadWrapper.js +4 -2
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/context/xmppProvider.js +16 -4
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/e2ee/stanza.js +1 -1
- package/lib/module/e2ee/stanza.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js +2 -0
- package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
- package/lib/module/helpers/constants/MODAL_TYPES.js +1 -0
- package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
- package/lib/module/helpers/preferencesStorage.js.map +1 -1
- package/lib/module/hooks/useChatSettingState.js +4 -0
- package/lib/module/hooks/useChatSettingState.js.map +1 -1
- package/lib/module/hooks/useChatWrapperInit.js +4 -0
- package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
- package/lib/module/hooks/useConnectionLabel.js +25 -0
- package/lib/module/hooks/useConnectionLabel.js.map +1 -0
- package/lib/module/i18n/strings.js +199 -1
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/i18n/useT.js +8 -4
- package/lib/module/i18n/useT.js.map +1 -1
- package/lib/module/networking/api-requests/user.api.js +12 -0
- package/lib/module/networking/api-requests/user.api.js.map +1 -1
- package/lib/module/networking/stanzaHandlers.js +1 -1
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmppClient.js +29 -1
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/chatSettingsSlice.js +9 -1
- package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
- package/lib/module/services/languageSettings.js +164 -0
- package/lib/module/services/languageSettings.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/typescript/components/Header/HeaderRoomList.d.ts +1 -0
- package/lib/typescript/components/Header/HeaderRoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts +7 -1
- package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
- package/lib/typescript/components/MenuRoom/MenuRoom.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts +2 -0
- package/lib/typescript/components/Modals/ChatProfileModal/ReportChatModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.d.ts +15 -0
- package/lib/typescript/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.d.ts.map +1 -0
- package/lib/typescript/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/SettingsModals/Visibility/VisibilityModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts +14 -0
- package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts.map +1 -0
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts +19 -0
- package/lib/typescript/components/RoomComponents/SwipeableRoomRow.d.ts.map +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +1 -0
- package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
- package/lib/typescript/helpers/preferencesStorage.d.ts +4 -0
- package/lib/typescript/helpers/preferencesStorage.d.ts.map +1 -1
- package/lib/typescript/hooks/useChatSettingState.d.ts +2 -0
- package/lib/typescript/hooks/useChatSettingState.d.ts.map +1 -1
- package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
- package/lib/typescript/hooks/useConnectionLabel.d.ts +8 -0
- package/lib/typescript/hooks/useConnectionLabel.d.ts.map +1 -0
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/i18n/useT.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/user.api.d.ts +6 -0
- package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +11 -1
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts +18 -1
- package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
- package/lib/typescript/services/languageSettings.d.ts +29 -0
- package/lib/typescript/services/languageSettings.d.ts.map +1 -0
- package/lib/typescript/types/models/user.model.d.ts +4 -0
- package/lib/typescript/types/models/user.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +23 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/components/Header/HeaderRoomList.tsx +31 -6
- package/src/components/MainComponents/ChatHeader.tsx +16 -1
- package/src/components/MainComponents/ChatWrapper.tsx +5 -3
- package/src/components/MainComponents/ReduxWrapper.tsx +6 -0
- package/src/components/MainComponents/RoomList.tsx +78 -12
- package/src/components/Menu/HeaderRoomListMenu.tsx +40 -13
- package/src/components/MenuRoom/MenuRoom.tsx +5 -3
- package/src/components/MessageBubble/Message.tsx +3 -3
- package/src/components/MessageBubble/MessageInteractions.tsx +5 -3
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +1 -1
- package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +6 -3
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +7 -5
- package/src/components/Modals/Modal/Modal.tsx +44 -16
- package/src/components/Modals/NewChatModal/NewChatModal.tsx +8 -8
- package/src/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.tsx +316 -0
- package/src/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.tsx +10 -15
- package/src/components/Modals/SettingsModals/Visibility/VisibilityModal.tsx +13 -14
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +19 -40
- package/src/components/Modals/UserSettingsModal/LanguageCard.tsx +144 -0
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +11 -4
- package/src/components/RoomComponents/SwipeableRoomRow.tsx +133 -0
- package/src/components/Thread/ThreadWrapper.tsx +4 -2
- package/src/context/xmppProvider.tsx +21 -4
- package/src/e2ee/stanza.ts +1 -1
- package/src/helpers/constants/MODAL_COMPONENTS.tsx +2 -0
- package/src/helpers/constants/MODAL_TYPES.ts +1 -0
- package/src/helpers/preferencesStorage.ts +4 -0
- package/src/hooks/useChatSettingState.tsx +8 -0
- package/src/hooks/useChatWrapperInit.ts +4 -0
- package/src/hooks/useConnectionLabel.ts +16 -0
- package/src/i18n/strings.ts +199 -1
- package/src/i18n/useT.ts +6 -4
- package/src/networking/api-requests/user.api.ts +9 -0
- package/src/networking/stanzaHandlers.ts +1 -0
- package/src/networking/xmppClient.ts +33 -1
- package/src/roomStore/chatSettingsSlice.ts +30 -0
- package/src/services/languageSettings.ts +143 -0
- package/src/types/models/user.model.ts +4 -0
- package/src/types/types.ts +23 -0
- package/src/version.ts +1 -1
package/src/i18n/strings.ts
CHANGED
|
@@ -16,6 +16,13 @@ export type UiStringTable = Record<string, string>;
|
|
|
16
16
|
const en: UiStringTable = {
|
|
17
17
|
'search.placeholder': 'Search...',
|
|
18
18
|
'roomList.title': 'Chats',
|
|
19
|
+
'connection.connecting': 'Connecting…',
|
|
20
|
+
'connection.updating': 'Updating…',
|
|
21
|
+
'menu.newChat': 'New Chat',
|
|
22
|
+
'menu.profile': 'Profile',
|
|
23
|
+
'menu.settings': 'Settings',
|
|
24
|
+
'menu.logout': 'Sign out',
|
|
25
|
+
'menu.logoutConfirm': 'Are you sure you want to sign out?',
|
|
19
26
|
'search.members': 'Search members',
|
|
20
27
|
'search.noResults': 'Nobody found',
|
|
21
28
|
'input.placeholder': 'Type message',
|
|
@@ -25,6 +32,10 @@ const en: UiStringTable = {
|
|
|
25
32
|
'date.yesterday': 'Yesterday',
|
|
26
33
|
'message.deleted': 'Message deleted',
|
|
27
34
|
'message.edited': 'edited',
|
|
35
|
+
'message.sending': 'sending...',
|
|
36
|
+
'message.failedRetry': '! Failed — tap to retry',
|
|
37
|
+
'thread.title': 'Thread',
|
|
38
|
+
'thread.alsoSendTo': 'Also send to',
|
|
28
39
|
'e2ee.roomEncrypted': 'End-to-end encrypted',
|
|
29
40
|
'e2ee.notEncrypted': 'Not encrypted',
|
|
30
41
|
'e2ee.notEncryptedHint': 'Sent without end-to-end encryption, because no recipient has published a key yet.',
|
|
@@ -173,6 +184,10 @@ const en: UiStringTable = {
|
|
|
173
184
|
'settings.menu.title': 'Settings',
|
|
174
185
|
'modal.filePreview.title': 'File preview',
|
|
175
186
|
'toast.error': 'Error',
|
|
187
|
+
'toast.failedToCreateRoom': 'Failed to create room',
|
|
188
|
+
'toast.copied': 'Copied to clipboard!',
|
|
189
|
+
'toast.copyFailed': 'Copy failed',
|
|
190
|
+
'toast.saveSuccessful': 'Save successful',
|
|
176
191
|
'toast.couldNotOpenPrivateChat': 'Could not open the new private chat',
|
|
177
192
|
'toast.couldNotResolveRecipient': 'Could not resolve recipient',
|
|
178
193
|
'toast.failedToCreatePrivateChat': 'Failed to create private chat',
|
|
@@ -240,6 +255,8 @@ const en: UiStringTable = {
|
|
|
240
255
|
'modal.chatProfile.removeMember': 'Remove from this chat?',
|
|
241
256
|
'modal.chatProfile.memberListUnavailable': 'Member list unavailable',
|
|
242
257
|
'modal.deleteChat.title': 'Delete this chat ?',
|
|
258
|
+
'modal.deleteMessage.title': 'Delete message',
|
|
259
|
+
'modal.deleteMessage.description': 'Are you sure you want to delete this message?',
|
|
243
260
|
'modal.addMembers.title': 'Add New Member',
|
|
244
261
|
'modal.addMembers.userIdPlaceholder': 'Enter User Id',
|
|
245
262
|
'modal.leaveChat.title': 'Leave Chat',
|
|
@@ -276,6 +293,22 @@ const en: UiStringTable = {
|
|
|
276
293
|
'settings.notifications.title': 'Notifications',
|
|
277
294
|
'settings.notifications.push': 'Push notifications',
|
|
278
295
|
'settings.notifications.pushHint': 'New messages and calls wake this device even when the app is closed.',
|
|
296
|
+
'settings.language.app': 'App language',
|
|
297
|
+
'settings.language.appHint': 'The language of the interface.',
|
|
298
|
+
'settings.language.chat': 'Chat language',
|
|
299
|
+
'settings.language.chatHint': 'Messages are translated into this language.',
|
|
300
|
+
'settings.password.title': 'Change password',
|
|
301
|
+
'settings.password.current': 'Current password',
|
|
302
|
+
'settings.password.new': 'New password',
|
|
303
|
+
'settings.password.again': 'Repeat new password',
|
|
304
|
+
'settings.password.submit': 'Change password',
|
|
305
|
+
'settings.password.changed': 'Password changed',
|
|
306
|
+
'settings.password.wrongCurrent': 'The current password is not right',
|
|
307
|
+
'settings.password.failed': 'The password could not be changed',
|
|
308
|
+
'settings.password.tooShort': 'At least {min} characters',
|
|
309
|
+
'settings.password.sameAsCurrent': 'Must differ from the current password',
|
|
310
|
+
'settings.password.mismatch': 'The passwords do not match',
|
|
311
|
+
'settings.password.hint': 'Use the new password the next time you sign in.',
|
|
279
312
|
'settings.visibility.title': 'Visibility',
|
|
280
313
|
'settings.visibility.profileLabel': 'Profile Visibility',
|
|
281
314
|
'settings.visibility.open': 'Open (default)',
|
|
@@ -304,6 +337,13 @@ const en: UiStringTable = {
|
|
|
304
337
|
const fr: UiStringTable = {
|
|
305
338
|
'search.placeholder': 'Rechercher...',
|
|
306
339
|
'roomList.title': 'Discussions',
|
|
340
|
+
'connection.connecting': 'Connexion…',
|
|
341
|
+
'connection.updating': 'Mise à jour…',
|
|
342
|
+
'menu.newChat': 'Nouvelle discussion',
|
|
343
|
+
'menu.profile': 'Profil',
|
|
344
|
+
'menu.settings': 'Paramètres',
|
|
345
|
+
'menu.logout': 'Se déconnecter',
|
|
346
|
+
'menu.logoutConfirm': 'Voulez-vous vraiment vous déconnecter ?',
|
|
307
347
|
'search.members': 'Rechercher des membres',
|
|
308
348
|
'search.noResults': 'Personne trouvée',
|
|
309
349
|
'input.placeholder': 'Écrire un message',
|
|
@@ -313,6 +353,10 @@ const fr: UiStringTable = {
|
|
|
313
353
|
'date.yesterday': 'Hier',
|
|
314
354
|
'message.deleted': 'Message supprimé',
|
|
315
355
|
'message.edited': 'modifié',
|
|
356
|
+
'message.sending': 'envoi...',
|
|
357
|
+
'message.failedRetry': '! Échec — touchez pour réessayer',
|
|
358
|
+
'thread.title': 'Fil',
|
|
359
|
+
'thread.alsoSendTo': 'Envoyer aussi dans',
|
|
316
360
|
'e2ee.roomEncrypted': 'Chiffré de bout en bout',
|
|
317
361
|
'e2ee.notEncrypted': 'Non chiffré',
|
|
318
362
|
'e2ee.notEncryptedHint': "Envoyé sans chiffrement de bout en bout, car aucun destinataire n'a encore publié de clé.",
|
|
@@ -461,6 +505,10 @@ const fr: UiStringTable = {
|
|
|
461
505
|
'settings.menu.title': 'Paramètres',
|
|
462
506
|
'modal.filePreview.title': 'Aperçu du fichier',
|
|
463
507
|
'toast.error': 'Erreur',
|
|
508
|
+
'toast.failedToCreateRoom': 'Impossible de créer le salon',
|
|
509
|
+
'toast.copied': 'Copié dans le presse-papiers !',
|
|
510
|
+
'toast.copyFailed': 'Échec de la copie',
|
|
511
|
+
'toast.saveSuccessful': 'Enregistré',
|
|
464
512
|
'toast.couldNotOpenPrivateChat': "Impossible d'ouvrir la nouvelle discussion privée",
|
|
465
513
|
'toast.couldNotResolveRecipient': 'Impossible de résoudre le destinataire',
|
|
466
514
|
'toast.failedToCreatePrivateChat': 'Échec de la création de la discussion privée',
|
|
@@ -528,6 +576,8 @@ const fr: UiStringTable = {
|
|
|
528
576
|
'modal.chatProfile.removeMember': 'Retirer de cette discussion ?',
|
|
529
577
|
'modal.chatProfile.memberListUnavailable': 'Liste des membres indisponible',
|
|
530
578
|
'modal.deleteChat.title': 'Supprimer cette discussion ?',
|
|
579
|
+
'modal.deleteMessage.title': 'Supprimer le message',
|
|
580
|
+
'modal.deleteMessage.description': 'Voulez-vous vraiment supprimer ce message ?',
|
|
531
581
|
'modal.addMembers.title': 'Ajouter un nouveau membre',
|
|
532
582
|
'modal.addMembers.userIdPlaceholder': "Entrez l'ID utilisateur",
|
|
533
583
|
'modal.leaveChat.title': 'Quitter la discussion',
|
|
@@ -564,6 +614,22 @@ const fr: UiStringTable = {
|
|
|
564
614
|
'settings.notifications.title': 'Notifications',
|
|
565
615
|
'settings.notifications.push': 'Notifications push',
|
|
566
616
|
'settings.notifications.pushHint': 'Les nouveaux messages et appels réveillent cet appareil même quand l\'application est fermée.',
|
|
617
|
+
'settings.language.app': "Langue de l'application",
|
|
618
|
+
'settings.language.appHint': "La langue de l'interface.",
|
|
619
|
+
'settings.language.chat': 'Langue du chat',
|
|
620
|
+
'settings.language.chatHint': 'Les messages sont traduits dans cette langue.',
|
|
621
|
+
'settings.password.title': 'Changer le mot de passe',
|
|
622
|
+
'settings.password.current': 'Mot de passe actuel',
|
|
623
|
+
'settings.password.new': 'Nouveau mot de passe',
|
|
624
|
+
'settings.password.again': 'Répéter le nouveau mot de passe',
|
|
625
|
+
'settings.password.submit': 'Changer le mot de passe',
|
|
626
|
+
'settings.password.changed': 'Mot de passe modifié',
|
|
627
|
+
'settings.password.wrongCurrent': 'Le mot de passe actuel est incorrect',
|
|
628
|
+
'settings.password.failed': "Le mot de passe n'a pas pu être modifié",
|
|
629
|
+
'settings.password.tooShort': 'Au moins {min} caractères',
|
|
630
|
+
'settings.password.sameAsCurrent': 'Doit être différent du mot de passe actuel',
|
|
631
|
+
'settings.password.mismatch': 'Les mots de passe ne correspondent pas',
|
|
632
|
+
'settings.password.hint': 'Utilisez le nouveau mot de passe à votre prochaine connexion.',
|
|
567
633
|
'settings.visibility.title': 'Visibilité',
|
|
568
634
|
'settings.visibility.profileLabel': 'Visibilité du profil',
|
|
569
635
|
'settings.visibility.open': 'Ouvert (par défaut)',
|
|
@@ -591,7 +657,14 @@ const fr: UiStringTable = {
|
|
|
591
657
|
|
|
592
658
|
const es: UiStringTable = {
|
|
593
659
|
'search.placeholder': 'Buscar...',
|
|
594
|
-
'roomList.title': '
|
|
660
|
+
'roomList.title': 'Conversaciones',
|
|
661
|
+
'connection.connecting': 'Conectando…',
|
|
662
|
+
'connection.updating': 'Actualizando…',
|
|
663
|
+
'menu.newChat': 'Nuevo chat',
|
|
664
|
+
'menu.profile': 'Perfil',
|
|
665
|
+
'menu.settings': 'Configuración',
|
|
666
|
+
'menu.logout': 'Cerrar sesión',
|
|
667
|
+
'menu.logoutConfirm': '¿Seguro que quieres cerrar sesión?',
|
|
595
668
|
'search.members': 'Buscar miembros',
|
|
596
669
|
'search.noResults': 'No se encontró a nadie',
|
|
597
670
|
'input.placeholder': 'Escribe un mensaje',
|
|
@@ -601,6 +674,10 @@ const es: UiStringTable = {
|
|
|
601
674
|
'date.yesterday': 'Ayer',
|
|
602
675
|
'message.deleted': 'Mensaje eliminado',
|
|
603
676
|
'message.edited': 'editado',
|
|
677
|
+
'message.sending': 'enviando...',
|
|
678
|
+
'message.failedRetry': '! Error — toca para reintentar',
|
|
679
|
+
'thread.title': 'Hilo',
|
|
680
|
+
'thread.alsoSendTo': 'Enviar también a',
|
|
604
681
|
'e2ee.roomEncrypted': 'Cifrado de extremo a extremo',
|
|
605
682
|
'e2ee.notEncrypted': 'Sin cifrar',
|
|
606
683
|
'e2ee.notEncryptedHint': 'Enviado sin cifrado de extremo a extremo, porque ningún destinatario ha publicado una clave todavía.',
|
|
@@ -749,6 +826,10 @@ const es: UiStringTable = {
|
|
|
749
826
|
'settings.menu.title': 'Configuración',
|
|
750
827
|
'modal.filePreview.title': 'Vista previa del archivo',
|
|
751
828
|
'toast.error': 'Error',
|
|
829
|
+
'toast.failedToCreateRoom': 'No se pudo crear la sala',
|
|
830
|
+
'toast.copied': '¡Copiado al portapapeles!',
|
|
831
|
+
'toast.copyFailed': 'No se pudo copiar',
|
|
832
|
+
'toast.saveSuccessful': 'Guardado correctamente',
|
|
752
833
|
'toast.couldNotOpenPrivateChat': 'No se pudo abrir el nuevo chat privado',
|
|
753
834
|
'toast.couldNotResolveRecipient': 'No se pudo resolver el destinatario',
|
|
754
835
|
'toast.failedToCreatePrivateChat': 'No se pudo crear el chat privado',
|
|
@@ -816,6 +897,8 @@ const es: UiStringTable = {
|
|
|
816
897
|
'modal.chatProfile.removeMember': '¿Quitar de este chat?',
|
|
817
898
|
'modal.chatProfile.memberListUnavailable': 'Lista de miembros no disponible',
|
|
818
899
|
'modal.deleteChat.title': '¿Eliminar este chat?',
|
|
900
|
+
'modal.deleteMessage.title': 'Eliminar mensaje',
|
|
901
|
+
'modal.deleteMessage.description': '¿Seguro que quieres eliminar este mensaje?',
|
|
819
902
|
'modal.addMembers.title': 'Añadir nuevo miembro',
|
|
820
903
|
'modal.addMembers.userIdPlaceholder': 'Introduce el ID de usuario',
|
|
821
904
|
'modal.leaveChat.title': 'Salir del chat',
|
|
@@ -852,6 +935,22 @@ const es: UiStringTable = {
|
|
|
852
935
|
'settings.notifications.title': 'Notificaciones',
|
|
853
936
|
'settings.notifications.push': 'Notificaciones push',
|
|
854
937
|
'settings.notifications.pushHint': 'Los mensajes y llamadas nuevos despiertan este dispositivo incluso con la aplicación cerrada.',
|
|
938
|
+
'settings.language.app': 'Idioma de la aplicación',
|
|
939
|
+
'settings.language.appHint': 'El idioma de la interfaz.',
|
|
940
|
+
'settings.language.chat': 'Idioma del chat',
|
|
941
|
+
'settings.language.chatHint': 'Los mensajes se traducen a este idioma.',
|
|
942
|
+
'settings.password.title': 'Cambiar contraseña',
|
|
943
|
+
'settings.password.current': 'Contraseña actual',
|
|
944
|
+
'settings.password.new': 'Nueva contraseña',
|
|
945
|
+
'settings.password.again': 'Repetir la nueva contraseña',
|
|
946
|
+
'settings.password.submit': 'Cambiar contraseña',
|
|
947
|
+
'settings.password.changed': 'Contraseña cambiada',
|
|
948
|
+
'settings.password.wrongCurrent': 'La contraseña actual no es correcta',
|
|
949
|
+
'settings.password.failed': 'No se pudo cambiar la contraseña',
|
|
950
|
+
'settings.password.tooShort': 'Al menos {min} caracteres',
|
|
951
|
+
'settings.password.sameAsCurrent': 'Debe ser distinta de la contraseña actual',
|
|
952
|
+
'settings.password.mismatch': 'Las contraseñas no coinciden',
|
|
953
|
+
'settings.password.hint': 'Usa la nueva contraseña la próxima vez que inicies sesión.',
|
|
855
954
|
'settings.visibility.title': 'Visibilidad',
|
|
856
955
|
'settings.visibility.profileLabel': 'Visibilidad del perfil',
|
|
857
956
|
'settings.visibility.open': 'Abierto (predeterminado)',
|
|
@@ -880,6 +979,13 @@ const es: UiStringTable = {
|
|
|
880
979
|
const pt: UiStringTable = {
|
|
881
980
|
'search.placeholder': 'Pesquisar...',
|
|
882
981
|
'roomList.title': 'Conversas',
|
|
982
|
+
'connection.connecting': 'A ligar…',
|
|
983
|
+
'connection.updating': 'A atualizar…',
|
|
984
|
+
'menu.newChat': 'Nova conversa',
|
|
985
|
+
'menu.profile': 'Perfil',
|
|
986
|
+
'menu.settings': 'Definições',
|
|
987
|
+
'menu.logout': 'Terminar sessão',
|
|
988
|
+
'menu.logoutConfirm': 'Tem a certeza de que quer terminar a sessão?',
|
|
883
989
|
'search.members': 'Pesquisar membros',
|
|
884
990
|
'search.noResults': 'Ninguém encontrado',
|
|
885
991
|
'input.placeholder': 'Escreva uma mensagem',
|
|
@@ -889,6 +995,10 @@ const pt: UiStringTable = {
|
|
|
889
995
|
'date.yesterday': 'Ontem',
|
|
890
996
|
'message.deleted': 'Mensagem eliminada',
|
|
891
997
|
'message.edited': 'editado',
|
|
998
|
+
'message.sending': 'a enviar...',
|
|
999
|
+
'message.failedRetry': '! Falhou — toque para tentar de novo',
|
|
1000
|
+
'thread.title': 'Tópico',
|
|
1001
|
+
'thread.alsoSendTo': 'Enviar também para',
|
|
892
1002
|
'e2ee.roomEncrypted': 'Criptografado de ponta a ponta',
|
|
893
1003
|
'e2ee.notEncrypted': 'Sem criptografia',
|
|
894
1004
|
'e2ee.notEncryptedHint': 'Enviado sem criptografia de ponta a ponta, porque nenhum destinatário publicou uma chave ainda.',
|
|
@@ -1037,6 +1147,10 @@ const pt: UiStringTable = {
|
|
|
1037
1147
|
'settings.menu.title': 'Definições',
|
|
1038
1148
|
'modal.filePreview.title': 'Pré-visualização do ficheiro',
|
|
1039
1149
|
'toast.error': 'Erro',
|
|
1150
|
+
'toast.failedToCreateRoom': 'Falha ao criar a sala',
|
|
1151
|
+
'toast.copied': 'Copiado para a área de transferência!',
|
|
1152
|
+
'toast.copyFailed': 'Falha ao copiar',
|
|
1153
|
+
'toast.saveSuccessful': 'Guardado com sucesso',
|
|
1040
1154
|
'toast.couldNotOpenPrivateChat': 'Não foi possível abrir o novo chat privado',
|
|
1041
1155
|
'toast.couldNotResolveRecipient': 'Não foi possível identificar o destinatário',
|
|
1042
1156
|
'toast.failedToCreatePrivateChat': 'Falha ao criar o chat privado',
|
|
@@ -1104,6 +1218,8 @@ const pt: UiStringTable = {
|
|
|
1104
1218
|
'modal.chatProfile.removeMember': 'Remover deste chat?',
|
|
1105
1219
|
'modal.chatProfile.memberListUnavailable': 'Lista de membros indisponível',
|
|
1106
1220
|
'modal.deleteChat.title': 'Eliminar este chat?',
|
|
1221
|
+
'modal.deleteMessage.title': 'Eliminar mensagem',
|
|
1222
|
+
'modal.deleteMessage.description': 'Tem a certeza de que quer eliminar esta mensagem?',
|
|
1107
1223
|
'modal.addMembers.title': 'Adicionar novo membro',
|
|
1108
1224
|
'modal.addMembers.userIdPlaceholder': 'Introduza o ID do utilizador',
|
|
1109
1225
|
'modal.leaveChat.title': 'Sair do chat',
|
|
@@ -1140,6 +1256,22 @@ const pt: UiStringTable = {
|
|
|
1140
1256
|
'settings.notifications.title': 'Notificações',
|
|
1141
1257
|
'settings.notifications.push': 'Notificações push',
|
|
1142
1258
|
'settings.notifications.pushHint': 'Novas mensagens e chamadas acordam este dispositivo mesmo com o aplicativo fechado.',
|
|
1259
|
+
'settings.language.app': 'Idioma do aplicativo',
|
|
1260
|
+
'settings.language.appHint': 'O idioma da interface.',
|
|
1261
|
+
'settings.language.chat': 'Idioma do chat',
|
|
1262
|
+
'settings.language.chatHint': 'As mensagens são traduzidas para este idioma.',
|
|
1263
|
+
'settings.password.title': 'Alterar senha',
|
|
1264
|
+
'settings.password.current': 'Senha atual',
|
|
1265
|
+
'settings.password.new': 'Nova senha',
|
|
1266
|
+
'settings.password.again': 'Repetir a nova senha',
|
|
1267
|
+
'settings.password.submit': 'Alterar senha',
|
|
1268
|
+
'settings.password.changed': 'Senha alterada',
|
|
1269
|
+
'settings.password.wrongCurrent': 'A senha atual não está correta',
|
|
1270
|
+
'settings.password.failed': 'Não foi possível alterar a senha',
|
|
1271
|
+
'settings.password.tooShort': 'Pelo menos {min} caracteres',
|
|
1272
|
+
'settings.password.sameAsCurrent': 'Deve ser diferente da senha atual',
|
|
1273
|
+
'settings.password.mismatch': 'As senhas não coincidem',
|
|
1274
|
+
'settings.password.hint': 'Use a nova senha na próxima vez que entrar.',
|
|
1143
1275
|
'settings.visibility.title': 'Visibilidade',
|
|
1144
1276
|
'settings.visibility.profileLabel': 'Visibilidade do perfil',
|
|
1145
1277
|
'settings.visibility.open': 'Aberto (predefinição)',
|
|
@@ -1168,6 +1300,13 @@ const pt: UiStringTable = {
|
|
|
1168
1300
|
const ht: UiStringTable = {
|
|
1169
1301
|
'search.placeholder': 'Chèche...',
|
|
1170
1302
|
'roomList.title': 'Chat yo',
|
|
1303
|
+
'connection.connecting': 'Ap konekte…',
|
|
1304
|
+
'connection.updating': 'Ap mete ajou…',
|
|
1305
|
+
'menu.newChat': 'Nouvo chat',
|
|
1306
|
+
'menu.profile': 'Pwofil',
|
|
1307
|
+
'menu.settings': 'Paramèt',
|
|
1308
|
+
'menu.logout': 'Dekonekte',
|
|
1309
|
+
'menu.logoutConfirm': 'Èske ou sèten ou vle dekonekte?',
|
|
1171
1310
|
'search.members': 'Chèche manm',
|
|
1172
1311
|
'search.noResults': 'Pa jwenn pèsonn',
|
|
1173
1312
|
'input.placeholder': 'Ekri yon mesaj',
|
|
@@ -1177,6 +1316,10 @@ const ht: UiStringTable = {
|
|
|
1177
1316
|
'date.yesterday': 'Yè',
|
|
1178
1317
|
'message.deleted': 'Mesaj efase',
|
|
1179
1318
|
'message.edited': 'modifye',
|
|
1319
|
+
'message.sending': 'ap voye...',
|
|
1320
|
+
'message.failedRetry': '! Echwe — tape pou eseye ankò',
|
|
1321
|
+
'thread.title': 'Fil',
|
|
1322
|
+
'thread.alsoSendTo': 'Voye tou nan',
|
|
1180
1323
|
'e2ee.roomEncrypted': 'Chifre bout-a-bout',
|
|
1181
1324
|
'e2ee.notEncrypted': 'Pa chifre',
|
|
1182
1325
|
'e2ee.notEncryptedHint': 'Voye san chifraj bout-a-bout, paske okenn moun ki resevwa a poko pibliye yon kle.',
|
|
@@ -1325,6 +1468,10 @@ const ht: UiStringTable = {
|
|
|
1325
1468
|
'settings.menu.title': 'Paramèt',
|
|
1326
1469
|
'modal.filePreview.title': 'Apèsi fichye',
|
|
1327
1470
|
'toast.error': 'Erè',
|
|
1471
|
+
'toast.failedToCreateRoom': 'Echwe pou kreye sal la',
|
|
1472
|
+
'toast.copied': 'Kopye nan clipboard la!',
|
|
1473
|
+
'toast.copyFailed': 'Kopi a echwe',
|
|
1474
|
+
'toast.saveSuccessful': 'Anrejistre avèk siksè',
|
|
1328
1475
|
'toast.couldNotOpenPrivateChat': 'Pa t kapab louvri nouvo chat prive a',
|
|
1329
1476
|
'toast.couldNotResolveRecipient': 'Pa t kapab jwenn destinatè a',
|
|
1330
1477
|
'toast.failedToCreatePrivateChat': 'Echèk pou kreye chat prive a',
|
|
@@ -1392,6 +1539,8 @@ const ht: UiStringTable = {
|
|
|
1392
1539
|
'modal.chatProfile.removeMember': 'Retire nan chat sa a?',
|
|
1393
1540
|
'modal.chatProfile.memberListUnavailable': 'Lis manm yo pa disponib',
|
|
1394
1541
|
'modal.deleteChat.title': 'Efase chat sa a?',
|
|
1542
|
+
'modal.deleteMessage.title': 'Efase mesaj',
|
|
1543
|
+
'modal.deleteMessage.description': 'Èske ou sèten ou vle efase mesaj sa a?',
|
|
1395
1544
|
'modal.addMembers.title': 'Ajoute yon nouvo manm',
|
|
1396
1545
|
'modal.addMembers.userIdPlaceholder': 'Antre ID itilizatè a',
|
|
1397
1546
|
'modal.leaveChat.title': 'Kite chat la',
|
|
@@ -1428,6 +1577,22 @@ const ht: UiStringTable = {
|
|
|
1428
1577
|
'settings.notifications.title': 'Notifikasyon',
|
|
1429
1578
|
'settings.notifications.push': 'Notifikasyon push',
|
|
1430
1579
|
'settings.notifications.pushHint': 'Nouvo mesaj ak apèl reveye aparèy sa a menm lè aplikasyon an fèmen.',
|
|
1580
|
+
'settings.language.app': 'Lang aplikasyon an',
|
|
1581
|
+
'settings.language.appHint': 'Lang entèfas la.',
|
|
1582
|
+
'settings.language.chat': 'Lang chat la',
|
|
1583
|
+
'settings.language.chatHint': 'Mesaj yo tradui nan lang sa a.',
|
|
1584
|
+
'settings.password.title': 'Chanje modpas',
|
|
1585
|
+
'settings.password.current': 'Modpas aktyèl',
|
|
1586
|
+
'settings.password.new': 'Nouvo modpas',
|
|
1587
|
+
'settings.password.again': 'Repete nouvo modpas la',
|
|
1588
|
+
'settings.password.submit': 'Chanje modpas',
|
|
1589
|
+
'settings.password.changed': 'Modpas chanje',
|
|
1590
|
+
'settings.password.wrongCurrent': 'Modpas aktyèl la pa kòrèk',
|
|
1591
|
+
'settings.password.failed': 'Modpas la pa t ka chanje',
|
|
1592
|
+
'settings.password.tooShort': 'Omwen {min} karaktè',
|
|
1593
|
+
'settings.password.sameAsCurrent': 'Dwe diferan de modpas aktyèl la',
|
|
1594
|
+
'settings.password.mismatch': 'Modpas yo pa menm',
|
|
1595
|
+
'settings.password.hint': 'Sèvi ak nouvo modpas la pwochen fwa ou konekte.',
|
|
1431
1596
|
'settings.visibility.title': 'Vizibilite',
|
|
1432
1597
|
'settings.visibility.profileLabel': 'Vizibilite pwofil la',
|
|
1433
1598
|
'settings.visibility.open': 'Louvri (default)',
|
|
@@ -1456,6 +1621,13 @@ const ht: UiStringTable = {
|
|
|
1456
1621
|
const zh: UiStringTable = {
|
|
1457
1622
|
'search.placeholder': '搜索...',
|
|
1458
1623
|
'roomList.title': '聊天',
|
|
1624
|
+
'connection.connecting': '连接中…',
|
|
1625
|
+
'connection.updating': '更新中…',
|
|
1626
|
+
'menu.newChat': '新聊天',
|
|
1627
|
+
'menu.profile': '个人资料',
|
|
1628
|
+
'menu.settings': '设置',
|
|
1629
|
+
'menu.logout': '退出登录',
|
|
1630
|
+
'menu.logoutConfirm': '确定要退出登录吗?',
|
|
1459
1631
|
'search.members': '搜索成员',
|
|
1460
1632
|
'search.noResults': '未找到成员',
|
|
1461
1633
|
'input.placeholder': '输入消息',
|
|
@@ -1465,6 +1637,10 @@ const zh: UiStringTable = {
|
|
|
1465
1637
|
'date.yesterday': '昨天',
|
|
1466
1638
|
'message.deleted': '消息已删除',
|
|
1467
1639
|
'message.edited': '已编辑',
|
|
1640
|
+
'message.sending': '发送中...',
|
|
1641
|
+
'message.failedRetry': '! 发送失败 — 点击重试',
|
|
1642
|
+
'thread.title': '话题',
|
|
1643
|
+
'thread.alsoSendTo': '同时发送到',
|
|
1468
1644
|
'e2ee.roomEncrypted': '端到端加密',
|
|
1469
1645
|
'e2ee.notEncrypted': '未加密',
|
|
1470
1646
|
'e2ee.notEncryptedHint': '未使用端到端加密发送,因为还没有收件人发布密钥。',
|
|
@@ -1613,6 +1789,10 @@ const zh: UiStringTable = {
|
|
|
1613
1789
|
'settings.menu.title': '设置',
|
|
1614
1790
|
'modal.filePreview.title': '文件预览',
|
|
1615
1791
|
'toast.error': '错误',
|
|
1792
|
+
'toast.failedToCreateRoom': '创建房间失败',
|
|
1793
|
+
'toast.copied': '已复制到剪贴板!',
|
|
1794
|
+
'toast.copyFailed': '复制失败',
|
|
1795
|
+
'toast.saveSuccessful': '保存成功',
|
|
1616
1796
|
'toast.couldNotOpenPrivateChat': '无法打开新的私聊',
|
|
1617
1797
|
'toast.couldNotResolveRecipient': '无法识别收件人',
|
|
1618
1798
|
'toast.failedToCreatePrivateChat': '创建私聊失败',
|
|
@@ -1680,6 +1860,8 @@ const zh: UiStringTable = {
|
|
|
1680
1860
|
'modal.chatProfile.removeMember': '将其移出该聊天?',
|
|
1681
1861
|
'modal.chatProfile.memberListUnavailable': '成员列表不可用',
|
|
1682
1862
|
'modal.deleteChat.title': '删除此聊天?',
|
|
1863
|
+
'modal.deleteMessage.title': '删除消息',
|
|
1864
|
+
'modal.deleteMessage.description': '确定要删除这条消息吗?',
|
|
1683
1865
|
'modal.addMembers.title': '添加新成员',
|
|
1684
1866
|
'modal.addMembers.userIdPlaceholder': '输入用户 ID',
|
|
1685
1867
|
'modal.leaveChat.title': '退出聊天',
|
|
@@ -1716,6 +1898,22 @@ const zh: UiStringTable = {
|
|
|
1716
1898
|
'settings.notifications.title': '通知',
|
|
1717
1899
|
'settings.notifications.push': '推送通知',
|
|
1718
1900
|
'settings.notifications.pushHint': '即使应用已关闭,新消息和来电也会唤醒此设备。',
|
|
1901
|
+
'settings.language.app': '应用语言',
|
|
1902
|
+
'settings.language.appHint': '界面语言。',
|
|
1903
|
+
'settings.language.chat': '聊天语言',
|
|
1904
|
+
'settings.language.chatHint': '消息会翻译成此语言。',
|
|
1905
|
+
'settings.password.title': '修改密码',
|
|
1906
|
+
'settings.password.current': '当前密码',
|
|
1907
|
+
'settings.password.new': '新密码',
|
|
1908
|
+
'settings.password.again': '再次输入新密码',
|
|
1909
|
+
'settings.password.submit': '修改密码',
|
|
1910
|
+
'settings.password.changed': '密码已修改',
|
|
1911
|
+
'settings.password.wrongCurrent': '当前密码不正确',
|
|
1912
|
+
'settings.password.failed': '无法修改密码',
|
|
1913
|
+
'settings.password.tooShort': '至少 {min} 个字符',
|
|
1914
|
+
'settings.password.sameAsCurrent': '必须与当前密码不同',
|
|
1915
|
+
'settings.password.mismatch': '两次输入的密码不一致',
|
|
1916
|
+
'settings.password.hint': '下次登录时请使用新密码。',
|
|
1719
1917
|
'settings.visibility.title': '可见性',
|
|
1720
1918
|
'settings.visibility.profileLabel': '资料可见性',
|
|
1721
1919
|
'settings.visibility.open': '公开(默认)',
|
package/src/i18n/useT.ts
CHANGED
|
@@ -34,13 +34,15 @@ import { interpolate, resolveStringTable } from './strings';
|
|
|
34
34
|
* own locale - the right default.
|
|
35
35
|
*/
|
|
36
36
|
export const useUiLocale = (): string | undefined => {
|
|
37
|
-
const { config, langSource } = useChatSettingState();
|
|
38
|
-
return config?.i18n?.locale || langSource || undefined;
|
|
37
|
+
const { config, langSource, uiLocale } = useChatSettingState();
|
|
38
|
+
return uiLocale || config?.i18n?.locale || langSource || undefined;
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export const useT = () => {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
// The user's own pick from Settings first (`uiLocale`), then the host's
|
|
43
|
+
// default, then the reader's chat language.
|
|
44
|
+
const { config, langSource, uiLocale } = useChatSettingState();
|
|
45
|
+
const locale = uiLocale || config?.i18n?.locale || langSource;
|
|
44
46
|
const overrides = config?.i18n?.strings;
|
|
45
47
|
|
|
46
48
|
const table = useMemo(
|
|
@@ -59,6 +59,15 @@ export function updateMe(data: any) {
|
|
|
59
59
|
return http.put('/v1/users', data);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Change the account password. The backend checks `currentPassword` and
|
|
64
|
+
* answers with a 4xx and a reason when it does not match or the new one is
|
|
65
|
+
* not acceptable; the caller shows that reason.
|
|
66
|
+
*/
|
|
67
|
+
export function changePassword(currentPassword: string, newPassword: string) {
|
|
68
|
+
return http.put('/v2/users/me/password', { currentPassword, newPassword });
|
|
69
|
+
}
|
|
70
|
+
|
|
62
71
|
export async function updateProfile(fd: FormData): Promise<{ user: User }> {
|
|
63
72
|
const token = store.getState().chatSettingStore.user.token || '';
|
|
64
73
|
|
|
@@ -132,6 +132,7 @@ const onRealtimeMessage = async (stanza: Element) => {
|
|
|
132
132
|
// (stanza handler, not a component), so resolve the locale from the
|
|
133
133
|
// store directly and call `translateKey` instead of `useT()`.
|
|
134
134
|
const locale =
|
|
135
|
+
state.chatSettingStore.uiLocale ||
|
|
135
136
|
state.chatSettingStore.config?.i18n?.locale ||
|
|
136
137
|
state.chatSettingStore.langSource;
|
|
137
138
|
const overrides = state.chatSettingStore.config?.i18n?.strings;
|
|
@@ -29,6 +29,7 @@ import { pushLog as devPushLog, isDevLogActive } from '../utils/devLogger';
|
|
|
29
29
|
import { normalizeRoomJid } from '../helpers/normalizeRoomJid';
|
|
30
30
|
import { store } from '../roomStore';
|
|
31
31
|
import { applyPrivateStoreMarkers } from '../roomStore/roomsSlice';
|
|
32
|
+
import { setConnectionState } from '../roomStore/chatSettingsSlice';
|
|
32
33
|
import {
|
|
33
34
|
clearOutboundSends,
|
|
34
35
|
enqueueOutboundSend,
|
|
@@ -129,7 +130,38 @@ export class XmppClient {
|
|
|
129
130
|
service: string = '';
|
|
130
131
|
conference: string = '';
|
|
131
132
|
username: string;
|
|
132
|
-
|
|
133
|
+
private _status: 'offline' | 'connecting' | 'online' | 'error' = 'offline';
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* The stream's state. Every change is mirrored into the store
|
|
137
|
+
* (`chatSettingStore.connection`) so the headers can say "Connecting…":
|
|
138
|
+
* a class field is nothing React can follow. `offline` and `error` are
|
|
139
|
+
* reported as `connecting` while a retry is scheduled - that is what the
|
|
140
|
+
* user is waiting for - and as `offline` only once nothing will try
|
|
141
|
+
* (logout, unmount).
|
|
142
|
+
*/
|
|
143
|
+
get status(): 'offline' | 'connecting' | 'online' | 'error' {
|
|
144
|
+
return this._status;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
set status(next: 'offline' | 'connecting' | 'online' | 'error') {
|
|
148
|
+
const changed = next !== this._status;
|
|
149
|
+
this._status = next;
|
|
150
|
+
if (!changed) {return;}
|
|
151
|
+
try {
|
|
152
|
+
const reported =
|
|
153
|
+
next === 'online'
|
|
154
|
+
? 'online'
|
|
155
|
+
: next === 'connecting' || !this.suppressReconnect
|
|
156
|
+
? 'connecting'
|
|
157
|
+
: 'offline';
|
|
158
|
+
if (store.getState().chatSettingStore.connection !== reported) {
|
|
159
|
+
store.dispatch(setConnectionState(reported));
|
|
160
|
+
}
|
|
161
|
+
} catch {
|
|
162
|
+
/* no store in some test harnesses */
|
|
163
|
+
}
|
|
164
|
+
}
|
|
133
165
|
|
|
134
166
|
password = '';
|
|
135
167
|
reconnectAttempts = 0;
|
|
@@ -38,8 +38,24 @@ export interface ChatState {
|
|
|
38
38
|
themePreference?: ThemePreference;
|
|
39
39
|
/** Push notifications toggle from Settings. `undefined` = on. */
|
|
40
40
|
pushEnabled?: boolean;
|
|
41
|
+
/**
|
|
42
|
+
* The interface language the user picked in Settings (BCP-47, e.g.
|
|
43
|
+
* "fr-CA") - the backend's `user.appLanguage`. Wins over the host's
|
|
44
|
+
* `config.i18n.locale`, which is the default for a user who never chose.
|
|
45
|
+
*/
|
|
46
|
+
uiLocale?: string;
|
|
47
|
+
/**
|
|
48
|
+
* Where the XMPP session stands, for the headers: `connecting` until the
|
|
49
|
+
* stream is up (also while it is being re-established), `syncing` while
|
|
50
|
+
* rooms are re-joined and the archive caught up after a (re)connect,
|
|
51
|
+
* `online` once that is done, `offline` when the stream is down and
|
|
52
|
+
* nothing is trying (logged out).
|
|
53
|
+
*/
|
|
54
|
+
connection?: ConnectionState;
|
|
41
55
|
}
|
|
42
56
|
|
|
57
|
+
export type ConnectionState = 'connecting' | 'syncing' | 'online' | 'offline';
|
|
58
|
+
|
|
43
59
|
export const unpackAndTransform = (input?: User): User => {
|
|
44
60
|
return {
|
|
45
61
|
// Was hardcoded to '' — every setUser dropped the user's own bio, so
|
|
@@ -219,6 +235,18 @@ const reducers = {
|
|
|
219
235
|
) => {
|
|
220
236
|
state.translateMode = action.payload;
|
|
221
237
|
},
|
|
238
|
+
setUiLocale: (
|
|
239
|
+
state: WritableDraft<ChatState>,
|
|
240
|
+
action: PayloadAction<string | undefined>
|
|
241
|
+
) => {
|
|
242
|
+
state.uiLocale = action.payload || undefined;
|
|
243
|
+
},
|
|
244
|
+
setConnectionState: (
|
|
245
|
+
state: WritableDraft<ChatState>,
|
|
246
|
+
action: PayloadAction<ConnectionState>
|
|
247
|
+
) => {
|
|
248
|
+
state.connection = action.payload;
|
|
249
|
+
},
|
|
222
250
|
};
|
|
223
251
|
|
|
224
252
|
export const chatSlice: Slice<ChatState, typeof reducers, 'chat'> = createSlice({
|
|
@@ -242,6 +270,8 @@ export const {
|
|
|
242
270
|
setTranslateMode,
|
|
243
271
|
setThemePreference,
|
|
244
272
|
setPushEnabled,
|
|
273
|
+
setUiLocale,
|
|
274
|
+
setConnectionState,
|
|
245
275
|
} = chatSlice.actions;
|
|
246
276
|
|
|
247
277
|
export default chatSlice.reducer;
|