@ethora/chat-component-rn 26.8.6 → 26.8.8

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.
Files changed (537) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +64 -2
  3. package/lib/commonjs/assets/icons.js +4 -2
  4. package/lib/commonjs/assets/icons.js.map +1 -1
  5. package/lib/commonjs/components/MainComponents/ChatHeader.js +28 -6
  6. package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
  7. package/lib/commonjs/components/MainComponents/ChatRoom.js +9 -1
  8. package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
  9. package/lib/commonjs/components/MainComponents/ChatWrapper.js +5 -3
  10. package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
  11. package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
  12. package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
  13. package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
  14. package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
  15. package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
  16. package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
  17. package/lib/commonjs/components/MainComponents/ReduxWrapper.js +13 -0
  18. package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
  19. package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
  20. package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
  21. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js +26 -13
  22. package/lib/commonjs/components/Menu/HeaderRoomListMenu.js.map +1 -1
  23. package/lib/commonjs/components/MenuRoom/MenuRoom.js +5 -3
  24. package/lib/commonjs/components/MenuRoom/MenuRoom.js.map +1 -1
  25. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +2 -1
  26. package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  27. package/lib/commonjs/components/MessageBubble/Message.js +69 -9
  28. package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
  29. package/lib/commonjs/components/MessageBubble/MessageInteractions.js +7 -4
  30. package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
  31. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +8 -5
  32. package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  33. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js +2 -2
  34. package/lib/commonjs/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  35. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +166 -21
  36. package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  37. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
  38. package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  39. package/lib/commonjs/components/Modals/Modal/Modal.js +33 -11
  40. package/lib/commonjs/components/Modals/Modal/Modal.js.map +1 -1
  41. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js +8 -8
  42. package/lib/commonjs/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  43. package/lib/commonjs/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js +279 -0
  44. package/lib/commonjs/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js.map +1 -0
  45. package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +10 -8
  46. package/lib/commonjs/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
  47. package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js +13 -11
  48. package/lib/commonjs/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
  49. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +50 -15
  50. package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  51. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js +121 -0
  52. package/lib/commonjs/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -0
  53. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +10 -1
  54. package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  55. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +32 -9
  56. package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
  57. package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
  58. package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
  59. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
  60. package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  61. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
  62. package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  63. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
  64. package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  65. package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
  66. package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
  67. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
  68. package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  69. package/lib/commonjs/components/Thread/ThreadWrapper.js +56 -46
  70. package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
  71. package/lib/commonjs/components/UsersList/UsersList.js +2 -1
  72. package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
  73. package/lib/commonjs/components/styled/SendInput.js +4 -2
  74. package/lib/commonjs/components/styled/SendInput.js.map +1 -1
  75. package/lib/commonjs/e2ee/crypto.js +207 -0
  76. package/lib/commonjs/e2ee/crypto.js.map +1 -0
  77. package/lib/commonjs/e2ee/deviceStore.js +84 -0
  78. package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
  79. package/lib/commonjs/e2ee/fileCipher.js +95 -0
  80. package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
  81. package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
  82. package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
  83. package/lib/commonjs/e2ee/index.js +210 -0
  84. package/lib/commonjs/e2ee/index.js.map +1 -0
  85. package/lib/commonjs/e2ee/limits.js +9 -0
  86. package/lib/commonjs/e2ee/limits.js.map +1 -0
  87. package/lib/commonjs/e2ee/ns.js +8 -0
  88. package/lib/commonjs/e2ee/ns.js.map +1 -0
  89. package/lib/commonjs/e2ee/omemo.js +622 -0
  90. package/lib/commonjs/e2ee/omemo.js.map +1 -0
  91. package/lib/commonjs/e2ee/protobuf.js +149 -0
  92. package/lib/commonjs/e2ee/protobuf.js.map +1 -0
  93. package/lib/commonjs/e2ee/ratchet.js +238 -0
  94. package/lib/commonjs/e2ee/ratchet.js.map +1 -0
  95. package/lib/commonjs/e2ee/sealedBody.js +23 -0
  96. package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
  97. package/lib/commonjs/e2ee/sealedFiles.js +174 -0
  98. package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
  99. package/lib/commonjs/e2ee/send.js +54 -0
  100. package/lib/commonjs/e2ee/send.js.map +1 -0
  101. package/lib/commonjs/e2ee/stanza.js +114 -0
  102. package/lib/commonjs/e2ee/stanza.js.map +1 -0
  103. package/lib/commonjs/e2ee/store.js +43 -0
  104. package/lib/commonjs/e2ee/store.js.map +1 -0
  105. package/lib/commonjs/helpers/accountName.js +23 -0
  106. package/lib/commonjs/helpers/accountName.js.map +1 -0
  107. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js +2 -0
  108. package/lib/commonjs/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  109. package/lib/commonjs/helpers/constants/MODAL_TYPES.js +1 -0
  110. package/lib/commonjs/helpers/constants/MODAL_TYPES.js.map +1 -1
  111. package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
  112. package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
  113. package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
  114. package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
  115. package/lib/commonjs/helpers/displayName.js +16 -0
  116. package/lib/commonjs/helpers/displayName.js.map +1 -0
  117. package/lib/commonjs/helpers/persistCrypto.js +5 -0
  118. package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
  119. package/lib/commonjs/helpers/preferencesStorage.js.map +1 -1
  120. package/lib/commonjs/helpers/secureKeyValue.js +20 -0
  121. package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
  122. package/lib/commonjs/helpers/videoCache.js +136 -0
  123. package/lib/commonjs/helpers/videoCache.js.map +1 -0
  124. package/lib/commonjs/hooks/useChatSettingState.js +2 -0
  125. package/lib/commonjs/hooks/useChatSettingState.js.map +1 -1
  126. package/lib/commonjs/hooks/useChatWrapperInit.js +4 -0
  127. package/lib/commonjs/hooks/useChatWrapperInit.js.map +1 -1
  128. package/lib/commonjs/hooks/useLogout.js +8 -0
  129. package/lib/commonjs/hooks/useLogout.js.map +1 -1
  130. package/lib/commonjs/hooks/useSendMessage.js +71 -7
  131. package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
  132. package/lib/commonjs/i18n/strings.js +367 -1
  133. package/lib/commonjs/i18n/strings.js.map +1 -1
  134. package/lib/commonjs/i18n/useT.js +8 -4
  135. package/lib/commonjs/i18n/useT.js.map +1 -1
  136. package/lib/commonjs/main.js +13 -0
  137. package/lib/commonjs/main.js.map +1 -1
  138. package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
  139. package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
  140. package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
  141. package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
  142. package/lib/commonjs/networking/api-requests/user.api.js +13 -0
  143. package/lib/commonjs/networking/api-requests/user.api.js.map +1 -1
  144. package/lib/commonjs/networking/stanzaHandlers.js +1 -1
  145. package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
  146. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +40 -0
  147. package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  148. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
  149. package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  150. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
  151. package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  152. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
  153. package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  154. package/lib/commonjs/networking/xmppClient.js +6 -0
  155. package/lib/commonjs/networking/xmppClient.js.map +1 -1
  156. package/lib/commonjs/roomStore/chatSettingsSlice.js +7 -2
  157. package/lib/commonjs/roomStore/chatSettingsSlice.js.map +1 -1
  158. package/lib/commonjs/roomStore/persistBackend.js +9 -12
  159. package/lib/commonjs/roomStore/persistBackend.js.map +1 -1
  160. package/lib/commonjs/roomStore/persistence.js +8 -1
  161. package/lib/commonjs/roomStore/persistence.js.map +1 -1
  162. package/lib/commonjs/services/languageSettings.js +177 -0
  163. package/lib/commonjs/services/languageSettings.js.map +1 -0
  164. package/lib/commonjs/version.js +1 -1
  165. package/lib/module/assets/icons.js +3 -1
  166. package/lib/module/assets/icons.js.map +1 -1
  167. package/lib/module/components/MainComponents/ChatHeader.js +29 -7
  168. package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
  169. package/lib/module/components/MainComponents/ChatRoom.js +9 -1
  170. package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
  171. package/lib/module/components/MainComponents/ChatWrapper.js +5 -3
  172. package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
  173. package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
  174. package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
  175. package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
  176. package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
  177. package/lib/module/components/MainComponents/MediaMessage.js +7 -0
  178. package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
  179. package/lib/module/components/MainComponents/ReduxWrapper.js +14 -1
  180. package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
  181. package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
  182. package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
  183. package/lib/module/components/Menu/HeaderRoomListMenu.js +26 -13
  184. package/lib/module/components/Menu/HeaderRoomListMenu.js.map +1 -1
  185. package/lib/module/components/MenuRoom/MenuRoom.js +5 -3
  186. package/lib/module/components/MenuRoom/MenuRoom.js.map +1 -1
  187. package/lib/module/components/MessageBubble/BottomReplyContainer.js +2 -1
  188. package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
  189. package/lib/module/components/MessageBubble/Message.js +72 -12
  190. package/lib/module/components/MessageBubble/Message.js.map +1 -1
  191. package/lib/module/components/MessageBubble/MessageInteractions.js +7 -4
  192. package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
  193. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +8 -5
  194. package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
  195. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js +2 -2
  196. package/lib/module/components/Modals/ChatProfileModal/ReportChatModal.js.map +1 -1
  197. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +168 -23
  198. package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
  199. package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
  200. package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
  201. package/lib/module/components/Modals/Modal/Modal.js +33 -11
  202. package/lib/module/components/Modals/Modal/Modal.js.map +1 -1
  203. package/lib/module/components/Modals/NewChatModal/NewChatModal.js +8 -8
  204. package/lib/module/components/Modals/NewChatModal/NewChatModal.js.map +1 -1
  205. package/lib/module/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js +274 -0
  206. package/lib/module/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.js.map +1 -0
  207. package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js +10 -8
  208. package/lib/module/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.js.map +1 -1
  209. package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js +13 -11
  210. package/lib/module/components/Modals/SettingsModals/Visibility/VisibilityModal.js.map +1 -1
  211. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +54 -18
  212. package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
  213. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js +116 -0
  214. package/lib/module/components/Modals/UserSettingsModal/LanguageCard.js.map +1 -0
  215. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +10 -1
  216. package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
  217. package/lib/module/components/RoomComponents/ChatRoomItem.js +32 -9
  218. package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
  219. package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
  220. package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
  221. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
  222. package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
  223. package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
  224. package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
  225. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
  226. package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
  227. package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
  228. package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
  229. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
  230. package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
  231. package/lib/module/components/Thread/ThreadWrapper.js +57 -47
  232. package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
  233. package/lib/module/components/UsersList/UsersList.js +2 -1
  234. package/lib/module/components/UsersList/UsersList.js.map +1 -1
  235. package/lib/module/components/styled/SendInput.js +4 -2
  236. package/lib/module/components/styled/SendInput.js.map +1 -1
  237. package/lib/module/e2ee/crypto.js +170 -0
  238. package/lib/module/e2ee/crypto.js.map +1 -0
  239. package/lib/module/e2ee/deviceStore.js +77 -0
  240. package/lib/module/e2ee/deviceStore.js.map +1 -0
  241. package/lib/module/e2ee/fileCipher.js +90 -0
  242. package/lib/module/e2ee/fileCipher.js.map +1 -0
  243. package/lib/module/e2ee/fileEnvelope.js +66 -0
  244. package/lib/module/e2ee/fileEnvelope.js.map +1 -0
  245. package/lib/module/e2ee/index.js +185 -0
  246. package/lib/module/e2ee/index.js.map +1 -0
  247. package/lib/module/e2ee/limits.js +5 -0
  248. package/lib/module/e2ee/limits.js.map +1 -0
  249. package/lib/module/e2ee/ns.js +4 -0
  250. package/lib/module/e2ee/ns.js.map +1 -0
  251. package/lib/module/e2ee/omemo.js +610 -0
  252. package/lib/module/e2ee/omemo.js.map +1 -0
  253. package/lib/module/e2ee/protobuf.js +140 -0
  254. package/lib/module/e2ee/protobuf.js.map +1 -0
  255. package/lib/module/e2ee/ratchet.js +228 -0
  256. package/lib/module/e2ee/ratchet.js.map +1 -0
  257. package/lib/module/e2ee/sealedBody.js +19 -0
  258. package/lib/module/e2ee/sealedBody.js.map +1 -0
  259. package/lib/module/e2ee/sealedFiles.js +154 -0
  260. package/lib/module/e2ee/sealedFiles.js.map +1 -0
  261. package/lib/module/e2ee/send.js +48 -0
  262. package/lib/module/e2ee/send.js.map +1 -0
  263. package/lib/module/e2ee/stanza.js +107 -0
  264. package/lib/module/e2ee/stanza.js.map +1 -0
  265. package/lib/module/e2ee/store.js +35 -0
  266. package/lib/module/e2ee/store.js.map +1 -0
  267. package/lib/module/helpers/accountName.js +18 -0
  268. package/lib/module/helpers/accountName.js.map +1 -0
  269. package/lib/module/helpers/constants/MODAL_COMPONENTS.js +2 -0
  270. package/lib/module/helpers/constants/MODAL_COMPONENTS.js.map +1 -1
  271. package/lib/module/helpers/constants/MODAL_TYPES.js +1 -0
  272. package/lib/module/helpers/constants/MODAL_TYPES.js.map +1 -1
  273. package/lib/module/helpers/createMessageFromXml.js +19 -4
  274. package/lib/module/helpers/createMessageFromXml.js.map +1 -1
  275. package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
  276. package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
  277. package/lib/module/helpers/displayName.js +11 -0
  278. package/lib/module/helpers/displayName.js.map +1 -0
  279. package/lib/module/helpers/persistCrypto.js +4 -0
  280. package/lib/module/helpers/persistCrypto.js.map +1 -1
  281. package/lib/module/helpers/preferencesStorage.js.map +1 -1
  282. package/lib/module/helpers/secureKeyValue.js +19 -0
  283. package/lib/module/helpers/secureKeyValue.js.map +1 -1
  284. package/lib/module/helpers/videoCache.js +125 -0
  285. package/lib/module/helpers/videoCache.js.map +1 -0
  286. package/lib/module/hooks/useChatSettingState.js +2 -0
  287. package/lib/module/hooks/useChatSettingState.js.map +1 -1
  288. package/lib/module/hooks/useChatWrapperInit.js +4 -0
  289. package/lib/module/hooks/useChatWrapperInit.js.map +1 -1
  290. package/lib/module/hooks/useLogout.js +8 -0
  291. package/lib/module/hooks/useLogout.js.map +1 -1
  292. package/lib/module/hooks/useSendMessage.js +71 -7
  293. package/lib/module/hooks/useSendMessage.js.map +1 -1
  294. package/lib/module/i18n/strings.js +367 -1
  295. package/lib/module/i18n/strings.js.map +1 -1
  296. package/lib/module/i18n/useT.js +8 -4
  297. package/lib/module/i18n/useT.js.map +1 -1
  298. package/lib/module/main.js +1 -0
  299. package/lib/module/main.js.map +1 -1
  300. package/lib/module/networking/api-requests/auth.api.js +4 -1
  301. package/lib/module/networking/api-requests/auth.api.js.map +1 -1
  302. package/lib/module/networking/api-requests/rooms.api.js +109 -18
  303. package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
  304. package/lib/module/networking/api-requests/user.api.js +12 -0
  305. package/lib/module/networking/api-requests/user.api.js.map +1 -1
  306. package/lib/module/networking/stanzaHandlers.js +1 -1
  307. package/lib/module/networking/stanzaHandlers.js.map +1 -1
  308. package/lib/module/networking/xmpp/handleStanzas.xmpp.js +38 -0
  309. package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
  310. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
  311. package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
  312. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
  313. package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
  314. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
  315. package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
  316. package/lib/module/networking/xmppClient.js +6 -0
  317. package/lib/module/networking/xmppClient.js.map +1 -1
  318. package/lib/module/roomStore/chatSettingsSlice.js +5 -1
  319. package/lib/module/roomStore/chatSettingsSlice.js.map +1 -1
  320. package/lib/module/roomStore/persistBackend.js +10 -13
  321. package/lib/module/roomStore/persistBackend.js.map +1 -1
  322. package/lib/module/roomStore/persistence.js +8 -1
  323. package/lib/module/roomStore/persistence.js.map +1 -1
  324. package/lib/module/services/languageSettings.js +164 -0
  325. package/lib/module/services/languageSettings.js.map +1 -0
  326. package/lib/module/version.js +1 -1
  327. package/lib/typescript/assets/icons.d.ts +8 -0
  328. package/lib/typescript/assets/icons.d.ts.map +1 -1
  329. package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
  330. package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
  331. package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
  332. package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts +4 -0
  333. package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
  334. package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
  335. package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
  336. package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
  337. package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
  338. package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
  339. package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
  340. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts +7 -1
  341. package/lib/typescript/components/Menu/HeaderRoomListMenu.d.ts.map +1 -1
  342. package/lib/typescript/components/MenuRoom/MenuRoom.d.ts.map +1 -1
  343. package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
  344. package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
  345. package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
  346. package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
  347. package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
  348. package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
  349. package/lib/typescript/components/Modals/Modal/Modal.d.ts.map +1 -1
  350. package/lib/typescript/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.d.ts +15 -0
  351. package/lib/typescript/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.d.ts.map +1 -0
  352. package/lib/typescript/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.d.ts.map +1 -1
  353. package/lib/typescript/components/Modals/SettingsModals/Visibility/VisibilityModal.d.ts.map +1 -1
  354. package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
  355. package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts +14 -0
  356. package/lib/typescript/components/Modals/UserSettingsModal/LanguageCard.d.ts.map +1 -0
  357. package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
  358. package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
  359. package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
  360. package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
  361. package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
  362. package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
  363. package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
  364. package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
  365. package/lib/typescript/components/styled/SendInput.d.ts +1 -0
  366. package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
  367. package/lib/typescript/e2ee/crypto.d.ts +28 -0
  368. package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
  369. package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
  370. package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
  371. package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
  372. package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
  373. package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
  374. package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
  375. package/lib/typescript/e2ee/index.d.ts +23 -0
  376. package/lib/typescript/e2ee/index.d.ts.map +1 -0
  377. package/lib/typescript/e2ee/limits.d.ts +3 -0
  378. package/lib/typescript/e2ee/limits.d.ts.map +1 -0
  379. package/lib/typescript/e2ee/ns.d.ts +2 -0
  380. package/lib/typescript/e2ee/ns.d.ts.map +1 -0
  381. package/lib/typescript/e2ee/omemo.d.ts +64 -0
  382. package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
  383. package/lib/typescript/e2ee/protobuf.d.ts +25 -0
  384. package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
  385. package/lib/typescript/e2ee/ratchet.d.ts +39 -0
  386. package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
  387. package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
  388. package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
  389. package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
  390. package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
  391. package/lib/typescript/e2ee/send.d.ts +6 -0
  392. package/lib/typescript/e2ee/send.d.ts.map +1 -0
  393. package/lib/typescript/e2ee/stanza.d.ts +8 -0
  394. package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
  395. package/lib/typescript/e2ee/store.d.ts +16 -0
  396. package/lib/typescript/e2ee/store.d.ts.map +1 -0
  397. package/lib/typescript/helpers/accountName.d.ts +7 -0
  398. package/lib/typescript/helpers/accountName.d.ts.map +1 -0
  399. package/lib/typescript/helpers/constants/MODAL_COMPONENTS.d.ts.map +1 -1
  400. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts +1 -0
  401. package/lib/typescript/helpers/constants/MODAL_TYPES.d.ts.map +1 -1
  402. package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
  403. package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
  404. package/lib/typescript/helpers/displayName.d.ts +2 -0
  405. package/lib/typescript/helpers/displayName.d.ts.map +1 -0
  406. package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
  407. package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
  408. package/lib/typescript/helpers/preferencesStorage.d.ts +4 -0
  409. package/lib/typescript/helpers/preferencesStorage.d.ts.map +1 -1
  410. package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
  411. package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
  412. package/lib/typescript/helpers/videoCache.d.ts +19 -0
  413. package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
  414. package/lib/typescript/hooks/useChatSettingState.d.ts +1 -0
  415. package/lib/typescript/hooks/useChatSettingState.d.ts.map +1 -1
  416. package/lib/typescript/hooks/useChatWrapperInit.d.ts.map +1 -1
  417. package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
  418. package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
  419. package/lib/typescript/i18n/strings.d.ts.map +1 -1
  420. package/lib/typescript/i18n/useT.d.ts.map +1 -1
  421. package/lib/typescript/main.d.ts +2 -0
  422. package/lib/typescript/main.d.ts.map +1 -1
  423. package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
  424. package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
  425. package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
  426. package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
  427. package/lib/typescript/networking/api-requests/user.api.d.ts +6 -0
  428. package/lib/typescript/networking/api-requests/user.api.d.ts.map +1 -1
  429. package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
  430. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
  431. package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
  432. package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
  433. package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
  434. package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
  435. package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
  436. package/lib/typescript/roomStore/chatSettingsSlice.d.ts +8 -1
  437. package/lib/typescript/roomStore/chatSettingsSlice.d.ts.map +1 -1
  438. package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -1
  439. package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
  440. package/lib/typescript/services/languageSettings.d.ts +29 -0
  441. package/lib/typescript/services/languageSettings.d.ts.map +1 -0
  442. package/lib/typescript/types/models/message.model.d.ts +5 -0
  443. package/lib/typescript/types/models/message.model.d.ts.map +1 -1
  444. package/lib/typescript/types/models/room.model.d.ts +5 -0
  445. package/lib/typescript/types/models/room.model.d.ts.map +1 -1
  446. package/lib/typescript/types/models/user.model.d.ts +4 -0
  447. package/lib/typescript/types/models/user.model.d.ts.map +1 -1
  448. package/lib/typescript/types/types.d.ts +25 -0
  449. package/lib/typescript/types/types.d.ts.map +1 -1
  450. package/lib/typescript/version.d.ts +1 -1
  451. package/package.json +8 -4
  452. package/src/assets/icons.tsx +27 -0
  453. package/src/components/MainComponents/ChatHeader.tsx +30 -9
  454. package/src/components/MainComponents/ChatRoom.tsx +11 -1
  455. package/src/components/MainComponents/ChatWrapper.tsx +5 -3
  456. package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
  457. package/src/components/MainComponents/EncryptionCard.tsx +287 -0
  458. package/src/components/MainComponents/MediaMessage.tsx +5 -0
  459. package/src/components/MainComponents/ReduxWrapper.tsx +11 -0
  460. package/src/components/MainComponents/SealedAttachment.tsx +251 -0
  461. package/src/components/Menu/HeaderRoomListMenu.tsx +40 -13
  462. package/src/components/MenuRoom/MenuRoom.tsx +5 -3
  463. package/src/components/MessageBubble/BottomReplyContainer.tsx +2 -1
  464. package/src/components/MessageBubble/Message.tsx +99 -9
  465. package/src/components/MessageBubble/MessageInteractions.tsx +7 -6
  466. package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +8 -5
  467. package/src/components/Modals/ChatProfileModal/ReportChatModal.tsx +2 -2
  468. package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +188 -40
  469. package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
  470. package/src/components/Modals/Modal/Modal.tsx +44 -16
  471. package/src/components/Modals/NewChatModal/NewChatModal.tsx +8 -8
  472. package/src/components/Modals/SettingsModals/ChangePassword/ChangePasswordModal.tsx +316 -0
  473. package/src/components/Modals/SettingsModals/ManageDataModal/ManageDataModal.tsx +10 -15
  474. package/src/components/Modals/SettingsModals/Visibility/VisibilityModal.tsx +13 -14
  475. package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +72 -20
  476. package/src/components/Modals/UserSettingsModal/LanguageCard.tsx +144 -0
  477. package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +13 -1
  478. package/src/components/RoomComponents/ChatRoomItem.tsx +23 -11
  479. package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
  480. package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
  481. package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
  482. package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
  483. package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
  484. package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
  485. package/src/components/Thread/ThreadWrapper.tsx +17 -2
  486. package/src/components/UsersList/UsersList.tsx +2 -1
  487. package/src/components/styled/SendInput.tsx +5 -2
  488. package/src/e2ee/crypto.ts +194 -0
  489. package/src/e2ee/deviceStore.ts +80 -0
  490. package/src/e2ee/fileCipher.ts +86 -0
  491. package/src/e2ee/fileEnvelope.ts +115 -0
  492. package/src/e2ee/index.ts +192 -0
  493. package/src/e2ee/limits.ts +2 -0
  494. package/src/e2ee/ns.ts +1 -0
  495. package/src/e2ee/omemo.ts +802 -0
  496. package/src/e2ee/protobuf.ts +188 -0
  497. package/src/e2ee/ratchet.ts +271 -0
  498. package/src/e2ee/sealedBody.ts +17 -0
  499. package/src/e2ee/sealedFiles.ts +181 -0
  500. package/src/e2ee/send.ts +70 -0
  501. package/src/e2ee/stanza.ts +133 -0
  502. package/src/e2ee/store.ts +54 -0
  503. package/src/helpers/accountName.ts +15 -0
  504. package/src/helpers/constants/MODAL_COMPONENTS.tsx +2 -0
  505. package/src/helpers/constants/MODAL_TYPES.ts +1 -0
  506. package/src/helpers/createMessageFromXml.ts +31 -6
  507. package/src/helpers/createUserNameFromSetUser.ts +2 -1
  508. package/src/helpers/displayName.ts +9 -0
  509. package/src/helpers/persistCrypto.ts +5 -0
  510. package/src/helpers/preferencesStorage.ts +4 -0
  511. package/src/helpers/secureKeyValue.ts +15 -0
  512. package/src/helpers/videoCache.ts +138 -0
  513. package/src/hooks/useChatSettingState.tsx +4 -0
  514. package/src/hooks/useChatWrapperInit.ts +4 -0
  515. package/src/hooks/useLogout.tsx +9 -0
  516. package/src/hooks/useSendMessage.tsx +71 -5
  517. package/src/i18n/strings.ts +367 -1
  518. package/src/i18n/useT.ts +6 -4
  519. package/src/main.ts +2 -0
  520. package/src/networking/api-requests/auth.api.ts +9 -1
  521. package/src/networking/api-requests/rooms.api.ts +121 -18
  522. package/src/networking/api-requests/user.api.ts +9 -0
  523. package/src/networking/stanzaHandlers.ts +1 -0
  524. package/src/networking/xmpp/handleStanzas.xmpp.ts +49 -0
  525. package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
  526. package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
  527. package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
  528. package/src/networking/xmppClient.ts +6 -0
  529. package/src/roomStore/chatSettingsSlice.ts +13 -0
  530. package/src/roomStore/persistBackend.ts +8 -11
  531. package/src/roomStore/persistence.ts +15 -0
  532. package/src/services/languageSettings.ts +143 -0
  533. package/src/types/models/message.model.ts +5 -0
  534. package/src/types/models/room.model.ts +5 -0
  535. package/src/types/models/user.model.ts +4 -0
  536. package/src/types/types.ts +25 -0
  537. package/src/version.ts +1 -1
@@ -16,6 +16,11 @@ export type UiStringTable = Record<string, string>;
16
16
  const en: UiStringTable = {
17
17
  'search.placeholder': 'Search...',
18
18
  'roomList.title': 'Chats',
19
+ 'menu.newChat': 'New Chat',
20
+ 'menu.profile': 'Profile',
21
+ 'menu.settings': 'Settings',
22
+ 'menu.logout': 'Sign out',
23
+ 'menu.logoutConfirm': 'Are you sure you want to sign out?',
19
24
  'search.members': 'Search members',
20
25
  'search.noResults': 'Nobody found',
21
26
  'input.placeholder': 'Type message',
@@ -25,6 +30,39 @@ const en: UiStringTable = {
25
30
  'date.yesterday': 'Yesterday',
26
31
  'message.deleted': 'Message deleted',
27
32
  'message.edited': 'edited',
33
+ 'message.sending': 'sending...',
34
+ 'message.failedRetry': '! Failed — tap to retry',
35
+ 'thread.title': 'Thread',
36
+ 'thread.alsoSendTo': 'Also send to',
37
+ 'e2ee.roomEncrypted': 'End-to-end encrypted',
38
+ 'e2ee.notEncrypted': 'Not encrypted',
39
+ 'e2ee.notEncryptedHint': 'Sent without end-to-end encryption, because no recipient has published a key yet.',
40
+ 'e2ee.devices.title': 'End-to-end encryption',
41
+ 'e2ee.devices.thisDevice': 'This device',
42
+ 'e2ee.devices.otherDevices': 'Other devices',
43
+ 'e2ee.devices.none': 'Has not opened an encrypted chat yet',
44
+ 'e2ee.devices.noneOwn': 'No other devices',
45
+ 'e2ee.devices.unavailable': 'Encryption is not running on this device right now',
46
+ 'e2ee.devices.loading': 'Loading devices…',
47
+ 'e2ee.devices.hint': "Compare a fingerprint with the one shown on the other person's device. Mark it verified only if they match.",
48
+ 'e2ee.trust.verified': 'Verified',
49
+ 'e2ee.trust.blind': 'Not verified',
50
+ 'e2ee.trust.untrusted': 'Not trusted',
51
+ 'e2ee.trust.verify': 'Mark as verified',
52
+ 'e2ee.trust.distrust': 'Stop trusting',
53
+ 'e2ee.trust.reset': 'Clear the mark',
54
+ 'e2ee.trust.prompt': 'Device {id}',
55
+ 'e2ee.devices.copied': 'Fingerprint copied',
56
+ 'e2ee.unsupportedMessage': "Encrypted message. This version of the app can't read it yet.",
57
+ 'e2ee.otherDevice': 'Encrypted for another device',
58
+ 'e2ee.undecryptable': 'Could not decrypt this message',
59
+ 'e2ee.sendUnavailable': "This chat is end-to-end encrypted. Sending from the mobile app isn't available yet.",
60
+ 'media.sealedFile': 'Encrypted file',
61
+ 'media.sealedUnsupported': "Can't be opened in this version of the app yet",
62
+ 'media.sealedUnavailable': 'Encrypted attachment could not be opened',
63
+ 'media.sealedDownload': 'Download and decrypt',
64
+ 'media.sealedDownloading': 'Decrypting…',
65
+ 'media.sealedDownloadFailed': 'Download failed — tap to retry',
28
66
  'message.newMessages': 'New messages',
29
67
  'notification.senderFallback': 'New message',
30
68
  'presence.online': 'online',
@@ -144,6 +182,10 @@ const en: UiStringTable = {
144
182
  'settings.menu.title': 'Settings',
145
183
  'modal.filePreview.title': 'File preview',
146
184
  'toast.error': 'Error',
185
+ 'toast.failedToCreateRoom': 'Failed to create room',
186
+ 'toast.copied': 'Copied to clipboard!',
187
+ 'toast.copyFailed': 'Copy failed',
188
+ 'toast.saveSuccessful': 'Save successful',
147
189
  'toast.couldNotOpenPrivateChat': 'Could not open the new private chat',
148
190
  'toast.couldNotResolveRecipient': 'Could not resolve recipient',
149
191
  'toast.failedToCreatePrivateChat': 'Failed to create private chat',
@@ -169,6 +211,7 @@ const en: UiStringTable = {
169
211
  'field.referralCode': 'Your referral code',
170
212
  'action.logOut': 'Log Out',
171
213
  'action.message': 'Message',
214
+ 'action.encryptedMessage': 'Encrypted message',
172
215
  'action.videoCall': 'Video call',
173
216
  'action.call': 'Call',
174
217
  'action.audioCall': 'Audio call',
@@ -210,6 +253,8 @@ const en: UiStringTable = {
210
253
  'modal.chatProfile.removeMember': 'Remove from this chat?',
211
254
  'modal.chatProfile.memberListUnavailable': 'Member list unavailable',
212
255
  'modal.deleteChat.title': 'Delete this chat ?',
256
+ 'modal.deleteMessage.title': 'Delete message',
257
+ 'modal.deleteMessage.description': 'Are you sure you want to delete this message?',
213
258
  'modal.addMembers.title': 'Add New Member',
214
259
  'modal.addMembers.userIdPlaceholder': 'Enter User Id',
215
260
  'modal.leaveChat.title': 'Leave Chat',
@@ -246,6 +291,22 @@ const en: UiStringTable = {
246
291
  'settings.notifications.title': 'Notifications',
247
292
  'settings.notifications.push': 'Push notifications',
248
293
  'settings.notifications.pushHint': 'New messages and calls wake this device even when the app is closed.',
294
+ 'settings.language.app': 'App language',
295
+ 'settings.language.appHint': 'The language of the interface.',
296
+ 'settings.language.chat': 'Chat language',
297
+ 'settings.language.chatHint': 'Messages are translated into this language.',
298
+ 'settings.password.title': 'Change password',
299
+ 'settings.password.current': 'Current password',
300
+ 'settings.password.new': 'New password',
301
+ 'settings.password.again': 'Repeat new password',
302
+ 'settings.password.submit': 'Change password',
303
+ 'settings.password.changed': 'Password changed',
304
+ 'settings.password.wrongCurrent': 'The current password is not right',
305
+ 'settings.password.failed': 'The password could not be changed',
306
+ 'settings.password.tooShort': 'At least {min} characters',
307
+ 'settings.password.sameAsCurrent': 'Must differ from the current password',
308
+ 'settings.password.mismatch': 'The passwords do not match',
309
+ 'settings.password.hint': 'Use the new password the next time you sign in.',
249
310
  'settings.visibility.title': 'Visibility',
250
311
  'settings.visibility.profileLabel': 'Profile Visibility',
251
312
  'settings.visibility.open': 'Open (default)',
@@ -274,6 +335,11 @@ const en: UiStringTable = {
274
335
  const fr: UiStringTable = {
275
336
  'search.placeholder': 'Rechercher...',
276
337
  'roomList.title': 'Discussions',
338
+ 'menu.newChat': 'Nouvelle discussion',
339
+ 'menu.profile': 'Profil',
340
+ 'menu.settings': 'Paramètres',
341
+ 'menu.logout': 'Se déconnecter',
342
+ 'menu.logoutConfirm': 'Voulez-vous vraiment vous déconnecter ?',
277
343
  'search.members': 'Rechercher des membres',
278
344
  'search.noResults': 'Personne trouvée',
279
345
  'input.placeholder': 'Écrire un message',
@@ -283,6 +349,39 @@ const fr: UiStringTable = {
283
349
  'date.yesterday': 'Hier',
284
350
  'message.deleted': 'Message supprimé',
285
351
  'message.edited': 'modifié',
352
+ 'message.sending': 'envoi...',
353
+ 'message.failedRetry': '! Échec — touchez pour réessayer',
354
+ 'thread.title': 'Fil',
355
+ 'thread.alsoSendTo': 'Envoyer aussi dans',
356
+ 'e2ee.roomEncrypted': 'Chiffré de bout en bout',
357
+ 'e2ee.notEncrypted': 'Non chiffré',
358
+ 'e2ee.notEncryptedHint': "Envoyé sans chiffrement de bout en bout, car aucun destinataire n'a encore publié de clé.",
359
+ 'e2ee.devices.title': 'Chiffrement de bout en bout',
360
+ 'e2ee.devices.thisDevice': 'Cet appareil',
361
+ 'e2ee.devices.otherDevices': 'Autres appareils',
362
+ 'e2ee.devices.none': "N'a pas encore ouvert de discussion chiffrée",
363
+ 'e2ee.devices.noneOwn': 'Aucun autre appareil',
364
+ 'e2ee.devices.unavailable': "Le chiffrement n'est pas actif sur cet appareil pour le moment",
365
+ 'e2ee.devices.loading': 'Chargement des appareils…',
366
+ 'e2ee.devices.hint': "Comparez une empreinte avec celle affichée sur l'appareil de l'autre personne. Ne la marquez comme vérifiée que si elles correspondent.",
367
+ 'e2ee.trust.verified': 'Vérifié',
368
+ 'e2ee.trust.blind': 'Non vérifié',
369
+ 'e2ee.trust.untrusted': 'Non fiable',
370
+ 'e2ee.trust.verify': 'Marquer comme vérifié',
371
+ 'e2ee.trust.distrust': 'Ne plus faire confiance',
372
+ 'e2ee.trust.reset': 'Effacer la marque',
373
+ 'e2ee.trust.prompt': 'Appareil {id}',
374
+ 'e2ee.devices.copied': 'Empreinte copiée',
375
+ 'e2ee.unsupportedMessage': "Message chiffré. Cette version de l'application ne peut pas encore le lire.",
376
+ 'e2ee.otherDevice': 'Chiffré pour un autre appareil',
377
+ 'e2ee.undecryptable': 'Impossible de déchiffrer ce message',
378
+ 'e2ee.sendUnavailable': "Cette discussion est chiffrée de bout en bout. L'envoi depuis l'application mobile n'est pas encore disponible.",
379
+ 'media.sealedFile': 'Fichier chiffré',
380
+ 'media.sealedUnsupported': "Ne peut pas encore être ouvert dans cette version de l'application",
381
+ 'media.sealedUnavailable': "La pièce jointe chiffrée n'a pas pu être ouverte",
382
+ 'media.sealedDownload': 'Télécharger et déchiffrer',
383
+ 'media.sealedDownloading': 'Déchiffrement…',
384
+ 'media.sealedDownloadFailed': 'Échec du téléchargement — appuyez pour réessayer',
286
385
  'message.newMessages': 'Nouveaux messages',
287
386
  'notification.senderFallback': 'Nouveau message',
288
387
  'presence.online': 'en ligne',
@@ -402,6 +501,10 @@ const fr: UiStringTable = {
402
501
  'settings.menu.title': 'Paramètres',
403
502
  'modal.filePreview.title': 'Aperçu du fichier',
404
503
  'toast.error': 'Erreur',
504
+ 'toast.failedToCreateRoom': 'Impossible de créer le salon',
505
+ 'toast.copied': 'Copié dans le presse-papiers !',
506
+ 'toast.copyFailed': 'Échec de la copie',
507
+ 'toast.saveSuccessful': 'Enregistré',
405
508
  'toast.couldNotOpenPrivateChat': "Impossible d'ouvrir la nouvelle discussion privée",
406
509
  'toast.couldNotResolveRecipient': 'Impossible de résoudre le destinataire',
407
510
  'toast.failedToCreatePrivateChat': 'Échec de la création de la discussion privée',
@@ -427,6 +530,7 @@ const fr: UiStringTable = {
427
530
  'field.referralCode': 'Votre code de parrainage',
428
531
  'action.logOut': 'Déconnexion',
429
532
  'action.message': 'Message',
533
+ 'action.encryptedMessage': 'Message chiffré',
430
534
  'action.videoCall': 'Appel vidéo',
431
535
  'action.call': 'Appeler',
432
536
  'action.audioCall': 'Appel audio',
@@ -468,6 +572,8 @@ const fr: UiStringTable = {
468
572
  'modal.chatProfile.removeMember': 'Retirer de cette discussion ?',
469
573
  'modal.chatProfile.memberListUnavailable': 'Liste des membres indisponible',
470
574
  'modal.deleteChat.title': 'Supprimer cette discussion ?',
575
+ 'modal.deleteMessage.title': 'Supprimer le message',
576
+ 'modal.deleteMessage.description': 'Voulez-vous vraiment supprimer ce message ?',
471
577
  'modal.addMembers.title': 'Ajouter un nouveau membre',
472
578
  'modal.addMembers.userIdPlaceholder': "Entrez l'ID utilisateur",
473
579
  'modal.leaveChat.title': 'Quitter la discussion',
@@ -504,6 +610,22 @@ const fr: UiStringTable = {
504
610
  'settings.notifications.title': 'Notifications',
505
611
  'settings.notifications.push': 'Notifications push',
506
612
  'settings.notifications.pushHint': 'Les nouveaux messages et appels réveillent cet appareil même quand l\'application est fermée.',
613
+ 'settings.language.app': "Langue de l'application",
614
+ 'settings.language.appHint': "La langue de l'interface.",
615
+ 'settings.language.chat': 'Langue du chat',
616
+ 'settings.language.chatHint': 'Les messages sont traduits dans cette langue.',
617
+ 'settings.password.title': 'Changer le mot de passe',
618
+ 'settings.password.current': 'Mot de passe actuel',
619
+ 'settings.password.new': 'Nouveau mot de passe',
620
+ 'settings.password.again': 'Répéter le nouveau mot de passe',
621
+ 'settings.password.submit': 'Changer le mot de passe',
622
+ 'settings.password.changed': 'Mot de passe modifié',
623
+ 'settings.password.wrongCurrent': 'Le mot de passe actuel est incorrect',
624
+ 'settings.password.failed': "Le mot de passe n'a pas pu être modifié",
625
+ 'settings.password.tooShort': 'Au moins {min} caractères',
626
+ 'settings.password.sameAsCurrent': 'Doit être différent du mot de passe actuel',
627
+ 'settings.password.mismatch': 'Les mots de passe ne correspondent pas',
628
+ 'settings.password.hint': 'Utilisez le nouveau mot de passe à votre prochaine connexion.',
507
629
  'settings.visibility.title': 'Visibilité',
508
630
  'settings.visibility.profileLabel': 'Visibilité du profil',
509
631
  'settings.visibility.open': 'Ouvert (par défaut)',
@@ -531,7 +653,12 @@ const fr: UiStringTable = {
531
653
 
532
654
  const es: UiStringTable = {
533
655
  'search.placeholder': 'Buscar...',
534
- 'roomList.title': 'Chats',
656
+ 'roomList.title': 'Conversaciones',
657
+ 'menu.newChat': 'Nuevo chat',
658
+ 'menu.profile': 'Perfil',
659
+ 'menu.settings': 'Configuración',
660
+ 'menu.logout': 'Cerrar sesión',
661
+ 'menu.logoutConfirm': '¿Seguro que quieres cerrar sesión?',
535
662
  'search.members': 'Buscar miembros',
536
663
  'search.noResults': 'No se encontró a nadie',
537
664
  'input.placeholder': 'Escribe un mensaje',
@@ -541,6 +668,39 @@ const es: UiStringTable = {
541
668
  'date.yesterday': 'Ayer',
542
669
  'message.deleted': 'Mensaje eliminado',
543
670
  'message.edited': 'editado',
671
+ 'message.sending': 'enviando...',
672
+ 'message.failedRetry': '! Error — toca para reintentar',
673
+ 'thread.title': 'Hilo',
674
+ 'thread.alsoSendTo': 'Enviar también a',
675
+ 'e2ee.roomEncrypted': 'Cifrado de extremo a extremo',
676
+ 'e2ee.notEncrypted': 'Sin cifrar',
677
+ 'e2ee.notEncryptedHint': 'Enviado sin cifrado de extremo a extremo, porque ningún destinatario ha publicado una clave todavía.',
678
+ 'e2ee.devices.title': 'Cifrado de extremo a extremo',
679
+ 'e2ee.devices.thisDevice': 'Este dispositivo',
680
+ 'e2ee.devices.otherDevices': 'Otros dispositivos',
681
+ 'e2ee.devices.none': 'Aún no ha abierto un chat cifrado',
682
+ 'e2ee.devices.noneOwn': 'No hay otros dispositivos',
683
+ 'e2ee.devices.unavailable': 'El cifrado no está activo en este dispositivo en este momento',
684
+ 'e2ee.devices.loading': 'Cargando dispositivos…',
685
+ 'e2ee.devices.hint': 'Compara una huella con la que aparece en el dispositivo de la otra persona. Márcala como verificada solo si coinciden.',
686
+ 'e2ee.trust.verified': 'Verificado',
687
+ 'e2ee.trust.blind': 'Sin verificar',
688
+ 'e2ee.trust.untrusted': 'No fiable',
689
+ 'e2ee.trust.verify': 'Marcar como verificado',
690
+ 'e2ee.trust.distrust': 'Dejar de confiar',
691
+ 'e2ee.trust.reset': 'Quitar la marca',
692
+ 'e2ee.trust.prompt': 'Dispositivo {id}',
693
+ 'e2ee.devices.copied': 'Huella copiada',
694
+ 'e2ee.unsupportedMessage': 'Mensaje cifrado. Esta versión de la aplicación aún no puede leerlo.',
695
+ 'e2ee.otherDevice': 'Cifrado para otro dispositivo',
696
+ 'e2ee.undecryptable': 'No se pudo descifrar este mensaje',
697
+ 'e2ee.sendUnavailable': 'Este chat está cifrado de extremo a extremo. El envío desde la aplicación móvil aún no está disponible.',
698
+ 'media.sealedFile': 'Archivo cifrado',
699
+ 'media.sealedUnsupported': 'Aún no se puede abrir en esta versión de la aplicación',
700
+ 'media.sealedUnavailable': 'No se pudo abrir el archivo adjunto cifrado',
701
+ 'media.sealedDownload': 'Descargar y descifrar',
702
+ 'media.sealedDownloading': 'Descifrando…',
703
+ 'media.sealedDownloadFailed': 'Error de descarga: toca para reintentar',
544
704
  'message.newMessages': 'Nuevos mensajes',
545
705
  'notification.senderFallback': 'Nuevo mensaje',
546
706
  'presence.online': 'en línea',
@@ -660,6 +820,10 @@ const es: UiStringTable = {
660
820
  'settings.menu.title': 'Configuración',
661
821
  'modal.filePreview.title': 'Vista previa del archivo',
662
822
  'toast.error': 'Error',
823
+ 'toast.failedToCreateRoom': 'No se pudo crear la sala',
824
+ 'toast.copied': '¡Copiado al portapapeles!',
825
+ 'toast.copyFailed': 'No se pudo copiar',
826
+ 'toast.saveSuccessful': 'Guardado correctamente',
663
827
  'toast.couldNotOpenPrivateChat': 'No se pudo abrir el nuevo chat privado',
664
828
  'toast.couldNotResolveRecipient': 'No se pudo resolver el destinatario',
665
829
  'toast.failedToCreatePrivateChat': 'No se pudo crear el chat privado',
@@ -685,6 +849,7 @@ const es: UiStringTable = {
685
849
  'field.referralCode': 'Tu código de referido',
686
850
  'action.logOut': 'Cerrar sesión',
687
851
  'action.message': 'Mensaje',
852
+ 'action.encryptedMessage': 'Mensaje cifrado',
688
853
  'action.videoCall': 'Videollamada',
689
854
  'action.call': 'Llamar',
690
855
  'action.audioCall': 'Llamada de audio',
@@ -726,6 +891,8 @@ const es: UiStringTable = {
726
891
  'modal.chatProfile.removeMember': '¿Quitar de este chat?',
727
892
  'modal.chatProfile.memberListUnavailable': 'Lista de miembros no disponible',
728
893
  'modal.deleteChat.title': '¿Eliminar este chat?',
894
+ 'modal.deleteMessage.title': 'Eliminar mensaje',
895
+ 'modal.deleteMessage.description': '¿Seguro que quieres eliminar este mensaje?',
729
896
  'modal.addMembers.title': 'Añadir nuevo miembro',
730
897
  'modal.addMembers.userIdPlaceholder': 'Introduce el ID de usuario',
731
898
  'modal.leaveChat.title': 'Salir del chat',
@@ -762,6 +929,22 @@ const es: UiStringTable = {
762
929
  'settings.notifications.title': 'Notificaciones',
763
930
  'settings.notifications.push': 'Notificaciones push',
764
931
  'settings.notifications.pushHint': 'Los mensajes y llamadas nuevos despiertan este dispositivo incluso con la aplicación cerrada.',
932
+ 'settings.language.app': 'Idioma de la aplicación',
933
+ 'settings.language.appHint': 'El idioma de la interfaz.',
934
+ 'settings.language.chat': 'Idioma del chat',
935
+ 'settings.language.chatHint': 'Los mensajes se traducen a este idioma.',
936
+ 'settings.password.title': 'Cambiar contraseña',
937
+ 'settings.password.current': 'Contraseña actual',
938
+ 'settings.password.new': 'Nueva contraseña',
939
+ 'settings.password.again': 'Repetir la nueva contraseña',
940
+ 'settings.password.submit': 'Cambiar contraseña',
941
+ 'settings.password.changed': 'Contraseña cambiada',
942
+ 'settings.password.wrongCurrent': 'La contraseña actual no es correcta',
943
+ 'settings.password.failed': 'No se pudo cambiar la contraseña',
944
+ 'settings.password.tooShort': 'Al menos {min} caracteres',
945
+ 'settings.password.sameAsCurrent': 'Debe ser distinta de la contraseña actual',
946
+ 'settings.password.mismatch': 'Las contraseñas no coinciden',
947
+ 'settings.password.hint': 'Usa la nueva contraseña la próxima vez que inicies sesión.',
765
948
  'settings.visibility.title': 'Visibilidad',
766
949
  'settings.visibility.profileLabel': 'Visibilidad del perfil',
767
950
  'settings.visibility.open': 'Abierto (predeterminado)',
@@ -790,6 +973,11 @@ const es: UiStringTable = {
790
973
  const pt: UiStringTable = {
791
974
  'search.placeholder': 'Pesquisar...',
792
975
  'roomList.title': 'Conversas',
976
+ 'menu.newChat': 'Nova conversa',
977
+ 'menu.profile': 'Perfil',
978
+ 'menu.settings': 'Definições',
979
+ 'menu.logout': 'Terminar sessão',
980
+ 'menu.logoutConfirm': 'Tem a certeza de que quer terminar a sessão?',
793
981
  'search.members': 'Pesquisar membros',
794
982
  'search.noResults': 'Ninguém encontrado',
795
983
  'input.placeholder': 'Escreva uma mensagem',
@@ -799,6 +987,39 @@ const pt: UiStringTable = {
799
987
  'date.yesterday': 'Ontem',
800
988
  'message.deleted': 'Mensagem eliminada',
801
989
  'message.edited': 'editado',
990
+ 'message.sending': 'a enviar...',
991
+ 'message.failedRetry': '! Falhou — toque para tentar de novo',
992
+ 'thread.title': 'Tópico',
993
+ 'thread.alsoSendTo': 'Enviar também para',
994
+ 'e2ee.roomEncrypted': 'Criptografado de ponta a ponta',
995
+ 'e2ee.notEncrypted': 'Sem criptografia',
996
+ 'e2ee.notEncryptedHint': 'Enviado sem criptografia de ponta a ponta, porque nenhum destinatário publicou uma chave ainda.',
997
+ 'e2ee.devices.title': 'Criptografia de ponta a ponta',
998
+ 'e2ee.devices.thisDevice': 'Este dispositivo',
999
+ 'e2ee.devices.otherDevices': 'Outros dispositivos',
1000
+ 'e2ee.devices.none': 'Ainda não abriu uma conversa criptografada',
1001
+ 'e2ee.devices.noneOwn': 'Nenhum outro dispositivo',
1002
+ 'e2ee.devices.unavailable': 'A criptografia não está ativa neste dispositivo no momento',
1003
+ 'e2ee.devices.loading': 'Carregando dispositivos…',
1004
+ 'e2ee.devices.hint': 'Compare uma impressão digital com a exibida no dispositivo da outra pessoa. Marque como verificada somente se coincidirem.',
1005
+ 'e2ee.trust.verified': 'Verificado',
1006
+ 'e2ee.trust.blind': 'Não verificado',
1007
+ 'e2ee.trust.untrusted': 'Não confiável',
1008
+ 'e2ee.trust.verify': 'Marcar como verificado',
1009
+ 'e2ee.trust.distrust': 'Deixar de confiar',
1010
+ 'e2ee.trust.reset': 'Remover a marca',
1011
+ 'e2ee.trust.prompt': 'Dispositivo {id}',
1012
+ 'e2ee.devices.copied': 'Impressão digital copiada',
1013
+ 'e2ee.unsupportedMessage': 'Mensagem criptografada. Esta versão do aplicativo ainda não consegue lê-la.',
1014
+ 'e2ee.otherDevice': 'Criptografado para outro dispositivo',
1015
+ 'e2ee.undecryptable': 'Não foi possível descriptografar esta mensagem',
1016
+ 'e2ee.sendUnavailable': 'Esta conversa é criptografada de ponta a ponta. O envio pelo aplicativo móvel ainda não está disponível.',
1017
+ 'media.sealedFile': 'Arquivo criptografado',
1018
+ 'media.sealedUnsupported': 'Ainda não pode ser aberto nesta versão do aplicativo',
1019
+ 'media.sealedUnavailable': 'Não foi possível abrir o anexo criptografado',
1020
+ 'media.sealedDownload': 'Baixar e descriptografar',
1021
+ 'media.sealedDownloading': 'Descriptografando…',
1022
+ 'media.sealedDownloadFailed': 'Falha no download — toque para tentar novamente',
802
1023
  'message.newMessages': 'Novas mensagens',
803
1024
  'notification.senderFallback': 'Nova mensagem',
804
1025
  'presence.online': 'online',
@@ -918,6 +1139,10 @@ const pt: UiStringTable = {
918
1139
  'settings.menu.title': 'Definições',
919
1140
  'modal.filePreview.title': 'Pré-visualização do ficheiro',
920
1141
  'toast.error': 'Erro',
1142
+ 'toast.failedToCreateRoom': 'Falha ao criar a sala',
1143
+ 'toast.copied': 'Copiado para a área de transferência!',
1144
+ 'toast.copyFailed': 'Falha ao copiar',
1145
+ 'toast.saveSuccessful': 'Guardado com sucesso',
921
1146
  'toast.couldNotOpenPrivateChat': 'Não foi possível abrir o novo chat privado',
922
1147
  'toast.couldNotResolveRecipient': 'Não foi possível identificar o destinatário',
923
1148
  'toast.failedToCreatePrivateChat': 'Falha ao criar o chat privado',
@@ -943,6 +1168,7 @@ const pt: UiStringTable = {
943
1168
  'field.referralCode': 'O seu código de referência',
944
1169
  'action.logOut': 'Terminar sessão',
945
1170
  'action.message': 'Mensagem',
1171
+ 'action.encryptedMessage': 'Mensagem criptografada',
946
1172
  'action.videoCall': 'Videochamada',
947
1173
  'action.call': 'Ligar',
948
1174
  'action.audioCall': 'Chamada de áudio',
@@ -984,6 +1210,8 @@ const pt: UiStringTable = {
984
1210
  'modal.chatProfile.removeMember': 'Remover deste chat?',
985
1211
  'modal.chatProfile.memberListUnavailable': 'Lista de membros indisponível',
986
1212
  'modal.deleteChat.title': 'Eliminar este chat?',
1213
+ 'modal.deleteMessage.title': 'Eliminar mensagem',
1214
+ 'modal.deleteMessage.description': 'Tem a certeza de que quer eliminar esta mensagem?',
987
1215
  'modal.addMembers.title': 'Adicionar novo membro',
988
1216
  'modal.addMembers.userIdPlaceholder': 'Introduza o ID do utilizador',
989
1217
  'modal.leaveChat.title': 'Sair do chat',
@@ -1020,6 +1248,22 @@ const pt: UiStringTable = {
1020
1248
  'settings.notifications.title': 'Notificações',
1021
1249
  'settings.notifications.push': 'Notificações push',
1022
1250
  'settings.notifications.pushHint': 'Novas mensagens e chamadas acordam este dispositivo mesmo com o aplicativo fechado.',
1251
+ 'settings.language.app': 'Idioma do aplicativo',
1252
+ 'settings.language.appHint': 'O idioma da interface.',
1253
+ 'settings.language.chat': 'Idioma do chat',
1254
+ 'settings.language.chatHint': 'As mensagens são traduzidas para este idioma.',
1255
+ 'settings.password.title': 'Alterar senha',
1256
+ 'settings.password.current': 'Senha atual',
1257
+ 'settings.password.new': 'Nova senha',
1258
+ 'settings.password.again': 'Repetir a nova senha',
1259
+ 'settings.password.submit': 'Alterar senha',
1260
+ 'settings.password.changed': 'Senha alterada',
1261
+ 'settings.password.wrongCurrent': 'A senha atual não está correta',
1262
+ 'settings.password.failed': 'Não foi possível alterar a senha',
1263
+ 'settings.password.tooShort': 'Pelo menos {min} caracteres',
1264
+ 'settings.password.sameAsCurrent': 'Deve ser diferente da senha atual',
1265
+ 'settings.password.mismatch': 'As senhas não coincidem',
1266
+ 'settings.password.hint': 'Use a nova senha na próxima vez que entrar.',
1023
1267
  'settings.visibility.title': 'Visibilidade',
1024
1268
  'settings.visibility.profileLabel': 'Visibilidade do perfil',
1025
1269
  'settings.visibility.open': 'Aberto (predefinição)',
@@ -1048,6 +1292,11 @@ const pt: UiStringTable = {
1048
1292
  const ht: UiStringTable = {
1049
1293
  'search.placeholder': 'Chèche...',
1050
1294
  'roomList.title': 'Chat yo',
1295
+ 'menu.newChat': 'Nouvo chat',
1296
+ 'menu.profile': 'Pwofil',
1297
+ 'menu.settings': 'Paramèt',
1298
+ 'menu.logout': 'Dekonekte',
1299
+ 'menu.logoutConfirm': 'Èske ou sèten ou vle dekonekte?',
1051
1300
  'search.members': 'Chèche manm',
1052
1301
  'search.noResults': 'Pa jwenn pèsonn',
1053
1302
  'input.placeholder': 'Ekri yon mesaj',
@@ -1057,6 +1306,39 @@ const ht: UiStringTable = {
1057
1306
  'date.yesterday': 'Yè',
1058
1307
  'message.deleted': 'Mesaj efase',
1059
1308
  'message.edited': 'modifye',
1309
+ 'message.sending': 'ap voye...',
1310
+ 'message.failedRetry': '! Echwe — tape pou eseye ankò',
1311
+ 'thread.title': 'Fil',
1312
+ 'thread.alsoSendTo': 'Voye tou nan',
1313
+ 'e2ee.roomEncrypted': 'Chifre bout-a-bout',
1314
+ 'e2ee.notEncrypted': 'Pa chifre',
1315
+ 'e2ee.notEncryptedHint': 'Voye san chifraj bout-a-bout, paske okenn moun ki resevwa a poko pibliye yon kle.',
1316
+ 'e2ee.devices.title': 'Chifraj bout-a-bout',
1317
+ 'e2ee.devices.thisDevice': 'Aparèy sa a',
1318
+ 'e2ee.devices.otherDevices': 'Lòt aparèy',
1319
+ 'e2ee.devices.none': 'Poko louvri yon chat chifre',
1320
+ 'e2ee.devices.noneOwn': 'Pa gen lòt aparèy',
1321
+ 'e2ee.devices.unavailable': 'Chifraj la pa aktif sou aparèy sa a kounye a',
1322
+ 'e2ee.devices.loading': 'Ap chaje aparèy yo…',
1323
+ 'e2ee.devices.hint': 'Konpare yon anprent ak sa ki parèt sou aparèy lòt moun nan. Make li kòm verifye sèlman si yo menm.',
1324
+ 'e2ee.trust.verified': 'Verifye',
1325
+ 'e2ee.trust.blind': 'Pa verifye',
1326
+ 'e2ee.trust.untrusted': 'Pa fè konfyans',
1327
+ 'e2ee.trust.verify': 'Make kòm verifye',
1328
+ 'e2ee.trust.distrust': 'Sispann fè konfyans',
1329
+ 'e2ee.trust.reset': 'Retire mak la',
1330
+ 'e2ee.trust.prompt': 'Aparèy {id}',
1331
+ 'e2ee.devices.copied': 'Anprent kopye',
1332
+ 'e2ee.unsupportedMessage': 'Mesaj chifre. Vèsyon aplikasyon sa a poko ka li li.',
1333
+ 'e2ee.otherDevice': 'Chifre pou yon lòt aparèy',
1334
+ 'e2ee.undecryptable': 'Nou pa t kapab dechifre mesaj sa a',
1335
+ 'e2ee.sendUnavailable': 'Chat sa a chifre bout-a-bout. Voye mesaj depi aplikasyon mobil la poko disponib.',
1336
+ 'media.sealedFile': 'Fichye chifre',
1337
+ 'media.sealedUnsupported': 'Poko ka louvri nan vèsyon aplikasyon sa a',
1338
+ 'media.sealedUnavailable': 'Nou pa t kapab louvri atachman chifre a',
1339
+ 'media.sealedDownload': 'Telechaje epi dechifre',
1340
+ 'media.sealedDownloading': 'Ap dechifre…',
1341
+ 'media.sealedDownloadFailed': 'Telechajman echwe — peze pou reeseye',
1060
1342
  'message.newMessages': 'Nouvo mesaj yo',
1061
1343
  'notification.senderFallback': 'Nouvo mesaj',
1062
1344
  'presence.online': 'an liy',
@@ -1176,6 +1458,10 @@ const ht: UiStringTable = {
1176
1458
  'settings.menu.title': 'Paramèt',
1177
1459
  'modal.filePreview.title': 'Apèsi fichye',
1178
1460
  'toast.error': 'Erè',
1461
+ 'toast.failedToCreateRoom': 'Echwe pou kreye sal la',
1462
+ 'toast.copied': 'Kopye nan clipboard la!',
1463
+ 'toast.copyFailed': 'Kopi a echwe',
1464
+ 'toast.saveSuccessful': 'Anrejistre avèk siksè',
1179
1465
  'toast.couldNotOpenPrivateChat': 'Pa t kapab louvri nouvo chat prive a',
1180
1466
  'toast.couldNotResolveRecipient': 'Pa t kapab jwenn destinatè a',
1181
1467
  'toast.failedToCreatePrivateChat': 'Echèk pou kreye chat prive a',
@@ -1201,6 +1487,7 @@ const ht: UiStringTable = {
1201
1487
  'field.referralCode': 'Kòd referans ou',
1202
1488
  'action.logOut': 'Dekonekte',
1203
1489
  'action.message': 'Mesaj',
1490
+ 'action.encryptedMessage': 'Mesaj chifre',
1204
1491
  'action.videoCall': 'Apèl videyo',
1205
1492
  'action.call': 'Rele',
1206
1493
  'action.audioCall': 'Apèl odyo',
@@ -1242,6 +1529,8 @@ const ht: UiStringTable = {
1242
1529
  'modal.chatProfile.removeMember': 'Retire nan chat sa a?',
1243
1530
  'modal.chatProfile.memberListUnavailable': 'Lis manm yo pa disponib',
1244
1531
  'modal.deleteChat.title': 'Efase chat sa a?',
1532
+ 'modal.deleteMessage.title': 'Efase mesaj',
1533
+ 'modal.deleteMessage.description': 'Èske ou sèten ou vle efase mesaj sa a?',
1245
1534
  'modal.addMembers.title': 'Ajoute yon nouvo manm',
1246
1535
  'modal.addMembers.userIdPlaceholder': 'Antre ID itilizatè a',
1247
1536
  'modal.leaveChat.title': 'Kite chat la',
@@ -1278,6 +1567,22 @@ const ht: UiStringTable = {
1278
1567
  'settings.notifications.title': 'Notifikasyon',
1279
1568
  'settings.notifications.push': 'Notifikasyon push',
1280
1569
  'settings.notifications.pushHint': 'Nouvo mesaj ak apèl reveye aparèy sa a menm lè aplikasyon an fèmen.',
1570
+ 'settings.language.app': 'Lang aplikasyon an',
1571
+ 'settings.language.appHint': 'Lang entèfas la.',
1572
+ 'settings.language.chat': 'Lang chat la',
1573
+ 'settings.language.chatHint': 'Mesaj yo tradui nan lang sa a.',
1574
+ 'settings.password.title': 'Chanje modpas',
1575
+ 'settings.password.current': 'Modpas aktyèl',
1576
+ 'settings.password.new': 'Nouvo modpas',
1577
+ 'settings.password.again': 'Repete nouvo modpas la',
1578
+ 'settings.password.submit': 'Chanje modpas',
1579
+ 'settings.password.changed': 'Modpas chanje',
1580
+ 'settings.password.wrongCurrent': 'Modpas aktyèl la pa kòrèk',
1581
+ 'settings.password.failed': 'Modpas la pa t ka chanje',
1582
+ 'settings.password.tooShort': 'Omwen {min} karaktè',
1583
+ 'settings.password.sameAsCurrent': 'Dwe diferan de modpas aktyèl la',
1584
+ 'settings.password.mismatch': 'Modpas yo pa menm',
1585
+ 'settings.password.hint': 'Sèvi ak nouvo modpas la pwochen fwa ou konekte.',
1281
1586
  'settings.visibility.title': 'Vizibilite',
1282
1587
  'settings.visibility.profileLabel': 'Vizibilite pwofil la',
1283
1588
  'settings.visibility.open': 'Louvri (default)',
@@ -1306,6 +1611,11 @@ const ht: UiStringTable = {
1306
1611
  const zh: UiStringTable = {
1307
1612
  'search.placeholder': '搜索...',
1308
1613
  'roomList.title': '聊天',
1614
+ 'menu.newChat': '新聊天',
1615
+ 'menu.profile': '个人资料',
1616
+ 'menu.settings': '设置',
1617
+ 'menu.logout': '退出登录',
1618
+ 'menu.logoutConfirm': '确定要退出登录吗?',
1309
1619
  'search.members': '搜索成员',
1310
1620
  'search.noResults': '未找到成员',
1311
1621
  'input.placeholder': '输入消息',
@@ -1315,6 +1625,39 @@ const zh: UiStringTable = {
1315
1625
  'date.yesterday': '昨天',
1316
1626
  'message.deleted': '消息已删除',
1317
1627
  'message.edited': '已编辑',
1628
+ 'message.sending': '发送中...',
1629
+ 'message.failedRetry': '! 发送失败 — 点击重试',
1630
+ 'thread.title': '话题',
1631
+ 'thread.alsoSendTo': '同时发送到',
1632
+ 'e2ee.roomEncrypted': '端到端加密',
1633
+ 'e2ee.notEncrypted': '未加密',
1634
+ 'e2ee.notEncryptedHint': '未使用端到端加密发送,因为还没有收件人发布密钥。',
1635
+ 'e2ee.devices.title': '端到端加密',
1636
+ 'e2ee.devices.thisDevice': '此设备',
1637
+ 'e2ee.devices.otherDevices': '其他设备',
1638
+ 'e2ee.devices.none': '尚未打开过加密聊天',
1639
+ 'e2ee.devices.noneOwn': '没有其他设备',
1640
+ 'e2ee.devices.unavailable': '此设备上的加密当前未运行',
1641
+ 'e2ee.devices.loading': '正在加载设备…',
1642
+ 'e2ee.devices.hint': '将指纹与对方设备上显示的指纹进行比较。仅在两者一致时才标记为已验证。',
1643
+ 'e2ee.trust.verified': '已验证',
1644
+ 'e2ee.trust.blind': '未验证',
1645
+ 'e2ee.trust.untrusted': '不受信任',
1646
+ 'e2ee.trust.verify': '标记为已验证',
1647
+ 'e2ee.trust.distrust': '停止信任',
1648
+ 'e2ee.trust.reset': '清除标记',
1649
+ 'e2ee.trust.prompt': '设备 {id}',
1650
+ 'e2ee.devices.copied': '指纹已复制',
1651
+ 'e2ee.unsupportedMessage': '加密消息。此版本的应用暂时无法读取。',
1652
+ 'e2ee.otherDevice': '已为其他设备加密',
1653
+ 'e2ee.undecryptable': '无法解密此消息',
1654
+ 'e2ee.sendUnavailable': '此聊天已启用端到端加密,暂不支持从移动应用发送消息。',
1655
+ 'media.sealedFile': '加密文件',
1656
+ 'media.sealedUnsupported': '此版本的应用暂时无法打开',
1657
+ 'media.sealedUnavailable': '无法打开加密附件',
1658
+ 'media.sealedDownload': '下载并解密',
1659
+ 'media.sealedDownloading': '正在解密…',
1660
+ 'media.sealedDownloadFailed': '下载失败 — 点击重试',
1318
1661
  'message.newMessages': '新消息',
1319
1662
  'notification.senderFallback': '新消息',
1320
1663
  'presence.online': '在线',
@@ -1434,6 +1777,10 @@ const zh: UiStringTable = {
1434
1777
  'settings.menu.title': '设置',
1435
1778
  'modal.filePreview.title': '文件预览',
1436
1779
  'toast.error': '错误',
1780
+ 'toast.failedToCreateRoom': '创建房间失败',
1781
+ 'toast.copied': '已复制到剪贴板!',
1782
+ 'toast.copyFailed': '复制失败',
1783
+ 'toast.saveSuccessful': '保存成功',
1437
1784
  'toast.couldNotOpenPrivateChat': '无法打开新的私聊',
1438
1785
  'toast.couldNotResolveRecipient': '无法识别收件人',
1439
1786
  'toast.failedToCreatePrivateChat': '创建私聊失败',
@@ -1459,6 +1806,7 @@ const zh: UiStringTable = {
1459
1806
  'field.referralCode': '您的推荐码',
1460
1807
  'action.logOut': '退出登录',
1461
1808
  'action.message': '发消息',
1809
+ 'action.encryptedMessage': '加密消息',
1462
1810
  'action.videoCall': '视频通话',
1463
1811
  'action.call': '通话',
1464
1812
  'action.audioCall': '语音通话',
@@ -1500,6 +1848,8 @@ const zh: UiStringTable = {
1500
1848
  'modal.chatProfile.removeMember': '将其移出该聊天?',
1501
1849
  'modal.chatProfile.memberListUnavailable': '成员列表不可用',
1502
1850
  'modal.deleteChat.title': '删除此聊天?',
1851
+ 'modal.deleteMessage.title': '删除消息',
1852
+ 'modal.deleteMessage.description': '确定要删除这条消息吗?',
1503
1853
  'modal.addMembers.title': '添加新成员',
1504
1854
  'modal.addMembers.userIdPlaceholder': '输入用户 ID',
1505
1855
  'modal.leaveChat.title': '退出聊天',
@@ -1536,6 +1886,22 @@ const zh: UiStringTable = {
1536
1886
  'settings.notifications.title': '通知',
1537
1887
  'settings.notifications.push': '推送通知',
1538
1888
  'settings.notifications.pushHint': '即使应用已关闭,新消息和来电也会唤醒此设备。',
1889
+ 'settings.language.app': '应用语言',
1890
+ 'settings.language.appHint': '界面语言。',
1891
+ 'settings.language.chat': '聊天语言',
1892
+ 'settings.language.chatHint': '消息会翻译成此语言。',
1893
+ 'settings.password.title': '修改密码',
1894
+ 'settings.password.current': '当前密码',
1895
+ 'settings.password.new': '新密码',
1896
+ 'settings.password.again': '再次输入新密码',
1897
+ 'settings.password.submit': '修改密码',
1898
+ 'settings.password.changed': '密码已修改',
1899
+ 'settings.password.wrongCurrent': '当前密码不正确',
1900
+ 'settings.password.failed': '无法修改密码',
1901
+ 'settings.password.tooShort': '至少 {min} 个字符',
1902
+ 'settings.password.sameAsCurrent': '必须与当前密码不同',
1903
+ 'settings.password.mismatch': '两次输入的密码不一致',
1904
+ 'settings.password.hint': '下次登录时请使用新密码。',
1539
1905
  'settings.visibility.title': '可见性',
1540
1906
  'settings.visibility.profileLabel': '资料可见性',
1541
1907
  '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
- const { config, langSource } = useChatSettingState();
43
- const locale = config?.i18n?.locale || langSource;
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(
package/src/main.ts CHANGED
@@ -123,3 +123,5 @@ export {
123
123
  export type { ChatTheme, ChatThemeColors, ChatThemeOverrides } from './theme';
124
124
  export type { ThemePreference } from './theme/theme';
125
125
  export { setThemePreference, setPushEnabled } from './roomStore/chatSettingsSlice';
126
+ export { omemo, isE2eeEnabled } from './e2ee';
127
+ export type { DeviceInfo, Trust } from './e2ee';