stream-chat-react-native-core 5.22.0-beta.9 → 5.22.0
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/lib/commonjs/components/Attachment/AudioAttachment.js +12 -12
- package/lib/commonjs/components/Attachment/AudioAttachment.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +65 -46
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +2 -0
- package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js +19 -19
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js +13 -13
- package/lib/commonjs/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/commonjs/contexts/channelContext/ChannelContext.js +2 -2
- package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +61 -40
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +2 -2
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/i18n/en.json +1 -1
- package/lib/commonjs/i18n/fr.json +50 -50
- package/lib/commonjs/i18n/hi.json +50 -50
- package/lib/commonjs/i18n/it.json +50 -50
- package/lib/commonjs/i18n/nl.json +50 -50
- package/lib/commonjs/i18n/ru.json +50 -50
- package/lib/commonjs/i18n/tr.json +50 -50
- package/lib/commonjs/types/types.js.map +1 -1
- package/lib/commonjs/utils/compressImage.js +37 -0
- package/lib/commonjs/utils/compressImage.js.map +1 -0
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/AudioAttachment.js +12 -12
- package/lib/module/components/Attachment/AudioAttachment.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +65 -46
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateChannelContext.js +2 -0
- package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js +19 -19
- package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/ImageUploadPreview.js +13 -13
- package/lib/module/components/MessageInput/ImageUploadPreview.js.map +1 -1
- package/lib/module/contexts/channelContext/ChannelContext.js +2 -2
- package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +61 -40
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +2 -2
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/i18n/en.json +1 -1
- package/lib/module/i18n/fr.json +50 -50
- package/lib/module/i18n/hi.json +50 -50
- package/lib/module/i18n/it.json +50 -50
- package/lib/module/i18n/nl.json +50 -50
- package/lib/module/i18n/ru.json +50 -50
- package/lib/module/i18n/tr.json +50 -50
- package/lib/module/types/types.js.map +1 -1
- package/lib/module/utils/compressImage.js +37 -0
- package/lib/module/utils/compressImage.js.map +1 -0
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/AudioAttachment.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useMessageActionHandlers.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +1 -1
- package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +5 -0
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +3 -23
- package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts +2 -2
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +2 -2
- package/lib/typescript/i18n/en.json +1 -1
- package/lib/typescript/i18n/fr.json +50 -50
- package/lib/typescript/i18n/hi.json +50 -50
- package/lib/typescript/i18n/it.json +50 -50
- package/lib/typescript/i18n/nl.json +50 -50
- package/lib/typescript/i18n/ru.json +50 -50
- package/lib/typescript/i18n/tr.json +50 -50
- package/lib/typescript/types/types.d.ts +20 -0
- package/lib/typescript/utils/compressImage.d.ts +8 -0
- package/package.json +1 -1
- package/src/components/Attachment/AudioAttachment.tsx +2 -1
- package/src/components/Channel/Channel.tsx +32 -8
- package/src/components/Channel/hooks/useCreateChannelContext.ts +2 -0
- package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +2 -9
- package/src/components/MessageInput/FileUploadPreview.tsx +1 -2
- package/src/components/MessageInput/ImageUploadPreview.tsx +1 -2
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +1 -1
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +1 -1
- package/src/contexts/channelContext/ChannelContext.tsx +5 -0
- package/src/contexts/messageInputContext/MessageInputContext.tsx +80 -68
- package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +3 -3
- package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +2 -2
- package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +2 -2
- package/src/contexts/messagesContext/MessagesContext.tsx +2 -2
- package/src/i18n/en.json +1 -1
- package/src/i18n/fr.json +50 -50
- package/src/i18n/hi.json +50 -50
- package/src/i18n/it.json +50 -50
- package/src/i18n/nl.json +50 -50
- package/src/i18n/ru.json +50 -50
- package/src/i18n/tr.json +50 -50
- package/src/types/types.ts +23 -0
- package/src/utils/compressImage.ts +32 -0
- package/src/version.json +1 -1
|
@@ -35,8 +35,16 @@ import type { MoreOptionsButtonProps } from '../../components/MessageInput/MoreO
|
|
|
35
35
|
import type { SendButtonProps } from '../../components/MessageInput/SendButton';
|
|
36
36
|
import type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';
|
|
37
37
|
import type { MessageType } from '../../components/MessageList/hooks/useMessageList';
|
|
38
|
-
import {
|
|
39
|
-
import type {
|
|
38
|
+
import { pickDocument } from '../../native';
|
|
39
|
+
import type {
|
|
40
|
+
Asset,
|
|
41
|
+
DefaultStreamChatGenerics,
|
|
42
|
+
File,
|
|
43
|
+
FileUpload,
|
|
44
|
+
ImageUpload,
|
|
45
|
+
UnknownType,
|
|
46
|
+
} from '../../types/types';
|
|
47
|
+
import { compressedImageURI } from '../../utils/compressImage';
|
|
40
48
|
import { removeReservedFields } from '../../utils/removeReservedFields';
|
|
41
49
|
import {
|
|
42
50
|
ACITriggerSettings,
|
|
@@ -58,28 +66,6 @@ import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
|
|
|
58
66
|
import { getDisplayName } from '../utils/getDisplayName';
|
|
59
67
|
import { isTestEnvironment } from '../utils/isTestEnvironment';
|
|
60
68
|
|
|
61
|
-
export type FileUpload = {
|
|
62
|
-
file: File;
|
|
63
|
-
id: string;
|
|
64
|
-
state: FileStateValue;
|
|
65
|
-
duration?: number;
|
|
66
|
-
paused?: boolean;
|
|
67
|
-
progress?: number;
|
|
68
|
-
thumb_url?: string;
|
|
69
|
-
url?: string;
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export type ImageUpload = {
|
|
73
|
-
file: Partial<Asset> & {
|
|
74
|
-
name?: string;
|
|
75
|
-
};
|
|
76
|
-
id: string;
|
|
77
|
-
state: FileStateValue;
|
|
78
|
-
height?: number;
|
|
79
|
-
url?: string;
|
|
80
|
-
width?: number;
|
|
81
|
-
};
|
|
82
|
-
|
|
83
69
|
export type MentionAllAppUsersQuery<
|
|
84
70
|
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
|
|
85
71
|
> = {
|
|
@@ -438,7 +424,8 @@ export const MessageInputProvider = <
|
|
|
438
424
|
|
|
439
425
|
const channelCapabities = useOwnCapabilitiesContext();
|
|
440
426
|
|
|
441
|
-
const { channel, giphyEnabled } =
|
|
427
|
+
const { channel, giphyEnabled, uploadAbortControllerRef } =
|
|
428
|
+
useChannelContext<StreamChatGenerics>();
|
|
442
429
|
const { thread } = useThreadContext<StreamChatGenerics>();
|
|
443
430
|
const { t } = useTranslationContext();
|
|
444
431
|
const inputBoxRef = useRef<TextInput | null>(null);
|
|
@@ -640,20 +627,21 @@ export const MessageInputProvider = <
|
|
|
640
627
|
setText('');
|
|
641
628
|
};
|
|
642
629
|
|
|
643
|
-
const mapImageUploadToAttachment = (image: ImageUpload) => {
|
|
630
|
+
const mapImageUploadToAttachment = (image: ImageUpload): Attachment<StreamChatGenerics> => {
|
|
644
631
|
const mime_type: string | boolean = lookup(image.file.name as string);
|
|
632
|
+
const name = image.file.name as string;
|
|
645
633
|
return {
|
|
646
|
-
fallback:
|
|
634
|
+
fallback: name,
|
|
647
635
|
image_url: image.url,
|
|
648
636
|
mime_type: mime_type ? mime_type : undefined,
|
|
649
637
|
original_height: image.height,
|
|
650
638
|
original_width: image.width,
|
|
651
|
-
|
|
639
|
+
originalImage: image.file,
|
|
652
640
|
type: 'image',
|
|
653
|
-
}
|
|
641
|
+
};
|
|
654
642
|
};
|
|
655
643
|
|
|
656
|
-
const mapFileUploadToAttachment = (file: FileUpload) => {
|
|
644
|
+
const mapFileUploadToAttachment = (file: FileUpload): Attachment<StreamChatGenerics> => {
|
|
657
645
|
if (file.file.mimeType?.startsWith('image/')) {
|
|
658
646
|
return {
|
|
659
647
|
fallback: file.file.name,
|
|
@@ -968,11 +956,24 @@ export const MessageInputProvider = <
|
|
|
968
956
|
if (value.doDocUploadRequest) {
|
|
969
957
|
response = await value.doDocUploadRequest(file, channel);
|
|
970
958
|
} else if (channel && file.uri) {
|
|
959
|
+
uploadAbortControllerRef.current.set(
|
|
960
|
+
file.name,
|
|
961
|
+
client.createAbortControllerForNextRequest(),
|
|
962
|
+
);
|
|
971
963
|
response = await channel.sendFile(file.uri, file.name, file.mimeType);
|
|
964
|
+
uploadAbortControllerRef.current.delete(file.name);
|
|
972
965
|
}
|
|
973
966
|
const extraData: Partial<FileUpload> = { thumb_url: response.thumb_url, url: response.file };
|
|
974
967
|
setFileUploads(getUploadSetStateAction(id, FileState.UPLOADED, extraData));
|
|
975
968
|
} catch (error: unknown) {
|
|
969
|
+
if (
|
|
970
|
+
error instanceof Error &&
|
|
971
|
+
(error.name === 'AbortError' || error.name === 'CanceledError')
|
|
972
|
+
) {
|
|
973
|
+
// nothing to do
|
|
974
|
+
uploadAbortControllerRef.current.delete(file.name);
|
|
975
|
+
return;
|
|
976
|
+
}
|
|
976
977
|
handleFileOrImageUploadError(error, false, id);
|
|
977
978
|
}
|
|
978
979
|
};
|
|
@@ -986,52 +987,55 @@ export const MessageInputProvider = <
|
|
|
986
987
|
|
|
987
988
|
let response = {} as SendFileAPIResponse;
|
|
988
989
|
|
|
990
|
+
const uri = file.uri || '';
|
|
991
|
+
const filename = file.name ?? uri.replace(/^(file:\/\/|content:\/\/)/, '');
|
|
992
|
+
|
|
989
993
|
try {
|
|
990
|
-
const
|
|
991
|
-
/**
|
|
992
|
-
* We skip compression if:
|
|
993
|
-
* - the file is from the camera as that should already be compressed
|
|
994
|
-
* - the file has no height/width value to maintain for compression
|
|
995
|
-
* - the compressImageQuality number is not present or is 1 (meaning no compression)
|
|
996
|
-
*/
|
|
997
|
-
const compressedUri = await (file.source === 'camera' ||
|
|
998
|
-
!file.height ||
|
|
999
|
-
!file.width ||
|
|
1000
|
-
typeof value.compressImageQuality !== 'number' ||
|
|
1001
|
-
value.compressImageQuality === 1
|
|
1002
|
-
? uri
|
|
1003
|
-
: compressImage({
|
|
1004
|
-
compressImageQuality: value.compressImageQuality,
|
|
1005
|
-
height: file.height,
|
|
1006
|
-
uri,
|
|
1007
|
-
width: file.width,
|
|
1008
|
-
}));
|
|
1009
|
-
const filename = file.name ?? uri.replace(/^(file:\/\/|content:\/\/)/, '');
|
|
994
|
+
const compressedUri = await compressedImageURI(file, value.compressImageQuality);
|
|
1010
995
|
const contentType = lookup(filename) || 'multipart/form-data';
|
|
1011
996
|
if (value.doImageUploadRequest) {
|
|
1012
997
|
response = await value.doImageUploadRequest(file, channel);
|
|
1013
998
|
} else if (compressedUri && channel) {
|
|
1014
999
|
if (value.sendImageAsync) {
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1000
|
+
uploadAbortControllerRef.current.set(
|
|
1001
|
+
filename,
|
|
1002
|
+
client.createAbortControllerForNextRequest(),
|
|
1003
|
+
);
|
|
1004
|
+
channel.sendImage(compressedUri, filename, contentType).then(
|
|
1005
|
+
(res) => {
|
|
1006
|
+
uploadAbortControllerRef.current.delete(filename);
|
|
1007
|
+
if (asyncIds.includes(id)) {
|
|
1008
|
+
// Evaluates to true if user hit send before image successfully uploaded
|
|
1009
|
+
setAsyncUploads((prevAsyncUploads) => {
|
|
1010
|
+
prevAsyncUploads[id] = {
|
|
1011
|
+
...prevAsyncUploads[id],
|
|
1012
|
+
state: FileState.UPLOADED,
|
|
1013
|
+
url: res.file,
|
|
1014
|
+
};
|
|
1015
|
+
return prevAsyncUploads;
|
|
1016
|
+
});
|
|
1017
|
+
} else {
|
|
1018
|
+
const newImageUploads = getUploadSetStateAction<ImageUpload>(
|
|
1019
|
+
id,
|
|
1020
|
+
FileState.UPLOADED,
|
|
1021
|
+
{
|
|
1022
|
+
url: res.file,
|
|
1023
|
+
},
|
|
1024
|
+
);
|
|
1025
|
+
setImageUploads(newImageUploads);
|
|
1026
|
+
}
|
|
1027
|
+
},
|
|
1028
|
+
() => {
|
|
1029
|
+
uploadAbortControllerRef.current.delete(filename);
|
|
1030
|
+
},
|
|
1031
|
+
);
|
|
1033
1032
|
} else {
|
|
1033
|
+
uploadAbortControllerRef.current.set(
|
|
1034
|
+
filename,
|
|
1035
|
+
client.createAbortControllerForNextRequest(),
|
|
1036
|
+
);
|
|
1034
1037
|
response = await channel.sendImage(compressedUri, filename, contentType);
|
|
1038
|
+
uploadAbortControllerRef.current.delete(filename);
|
|
1035
1039
|
}
|
|
1036
1040
|
}
|
|
1037
1041
|
|
|
@@ -1044,6 +1048,14 @@ export const MessageInputProvider = <
|
|
|
1044
1048
|
setImageUploads(newImageUploads);
|
|
1045
1049
|
}
|
|
1046
1050
|
} catch (error) {
|
|
1051
|
+
if (
|
|
1052
|
+
error instanceof Error &&
|
|
1053
|
+
(error.name === 'AbortError' || error.name === 'CanceledError')
|
|
1054
|
+
) {
|
|
1055
|
+
// nothing to do
|
|
1056
|
+
uploadAbortControllerRef.current.delete(filename);
|
|
1057
|
+
return;
|
|
1058
|
+
}
|
|
1047
1059
|
handleFileOrImageUploadError(error, true, id);
|
|
1048
1060
|
}
|
|
1049
1061
|
};
|
|
@@ -7,7 +7,7 @@ Object {
|
|
|
7
7
|
"fallback": undefined,
|
|
8
8
|
"image_url": undefined,
|
|
9
9
|
"mime_type": undefined,
|
|
10
|
-
"
|
|
10
|
+
"originalImage": Object {
|
|
11
11
|
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
12
12
|
},
|
|
13
13
|
"original_height": undefined,
|
|
@@ -106,7 +106,7 @@ Object {
|
|
|
106
106
|
"fallback": undefined,
|
|
107
107
|
"image_url": undefined,
|
|
108
108
|
"mime_type": undefined,
|
|
109
|
-
"
|
|
109
|
+
"originalImage": Object {
|
|
110
110
|
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
111
111
|
},
|
|
112
112
|
"original_height": undefined,
|
|
@@ -117,7 +117,7 @@ Object {
|
|
|
117
117
|
"fallback": undefined,
|
|
118
118
|
"image_url": undefined,
|
|
119
119
|
"mime_type": undefined,
|
|
120
|
-
"
|
|
120
|
+
"originalImage": Object {
|
|
121
121
|
"uri": "http://www.jackblack.com/tenac_iousd.bmp",
|
|
122
122
|
},
|
|
123
123
|
"original_height": undefined,
|
|
@@ -95,7 +95,7 @@ export const useCreateMessageInputContext = <
|
|
|
95
95
|
UploadProgressIndicator,
|
|
96
96
|
}: MessageInputContextValue<StreamChatGenerics> &
|
|
97
97
|
Pick<ThreadContextValue<StreamChatGenerics>, 'thread'>) => {
|
|
98
|
-
const
|
|
98
|
+
const editingdep = typeof editing === 'boolean' ? editing : editing?.id;
|
|
99
99
|
const fileUploadsValue = fileUploads
|
|
100
100
|
.map(({ duration, paused, progress, state }) => `${state},${paused},${progress},${duration}`)
|
|
101
101
|
.join();
|
|
@@ -198,7 +198,7 @@ export const useCreateMessageInputContext = <
|
|
|
198
198
|
}),
|
|
199
199
|
[
|
|
200
200
|
cooldownEndsAt,
|
|
201
|
-
|
|
201
|
+
editingdep,
|
|
202
202
|
fileUploadsValue,
|
|
203
203
|
giphyActive,
|
|
204
204
|
imageUploadsValue,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
|
|
3
|
-
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
3
|
+
import type { DefaultStreamChatGenerics, FileUpload, ImageUpload } from '../../../types/types';
|
|
4
4
|
import { generateRandomId } from '../../../utils/utils';
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { MessageInputContextValue } from '../MessageInputContext';
|
|
7
7
|
|
|
8
8
|
export const isEditingBoolean = <
|
|
9
9
|
StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
|
|
@@ -234,8 +234,8 @@ export type MessagesContextValue<
|
|
|
234
234
|
*/
|
|
235
235
|
ScrollToBottomButton: React.ComponentType<ScrollToBottomButtonProps>;
|
|
236
236
|
sendReaction: (type: string, messageId: string) => Promise<void>;
|
|
237
|
-
setEditingState: (message: MessageType<StreamChatGenerics>) => void;
|
|
238
|
-
setQuotedMessageState: (message: MessageType<StreamChatGenerics>) => void;
|
|
237
|
+
setEditingState: (message: MessageType<StreamChatGenerics> | boolean) => void;
|
|
238
|
+
setQuotedMessageState: (message: MessageType<StreamChatGenerics> | boolean) => void;
|
|
239
239
|
supportedReactions: ReactionData[];
|
|
240
240
|
/**
|
|
241
241
|
* UI component for TypingIndicator
|
package/src/i18n/en.json
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"File type not supported": "File type not supported",
|
|
25
25
|
"Flag": "Flag",
|
|
26
26
|
"Flag Message": "Flag Message",
|
|
27
|
-
"Flag action failed either due to a network issue or the message is already flagged": "Flag action failed either due to a network issue or the message is already flagged",
|
|
27
|
+
"Flag action failed either due to a network issue or the message is already flagged": "Flag action failed either due to a network issue or the message is already flagged.",
|
|
28
28
|
"How about sending your first message to a friend?": "How about sending your first message to a friend?",
|
|
29
29
|
"Instant Commands": "Instant Commands",
|
|
30
30
|
"Let's start chatting!": "Let's start chatting!",
|
package/src/i18n/fr.json
CHANGED
|
@@ -3,74 +3,74 @@
|
|
|
3
3
|
"1 Thread Reply": "Réponse à 1 fil",
|
|
4
4
|
"Allow access to your Gallery": "Autoriser l'accès à votre galerie",
|
|
5
5
|
"Allow camera access in device settings": "Autoriser l'accès à la caméra dans les paramètres de l'appareil",
|
|
6
|
-
"Also send to channel": "",
|
|
7
|
-
"Are you sure you want to permanently delete this message?": "",
|
|
8
|
-
"Block User": "",
|
|
9
|
-
"Cancel": "",
|
|
10
|
-
"Cannot Flag Message": "",
|
|
11
|
-
"Copy Message": "",
|
|
12
|
-
"Delete": "",
|
|
13
|
-
"Delete Message": "",
|
|
6
|
+
"Also send to channel": "Envoyer également à la chaîne",
|
|
7
|
+
"Are you sure you want to permanently delete this message?": "Êtes-vous sûr de vouloir supprimer définitivement ce message?",
|
|
8
|
+
"Block User": "Bloquer un utilisateur",
|
|
9
|
+
"Cancel": "Annuler",
|
|
10
|
+
"Cannot Flag Message": "Impossible de signaler le message",
|
|
11
|
+
"Copy Message": "Copier le message",
|
|
12
|
+
"Delete": "Supprimer",
|
|
13
|
+
"Delete Message": "Supprimer un message",
|
|
14
14
|
"Device camera is used to take photos or videos.": "L'appareil photo de l'appareil est utilisé pour prendre des photos ou des vidéos.",
|
|
15
|
-
"Do you want to send a copy of this message to a moderator for further investigation?": "",
|
|
16
|
-
"Edit Message": "",
|
|
17
|
-
"Editing Message": "",
|
|
15
|
+
"Do you want to send a copy of this message to a moderator for further investigation?": "Voulez-vous envoyer une copie de ce message à un modérateur pour une enquête plus approfondie?",
|
|
16
|
+
"Edit Message": "Éditer un message",
|
|
17
|
+
"Editing Message": "Édite un message",
|
|
18
18
|
"Emoji matching": "Correspondance Emoji",
|
|
19
|
-
"Empty message...": "",
|
|
20
|
-
"Error loading": "",
|
|
21
|
-
"Error loading channel list...": "",
|
|
22
|
-
"Error loading messages for this channel...": "",
|
|
23
|
-
"Error while loading, please reload/refresh": "",
|
|
24
|
-
"File type not supported": "",
|
|
25
|
-
"Flag": "",
|
|
26
|
-
"Flag Message": "",
|
|
27
|
-
"Flag action failed either due to a network issue or the message is already flagged": "",
|
|
28
|
-
"How about sending your first message to a friend?": "",
|
|
19
|
+
"Empty message...": "Message vide...",
|
|
20
|
+
"Error loading": "Erreur lors du chargement",
|
|
21
|
+
"Error loading channel list...": "Erreur lors du chargement de la liste de canaux...",
|
|
22
|
+
"Error loading messages for this channel...": "Erreur lors du chargement des messages de ce canal...",
|
|
23
|
+
"Error while loading, please reload/refresh": "Erreur lors du chargement, veuillez recharger/rafraîchir",
|
|
24
|
+
"File type not supported": "Le type de fichier n'est pas pris en charge",
|
|
25
|
+
"Flag": "Signaler",
|
|
26
|
+
"Flag Message": "Signaler le message",
|
|
27
|
+
"Flag action failed either due to a network issue or the message is already flagged": "L'action de signalisation a échoué en raison d'un problème de réseau ou le message est déjà signalé.",
|
|
28
|
+
"How about sending your first message to a friend?": "Et si vous envoyiez votre premier message à un ami ?",
|
|
29
29
|
"Instant Commands": "Commandes Instantanées",
|
|
30
|
-
"Let's start chatting!": "",
|
|
30
|
+
"Let's start chatting!": "Commençons à discuter !",
|
|
31
31
|
"Links are disabled": "Links are disabled",
|
|
32
|
-
"Loading channels...": "",
|
|
33
|
-
"Loading messages...": "",
|
|
34
|
-
"Loading...": "",
|
|
32
|
+
"Loading channels...": "Chargement des canaux...",
|
|
33
|
+
"Loading messages...": "Chargement des messages...",
|
|
34
|
+
"Loading...": "Chargement...",
|
|
35
35
|
"Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "Taille maximale de téléchargement de fichier atteinte. Veuillez télécharger un fichier inférieur à {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} Mo.",
|
|
36
|
-
"Message Reactions": "",
|
|
37
|
-
"Message deleted": "",
|
|
38
|
-
"Message flagged": "",
|
|
39
|
-
"Mute User": "",
|
|
40
|
-
"Not supported": "",
|
|
41
|
-
"Nothing yet...": "",
|
|
42
|
-
"Ok": "",
|
|
43
|
-
"Only visible to you": "",
|
|
36
|
+
"Message Reactions": "Réactions aux messages",
|
|
37
|
+
"Message deleted": "Message supprimé",
|
|
38
|
+
"Message flagged": "Message signalé",
|
|
39
|
+
"Mute User": "Utilisateur muet",
|
|
40
|
+
"Not supported": "Non pris en charge",
|
|
41
|
+
"Nothing yet...": "Aucun message...",
|
|
42
|
+
"Ok": "Ok",
|
|
43
|
+
"Only visible to you": "Seulement visible par vous",
|
|
44
44
|
"Open Settings": "Ouvrir les paramètres",
|
|
45
45
|
"Photo": "Photo",
|
|
46
46
|
"Photos and Videos": "Photos et vidéos",
|
|
47
|
-
"Pin to Conversation": "",
|
|
48
|
-
"Pinned by": "",
|
|
47
|
+
"Pin to Conversation": "Épingler à la conversation",
|
|
48
|
+
"Pinned by": "Épinglé par",
|
|
49
49
|
"Please enable access to your photos and videos so you can share them.": "Veuillez autoriser l'accès à vos photos et vidéos afin de pouvoir les partager.",
|
|
50
50
|
"Please select a channel first": "Veuillez d'abord selectionnez un canal",
|
|
51
|
-
"Reconnecting...": "",
|
|
52
|
-
"Reply": "",
|
|
53
|
-
"Reply to Message": "",
|
|
54
|
-
"Resend": "",
|
|
55
|
-
"Search GIFs": "",
|
|
51
|
+
"Reconnecting...": "Se Reconnecter...",
|
|
52
|
+
"Reply": "Répondre",
|
|
53
|
+
"Reply to Message": "Répondre au message",
|
|
54
|
+
"Resend": "Renvoyer",
|
|
55
|
+
"Search GIFs": "Rechercher des GIF",
|
|
56
56
|
"Select More Photos": "Sélectionner plus de photos",
|
|
57
|
-
"Send a message": "",
|
|
57
|
+
"Send a message": "Envoyer un message",
|
|
58
58
|
"Sending links is not allowed in this conversation": "Sending links is not allowed in this conversation",
|
|
59
|
-
"Slow mode ON": "",
|
|
60
|
-
"The message has been reported to a moderator.": "",
|
|
61
|
-
"Thread Reply": "",
|
|
62
|
-
"Unblock User": "",
|
|
59
|
+
"Slow mode ON": "Mode lent activé",
|
|
60
|
+
"The message has been reported to a moderator.": "Le message a été signalé à un modérateur.",
|
|
61
|
+
"Thread Reply": "Réponse à la discussion",
|
|
62
|
+
"Unblock User": "Débloquer Utilisateur",
|
|
63
63
|
"Unknown User": "Utilisateur inconnu",
|
|
64
|
-
"Unmute User": "",
|
|
65
|
-
"Unpin from Conversation": "",
|
|
64
|
+
"Unmute User": "Activer le son de Utilisateur",
|
|
65
|
+
"Unpin from Conversation": "Décrocher de la conversation",
|
|
66
66
|
"Unread Messages": "Messages non lus",
|
|
67
67
|
"Video": "Vidéo",
|
|
68
|
-
"You": "",
|
|
69
|
-
"You can't send messages in this channel": "",
|
|
68
|
+
"You": "Toi",
|
|
69
|
+
"You can't send messages in this channel": "You can't send messages in this channel",
|
|
70
70
|
"{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} et {{ nonSelfUserLength }} autres sont en train d'écrire",
|
|
71
71
|
"{{ index }} of {{ photoLength }}": "{{ index }} sur {{ photoLength }}",
|
|
72
72
|
"{{ replyCount }} Replies": "{{ replyCount }} Réponses",
|
|
73
73
|
"{{ replyCount }} Thread Replies": "{{replyCount}} Réponses à la discussion",
|
|
74
74
|
"{{ user }} is typing": "{{ user }} est en train d'écrire",
|
|
75
|
-
"🏙 Attachment...": ""
|
|
75
|
+
"🏙 Attachment...": "🏙 Pièce jointe..."
|
|
76
76
|
}
|
package/src/i18n/hi.json
CHANGED
|
@@ -3,74 +3,74 @@
|
|
|
3
3
|
"1 Thread Reply": "1 धागा उत्तर",
|
|
4
4
|
"Allow access to your Gallery": "अपनी गैलरी तक पहुँचने की अनुमति दें",
|
|
5
5
|
"Allow camera access in device settings": "डिवाइस सेटिंग्स में कैमरा एक्सेस की अनुमति दें",
|
|
6
|
-
"Also send to channel": "",
|
|
7
|
-
"Are you sure you want to permanently delete this message?": "",
|
|
8
|
-
"Block User": "",
|
|
9
|
-
"Cancel": "",
|
|
10
|
-
"Cannot Flag Message": "",
|
|
11
|
-
"Copy Message": "",
|
|
12
|
-
"Delete": "",
|
|
13
|
-
"Delete Message": "",
|
|
6
|
+
"Also send to channel": "चैनल को भी भेजें",
|
|
7
|
+
"Are you sure you want to permanently delete this message?": "क्या आप वाकई इस संदेश को स्थायी रूप से हटाना चाहते हैं?",
|
|
8
|
+
"Block User": "उपयोगकर्ता को रोक देना, ब्लॉक यूजर",
|
|
9
|
+
"Cancel": "रद्द करें",
|
|
10
|
+
"Cannot Flag Message": "मैसेज फ्लैग नहीं किया जा सकता है",
|
|
11
|
+
"Copy Message": "संदेश की प्रतिलिपि बनाएँ",
|
|
12
|
+
"Delete": "हटाएं",
|
|
13
|
+
"Delete Message": "मैसेज को डिलीट करे",
|
|
14
14
|
"Device camera is used to take photos or videos.": "डिवाइस कैमरे का उपयोग फ़ोटो या वीडियो लेने के लिए किया जाता है।",
|
|
15
|
-
"Do you want to send a copy of this message to a moderator for further investigation?": "",
|
|
16
|
-
"Edit Message": "",
|
|
17
|
-
"Editing Message": "",
|
|
15
|
+
"Do you want to send a copy of this message to a moderator for further investigation?": "क्या आप इस संदेश की एक प्रति आगे की जाँच के लिए किसी मॉडरेटर को भेजना चाहते हैं?",
|
|
16
|
+
"Edit Message": "मैसेज में बदलाव करे",
|
|
17
|
+
"Editing Message": "मैसेज बदला जा रहा है",
|
|
18
18
|
"Emoji matching": "इमोजी मिलान",
|
|
19
|
-
"Empty message...": "",
|
|
20
|
-
"Error loading": "",
|
|
21
|
-
"Error loading channel list...": "",
|
|
22
|
-
"Error loading messages for this channel...": "",
|
|
23
|
-
"Error while loading, please reload/refresh": "",
|
|
24
|
-
"File type not supported": "",
|
|
25
|
-
"Flag": "",
|
|
26
|
-
"Flag Message": "",
|
|
27
|
-
"Flag action failed either due to a network issue or the message is already flagged": "",
|
|
28
|
-
"How about sending your first message to a friend?": "",
|
|
19
|
+
"Empty message...": "खाली संदेश...",
|
|
20
|
+
"Error loading": "लोड होने मे त्रुटि",
|
|
21
|
+
"Error loading channel list...": "चैनल सूची लोड करने में त्रुटि...",
|
|
22
|
+
"Error loading messages for this channel...": "इस चैनल के लिए मेसेजेस लोड करने में त्रुटि हुई...",
|
|
23
|
+
"Error while loading, please reload/refresh": "एरर, रिफ्रेश करे",
|
|
24
|
+
"File type not supported": "फ़ाइल प्रकार समर्थित नहीं है",
|
|
25
|
+
"Flag": "झंडा",
|
|
26
|
+
"Flag Message": "झंडा संदेश",
|
|
27
|
+
"Flag action failed either due to a network issue or the message is already flagged": "फ़्लैग कार्रवाई या तो नेटवर्क समस्या के कारण विफल हो गई या संदेश पहले से फ़्लैग किया गया है।",
|
|
28
|
+
"How about sending your first message to a friend?": "किसी मित्र को अपना पहला संदेश भेजने के बारे में क्या ख़याल है?",
|
|
29
29
|
"Instant Commands": "त्वरित कमांड",
|
|
30
|
-
"Let's start chatting!": "",
|
|
30
|
+
"Let's start chatting!": "आइए चैट करना शुरू करें!",
|
|
31
31
|
"Links are disabled": "लिंक अक्षम हैं",
|
|
32
|
-
"Loading channels...": "",
|
|
33
|
-
"Loading messages...": "",
|
|
34
|
-
"Loading...": "",
|
|
32
|
+
"Loading channels...": "चैनल लोड हो रहे हैं...",
|
|
33
|
+
"Loading messages...": "मेसेजस लोड हो रहे हैं...",
|
|
34
|
+
"Loading...": "लोड हो रहा है...",
|
|
35
35
|
"Maximum file size upload limit reached. Please upload a file below {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} MB.": "अधिकतम फ़ाइल आकार अपलोड सीमा पूरी हो गई। कृपया {{MAX_FILE_SIZE_TO_UPLOAD_IN_MB}} एमबी से नीचे की फ़ाइल अपलोड करें।",
|
|
36
|
-
"Message Reactions": "",
|
|
37
|
-
"Message deleted": "",
|
|
38
|
-
"Message flagged": "",
|
|
39
|
-
"Mute User": "",
|
|
40
|
-
"Not supported": "",
|
|
41
|
-
"Nothing yet...": "",
|
|
42
|
-
"Ok": "",
|
|
43
|
-
"Only visible to you": "",
|
|
36
|
+
"Message Reactions": "संदेश प्रतिक्रियाएँ",
|
|
37
|
+
"Message deleted": "मैसेज हटा दिया गया",
|
|
38
|
+
"Message flagged": "संदेश को ध्वजांकित किया गया",
|
|
39
|
+
"Mute User": "उपयोगकर्ता को म्यूट करें",
|
|
40
|
+
"Not supported": "समर्थित नहीं",
|
|
41
|
+
"Nothing yet...": "कोई मैसेज नहीं है...",
|
|
42
|
+
"Ok": "ठीक",
|
|
43
|
+
"Only visible to you": "केवल आपको दिखाई दे रहा है",
|
|
44
44
|
"Open Settings": "सेटिंग्स खोलें",
|
|
45
45
|
"Photo": "तस्वीर",
|
|
46
46
|
"Photos and Videos": "तस्वीरें और वीडियों",
|
|
47
|
-
"Pin to Conversation": "",
|
|
48
|
-
"Pinned by": "",
|
|
47
|
+
"Pin to Conversation": "बातचीत में पिन करें",
|
|
48
|
+
"Pinned by": "द्वारा पिन किया गया",
|
|
49
49
|
"Please enable access to your photos and videos so you can share them.": "कृपया अपनी फ़ोटो और वीडियो तक पहुंच सक्षम करें ताकि आप उन्हें साझा कर सकें।",
|
|
50
50
|
"Please select a channel first": "कृपया पहले एक चैनल चुनें",
|
|
51
|
-
"Reconnecting...": "",
|
|
52
|
-
"Reply": "",
|
|
53
|
-
"Reply to Message": "",
|
|
54
|
-
"Resend": "",
|
|
55
|
-
"Search GIFs": "",
|
|
51
|
+
"Reconnecting...": "पुनः कनेक्ट हो...",
|
|
52
|
+
"Reply": "मैसेज को रिप्लाई करे",
|
|
53
|
+
"Reply to Message": "संदेश का जवाब दें",
|
|
54
|
+
"Resend": "पुन: भेजें",
|
|
55
|
+
"Search GIFs": "GIF खोजें",
|
|
56
56
|
"Select More Photos": "अधिक फ़ोटो चुनें",
|
|
57
|
-
"Send a message": "",
|
|
57
|
+
"Send a message": "एक संदेश भेजें",
|
|
58
58
|
"Sending links is not allowed in this conversation": "इस बातचीत में लिंक भेजने की अनुमति नहीं है",
|
|
59
|
-
"Slow mode ON": "",
|
|
60
|
-
"The message has been reported to a moderator.": "",
|
|
61
|
-
"Thread Reply": "",
|
|
62
|
-
"Unblock User": "",
|
|
59
|
+
"Slow mode ON": "स्लो मोड चालू",
|
|
60
|
+
"The message has been reported to a moderator.": "संदेश एक मॉडरेटर को सूचित किया गया है।",
|
|
61
|
+
"Thread Reply": "धागा जवाब",
|
|
62
|
+
"Unblock User": "उपयोगकर्ता को अनब्लॉक करें",
|
|
63
63
|
"Unknown User": "अज्ञात उपयोगकर्ता",
|
|
64
|
-
"Unmute User": "",
|
|
65
|
-
"Unpin from Conversation": "",
|
|
64
|
+
"Unmute User": "उपयोगकर्ता को अनम्यूट करें",
|
|
65
|
+
"Unpin from Conversation": "बातचीत से अनपिन करें",
|
|
66
66
|
"Unread Messages": "अपठित संदेश",
|
|
67
67
|
"Video": "वीडियो",
|
|
68
|
-
"You": "",
|
|
69
|
-
"You can't send messages in this channel": "",
|
|
68
|
+
"You": "आप",
|
|
69
|
+
"You can't send messages in this channel": "आप इस चैनल में संदेश नहीं भेज सकते",
|
|
70
70
|
"{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} और {{ nonSelfUserLength }} अधिक टाइप कर रहे हैं",
|
|
71
71
|
"{{ index }} of {{ photoLength }}": "{{ index }} / {{ photoLength }}",
|
|
72
72
|
"{{ replyCount }} Replies": "{{ replyCount }} रिप्लाई",
|
|
73
73
|
"{{ replyCount }} Thread Replies": "{{ replyCount }}} थ्रेड उत्तर",
|
|
74
74
|
"{{ user }} is typing": "{{ user }} टाइप कर रहा है",
|
|
75
|
-
"🏙 Attachment...": ""
|
|
75
|
+
"🏙 Attachment...": "🏙 अटैचमेंट..."
|
|
76
76
|
}
|