diff --git a/examples/SampleApp/src/components/MenuDrawer.tsx b/examples/SampleApp/src/components/MenuDrawer.tsx index 784c8f1771..64d8d8f371 100644 --- a/examples/SampleApp/src/components/MenuDrawer.tsx +++ b/examples/SampleApp/src/components/MenuDrawer.tsx @@ -19,6 +19,7 @@ import { SafeAreaView } from 'react-native-safe-area-context'; import { Group } from '../icons/Group.tsx'; import { User } from '../icons/User'; import { useLegacyColors } from '../theme/useLegacyColors'; +import { getRtlMirrorSwitchStyle } from '../utils/rtlMirrorSwitchStyle'; export const styles = StyleSheet.create({ avatar: { @@ -220,6 +221,7 @@ export const MenuDrawer = ({ navigation }: DrawerContentComponentProps) => { = ({ active, height = 24, width = 24 const { black, grey } = useLegacyColors(); return ( - + + + ); }; diff --git a/examples/SampleApp/src/icons/Mute.tsx b/examples/SampleApp/src/icons/Mute.tsx index 9edc9ef7bc..83edc2dba6 100644 --- a/examples/SampleApp/src/icons/Mute.tsx +++ b/examples/SampleApp/src/icons/Mute.tsx @@ -1,40 +1,43 @@ import React from 'react'; -import Svg, { Path, Mask } from 'react-native-svg'; +import { I18nManager } from 'react-native'; +import Svg, { G, Path, Mask } from 'react-native-svg'; import { IconProps } from '../utils/base'; export const Mute: React.FC = ({ height = 20, width = 20, ...rest }) => { return ( - + + + + + - - - - + + ); }; diff --git a/examples/SampleApp/src/icons/RightArrow.tsx b/examples/SampleApp/src/icons/RightArrow.tsx index 472a34e4f5..0ae6261c26 100644 --- a/examples/SampleApp/src/icons/RightArrow.tsx +++ b/examples/SampleApp/src/icons/RightArrow.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { I18nManager } from 'react-native'; import { G, Path, Svg } from 'react-native-svg'; import { IconProps } from '../utils/base'; @@ -17,14 +18,16 @@ export const RightArrow = ({ return ( - - + + + + ); diff --git a/examples/SampleApp/src/icons/Search.tsx b/examples/SampleApp/src/icons/Search.tsx index 13d2aac5ab..d6b7c6fd8a 100644 --- a/examples/SampleApp/src/icons/Search.tsx +++ b/examples/SampleApp/src/icons/Search.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { I18nManager } from 'react-native'; import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from '../utils/base'; @@ -6,6 +7,7 @@ import { useLegacyColors } from '../theme/useLegacyColors'; export const Search: React.FC = ({ fill, height = 24, scale = 1, width = 24 }) => { const { black } = useLegacyColors(); + const vbWidth = height * scale; return ( = ({ fill, height = 24, scale = 1, widt viewBox={`0 0 ${height * scale} ${width * scale}`} width={width * scale} > - - + + + + ); diff --git a/examples/SampleApp/src/screens/ChannelListScreen.tsx b/examples/SampleApp/src/screens/ChannelListScreen.tsx index 5b2579dc7f..0e97b7dc0d 100644 --- a/examples/SampleApp/src/screens/ChannelListScreen.tsx +++ b/examples/SampleApp/src/screens/ChannelListScreen.tsx @@ -2,6 +2,7 @@ import React, { RefObject, useCallback, useMemo, useRef, useState } from 'react' import { FlatList, FlatListProps, + I18nManager, StyleSheet, Text, TextInput, @@ -9,7 +10,12 @@ import { View, } from 'react-native'; import { useNavigation, useScrollToTop } from '@react-navigation/native'; -import { ChannelList, useTheme, useStableCallback, ChannelActionItem } from 'stream-chat-react-native'; +import { + ChannelList, + useTheme, + useStableCallback, + ChannelActionItem, +} from 'stream-chat-react-native'; import { Channel } from 'stream-chat'; import { ChannelPreview } from '../components/ChannelPreview'; import { ChatScreenHeader } from '../components/ChatScreenHeader'; @@ -43,7 +49,7 @@ const styles = StyleSheet.create({ alignItems: 'center', borderRadius: 30, borderWidth: 1, - flexDirection: 'row', + flexDirection: I18nManager.isRTL ? 'row-reverse' : 'row', margin: 8, paddingHorizontal: 10, paddingVertical: 8, @@ -143,34 +149,36 @@ export const ChannelListScreen: React.FC = () => { [], ); - const getChannelActionItems = useStableCallback(({ context: { isDirectChat, channel }, defaultItems }) => { - const viewInfo = () => { - if (!channel) { - return; - } - if (navigation) { - if (isDirectChat) { - navigation.navigate('OneOnOneChannelDetailScreen', { - channel, - }); - } else { - navigation.navigate('GroupChannelDetailsScreen', { - channel, - }); + const getChannelActionItems = useStableCallback( + ({ context: { isDirectChat, channel }, defaultItems }) => { + const viewInfo = () => { + if (!channel) { + return; + } + if (navigation) { + if (isDirectChat) { + navigation.navigate('OneOnOneChannelDetailScreen', { + channel, + }); + } else { + navigation.navigate('GroupChannelDetailsScreen', { + channel, + }); + } } - } - }; + }; - const viewInfoItem: ChannelActionItem = { - action: viewInfo, - Icon: ChannelInfo, - id: 'info', - label: 'View Info', - placement: 'sheet', - type: 'standard', - } - return [viewInfoItem, ...defaultItems] - }) + const viewInfoItem: ChannelActionItem = { + action: viewInfo, + Icon: ChannelInfo, + id: 'info', + label: 'View Info', + placement: 'sheet', + type: 'standard', + }; + return [viewInfoItem, ...defaultItems]; + }, + ); if (!chatClient) { return null; diff --git a/examples/SampleApp/src/screens/GroupChannelDetailsScreen.tsx b/examples/SampleApp/src/screens/GroupChannelDetailsScreen.tsx index 38f7bd31f5..183b8255a7 100644 --- a/examples/SampleApp/src/screens/GroupChannelDetailsScreen.tsx +++ b/examples/SampleApp/src/screens/GroupChannelDetailsScreen.tsx @@ -34,6 +34,7 @@ import { LeaveGroup } from '../icons/LeaveGroup'; import { Mute } from '../icons/Mute'; import { Picture } from '../icons/Picture'; import type { StackNavigatorParamList } from '../types'; +import { getRtlMirrorSwitchStyle } from '../utils/rtlMirrorSwitchStyle'; const MAX_VISIBLE_MEMBERS = 5; @@ -278,6 +279,7 @@ export const GroupChannelDetailsScreen: React.FC = ({ trailing={ = ({ trailing={ { + if (Platform.OS !== 'ios' || !I18nManager.isRTL) { + return {}; + } + return { + transform: [{ scaleX: -1 }], + }; +} diff --git a/package/src/components/Message/MessageItemView/__tests__/__snapshots__/MessageTextContainer.test.tsx.snap b/package/src/components/Message/MessageItemView/__tests__/__snapshots__/MessageTextContainer.test.tsx.snap index 5a65f91e01..99b414f7a2 100644 --- a/package/src/components/Message/MessageItemView/__tests__/__snapshots__/MessageTextContainer.test.tsx.snap +++ b/package/src/components/Message/MessageItemView/__tests__/__snapshots__/MessageTextContainer.test.tsx.snap @@ -44,6 +44,7 @@ exports[`MessageTextContainer should render message text container 1`] = ` "color": "#1a1b25", "fontSize": 17, "lineHeight": 20, + "writingDirection": "ltr", } } > diff --git a/package/src/components/Message/MessageItemView/utils/renderText.tsx b/package/src/components/Message/MessageItemView/utils/renderText.tsx index f7ef3ba0ef..5ebad0f150 100644 --- a/package/src/components/Message/MessageItemView/utils/renderText.tsx +++ b/package/src/components/Message/MessageItemView/utils/renderText.tsx @@ -1,6 +1,7 @@ import React, { PropsWithChildren, ReactNode, useCallback, useMemo } from 'react'; import { GestureResponderEvent, + I18nManager, Linking, Platform, Text, @@ -294,6 +295,7 @@ export const renderText = (params: RenderTextParams) => { ...defaultMarkdownStyles.text, color: isMyMessage ? semantics.chatTextOutgoing : semantics.chatTextIncoming, ...markdownStyles?.text, + writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr', }, }; diff --git a/package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.js.snap b/package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.js.snap index 1c74a43ca1..ff30e40597 100644 --- a/package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.js.snap +++ b/package/src/components/MessageInput/__tests__/__snapshots__/SendButton.test.js.snap @@ -122,28 +122,37 @@ exports[`SendButton should render a SendButton 1`] = ` } strokeWidth={1.5} > - + > + + @@ -998,28 +1007,37 @@ exports[`SendButton should render a disabled SendButton 1`] = ` } strokeWidth={1.5} > - + > + + diff --git a/package/src/components/Poll/CreatePollContent.tsx b/package/src/components/Poll/CreatePollContent.tsx index b1b9174c80..01be65eaa9 100644 --- a/package/src/components/Poll/CreatePollContent.tsx +++ b/package/src/components/Poll/CreatePollContent.tsx @@ -24,6 +24,7 @@ import { import { useMessageComposer } from '../../contexts/messageInputContext/hooks/useMessageComposer'; import { useStateStore } from '../../hooks/useStateStore'; import { primitives } from '../../theme'; +import { getRtlMirrorSwitchStyle } from '../../utils/rtlMirrorSwitchStyle'; const pollComposerStateSelector = (state: PollComposerState) => ({ options: state.data.options, @@ -171,7 +172,11 @@ export const CreatePollContent = () => { @@ -185,7 +190,11 @@ export const CreatePollContent = () => { @@ -199,7 +208,11 @@ export const CreatePollContent = () => { diff --git a/package/src/components/Poll/components/MultipleAnswersField.tsx b/package/src/components/Poll/components/MultipleAnswersField.tsx index 62ae9e267d..e4072efac2 100644 --- a/package/src/components/Poll/components/MultipleAnswersField.tsx +++ b/package/src/components/Poll/components/MultipleAnswersField.tsx @@ -8,6 +8,7 @@ import { MultipleVotesSettings } from './MultipleVotesSettings'; import { useTheme, useTranslationContext } from '../../../contexts'; import { useMessageComposer } from '../../../contexts/messageInputContext/hooks/useMessageComposer'; import { primitives } from '../../../theme'; +import { getRtlMirrorSwitchStyle } from '../../../utils/rtlMirrorSwitchStyle'; export const MultipleAnswersField = () => { const [allowMultipleVotes, setAllowMultipleVotes] = useState(false); @@ -49,7 +50,11 @@ export const MultipleAnswersField = () => { {allowMultipleVotes ? : null} diff --git a/package/src/components/Poll/components/MultipleVotesSettings.tsx b/package/src/components/Poll/components/MultipleVotesSettings.tsx index 403944fbce..c7f97c6662 100644 --- a/package/src/components/Poll/components/MultipleVotesSettings.tsx +++ b/package/src/components/Poll/components/MultipleVotesSettings.tsx @@ -11,6 +11,7 @@ import { useStableCallback } from '../../../hooks'; import { useStateStore } from '../../../hooks/useStateStore'; import { Minus, Plus } from '../../../icons'; import { primitives } from '../../../theme'; +import { getRtlMirrorSwitchStyle } from '../../../utils/rtlMirrorSwitchStyle'; import { Button } from '../../ui'; const pollComposerStateSelector = (state: PollComposerState) => ({ @@ -152,7 +153,11 @@ export const MultipleVotesSettings = () => { {allowMaxVotesPerPerson ? ( diff --git a/package/src/components/Poll/components/PollInputDialog.tsx b/package/src/components/Poll/components/PollInputDialog.tsx index 3032a1d92d..2099aed082 100644 --- a/package/src/components/Poll/components/PollInputDialog.tsx +++ b/package/src/components/Poll/components/PollInputDialog.tsx @@ -144,6 +144,7 @@ const useStyles = () => { fontSize: primitives.typographyFontSizeMd, fontWeight: primitives.typographyFontWeightMedium, lineHeight: primitives.typographyLineHeightNormal, + writingDirection: I18nManager.isRTL ? 'rtl' : 'ltr', }, transparentContainer: { alignItems: 'center', diff --git a/package/src/components/Reply/Reply.tsx b/package/src/components/Reply/Reply.tsx index 46aa282aa1..687400e309 100644 --- a/package/src/components/Reply/Reply.tsx +++ b/package/src/components/Reply/Reply.tsx @@ -18,6 +18,7 @@ import { import { useMessageComposer } from '../../contexts/messageInputContext/hooks/useMessageComposer'; import { MessagesContextValue } from '../../contexts/messagesContext/MessagesContext'; import { useTheme } from '../../contexts/themeContext/ThemeContext'; +import { useTranslationContext } from '../../contexts/translationContext/TranslationContext'; import { useStateStore } from '../../hooks'; import { primitives } from '../../theme'; import { FileTypes } from '../../types/types'; @@ -96,6 +97,7 @@ export type ReplyPropsWithContext = Pick & }; export const ReplyWithContext = (props: ReplyPropsWithContext) => { + const { t } = useTranslationContext(); const { isMyMessage, ImageComponent, @@ -122,13 +124,13 @@ export const ReplyWithContext = (props: ReplyPropsWithContext) => { const title = useMemo( () => mode === 'edit' - ? 'Edit Message' + ? t('Edit Message') : isMyMessage - ? 'You' + ? t('You') : quotedMessage?.user?.name - ? `Reply to ${quotedMessage?.user?.name}` - : 'Reply', - [mode, isMyMessage, quotedMessage?.user?.name], + ? t('Reply to {{name}}', { name: quotedMessage?.user?.name }) + : t('Reply'), + [mode, isMyMessage, quotedMessage?.user?.name, t], ); if (!quotedMessage) { diff --git a/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap b/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap index c9e1e0cc1a..bfd23554c3 100644 --- a/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +++ b/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap @@ -592,6 +592,7 @@ exports[`Thread should match thread snapshot 1`] = ` "color": "#1a1b25", "fontSize": 17, "lineHeight": 20, + "writingDirection": "ltr", } } > @@ -929,6 +930,7 @@ exports[`Thread should match thread snapshot 1`] = ` "color": "#1a1b25", "fontSize": 17, "lineHeight": 20, + "writingDirection": "ltr", } } > @@ -1299,6 +1301,7 @@ exports[`Thread should match thread snapshot 1`] = ` "color": "#1a1b25", "fontSize": 17, "lineHeight": 20, + "writingDirection": "ltr", } } > @@ -1627,6 +1630,7 @@ exports[`Thread should match thread snapshot 1`] = ` "color": "#1a1b25", "fontSize": 17, "lineHeight": 20, + "writingDirection": "ltr", } } > @@ -2282,28 +2286,37 @@ exports[`Thread should match thread snapshot 1`] = ` } strokeWidth={1.5} > - + > + + diff --git a/package/src/hooks/messagePreview/useMessagePreviewText.tsx b/package/src/hooks/messagePreview/useMessagePreviewText.tsx index 3db2f16da8..f050583d55 100644 --- a/package/src/hooks/messagePreview/useMessagePreviewText.tsx +++ b/package/src/hooks/messagePreview/useMessagePreviewText.tsx @@ -10,6 +10,7 @@ import { import { useGroupedAttachments } from './useGroupedAttachments'; import { useChatContext } from '../../contexts/chatContext/ChatContext'; +import { useTranslationContext } from '../../contexts/translationContext/TranslationContext'; import { useStateStore } from '../../hooks/useStateStore'; const selector = (nextValue: PollState) => ({ @@ -21,6 +22,7 @@ export const useMessagePreviewText = ({ }: { message?: LocalMessage | MessageResponse | DraftMessage | null; }) => { + const { t } = useTranslationContext(); const { client } = useChatContext(); const poll = client.polls.fromState(message?.poll_id ?? ''); const { name: pollName } = useStateStore(poll?.state, selector) ?? {}; @@ -36,7 +38,7 @@ export const useMessagePreviewText = ({ const onlyVoiceRecordings = voiceRecordings?.length && voiceRecordings?.length === attachmentsLength; if (message?.type === 'deleted') { - return 'Message deleted'; + return t('Message deleted'); } if (pollName) { @@ -49,13 +51,13 @@ export const useMessagePreviewText = ({ (message?.shared_location as LiveLocationPayload)?.end_at && new Date((message?.shared_location as LiveLocationPayload)?.end_at) > new Date() ) { - return 'Live Location'; + return t('Live Location'); } - return 'Location'; + return t('Location'); } if (giphys?.length) { - return 'Giphy'; + return t('Giphy'); } if (message?.text) { @@ -64,33 +66,35 @@ export const useMessagePreviewText = ({ if (onlyImages) { if (images?.length === 1) { - return 'Photo'; + return t('Photo'); } else { - return `${images?.length} Photos`; + return t('{{count}} Photos', { count: images?.length }); } } if (onlyVideos) { if (videos?.length === 1) { - return 'Video'; + return t('Video'); } else { - return `${videos?.length} Videos`; + return t(`{{count}} Videos`, { count: videos?.length }); } } if (onlyAudio) { if (audios?.length === 1) { - return 'Audio'; + return t('Audio'); } else { - return `${audios?.length} Audios`; + return t('{{count}} Audios', { count: audios?.length }); } } if (onlyVoiceRecordings) { if (voiceRecordings?.length === 1) { - return `Voice message (${dayjs.duration(voiceRecordings?.[0]?.duration ?? 0, 'seconds').format('m:ss')})`; + return t(`Voice message ({{duration}})`, { + duration: dayjs.duration(voiceRecordings?.[0]?.duration ?? 0, 'seconds').format('m:ss'), + }); } else { - return `${voiceRecordings?.length} Voice messages`; + return t('{{count}} Voice messages', { count: voiceRecordings?.length }); } } @@ -98,5 +102,5 @@ export const useMessagePreviewText = ({ return files?.[0]?.title; } - return `${attachmentsLength} Files`; + return t('{{count}} Files', { count: attachmentsLength }); }; diff --git a/package/src/i18n/en.json b/package/src/i18n/en.json index 5a948d9415..203c5b7c91 100644 --- a/package/src/i18n/en.json +++ b/package/src/i18n/en.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Are you sure you want to permanently delete this message?", "Are you sure?": "Are you sure?", "Ask a question": "Ask a question", + "Audio": "Audio", "Ban User": "Ban User", "Block User": "Block User", "Cancel": "Cancel", @@ -46,11 +47,13 @@ "Flag Message": "Flag Message", "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.", "Generating...": "Generating...", + "Giphy": "Giphy", "Hold to start recording.": "Hold to start recording.", "How about sending your first message to a friend?": "How about sending your first message to a friend?", "Instant Commands": "Instant Commands", "Let's start chatting!": "Let's start chatting!", "Links are disabled": "Links are disabled", + "Live Location": "Live Location", "Loading channels...": "Loading channels...", "Loading messages...": "Loading messages...", "Loading threads...": "Loading threads...", @@ -90,6 +93,7 @@ "Questions": "Questions", "Reconnecting...": "Reconnecting...", "Reply": "Reply", + "Reply to {{name}}": "Reply to {{name}}", "Reply to Message": "Reply to Message", "Resend": "Resend", "SEND": "SEND", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "View {{count}} comment", "View {{count}} comments_other": "View {{count}} comments", "Voice message": "Voice message", + "Voice message ({{duration}})": "Voice message ({{duration}})", "Your comment": "Your comment", "You": "You", "You can't send messages in this channel": "You can't send messages in this channel", @@ -156,6 +161,21 @@ "Message failed to send": "Message failed to send", "and {{ count }} others": "and {{ count }} others", "{{ user }} voted: {{ option }}": "{{ user }} voted: {{ option }}", + "{{count}} Audios_many": "{{count}} Audios", + "{{count}} Audios_one": "{{count}} Audio", + "{{count}} Audios_other": "{{count}} Audios", + "{{count}} Files_many": "{{count}} Files", + "{{count}} Files_one": "{{count}} File", + "{{count}} Files_other": "{{count}} Files", + "{{count}} Photos_many": "{{count}} Photos", + "{{count}} Photos_one": "{{count}} Photo", + "{{count}} Photos_other": "{{count}} Photos", + "{{count}} Voice messages_many": "{{count}} Voice messages", + "{{count}} Voice messages_one": "{{count}} Voice message", + "{{count}} Voice messages_other": "{{count}} Voice messages", + "{{count}} Videos_many": "{{count}} Videos", + "{{count}} Videos_one": "{{count}} Video", + "{{count}} Videos_other": "{{count}} Videos", "{{count}} votes_many": "{{count}} votes", "{{count}} votes_one": "{{count}} vote", "{{count}} votes_other": "{{count}} votes", diff --git a/package/src/i18n/es.json b/package/src/i18n/es.json index 7700717c5f..4cad141dcc 100644 --- a/package/src/i18n/es.json +++ b/package/src/i18n/es.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "¿Estás seguro de que deseas eliminar permanentemente este mensaje?", "Are you sure?": "¿Estás seguro?", "Ask a question": "Hacer una pregunta", + "Audio": "Audio", "Ban User": "Bloquear Usuario", "Block User": "Bloquear usuario", "Cancel": "Cancelar", @@ -46,11 +47,13 @@ "Flag Message": "Reportar mensaje", "Flag action failed either due to a network issue or the message is already flagged": "El reporte falló debido a un problema de red o el mensaje ya fue reportado.", "Generating...": "Generando...", + "Giphy": "Giphy", "Hold to start recording.": "Mantén presionado para comenzar a grabar.", "How about sending your first message to a friend?": "¿Qué tal enviar tu primer mensaje a un amigo?", "Instant Commands": "Comandos instantáneos", "Let's start chatting!": "¡Empecemos a charlar!", "Links are disabled": "Los enlaces están desactivados", + "Live Location": "Ubicación en vivo", "Loading channels...": "Cargando canales...", "Loading messages...": "Cargando mensajes...", "Loading threads...": "Cargando hilos...", @@ -90,6 +93,7 @@ "Questions": "Preguntas", "Reconnecting...": "Reconectando...", "Reply": "Responder", + "Reply to {{name}}": "Responder a {{name}}", "Reply to Message": "Responder al mensaje", "Resend": "Reenviar", "SEND": "ENVIAR", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Ver {{count}} comentario", "View {{count}} comments_other": "Ver {{count}} comentarios", "Voice message": "Mensaje de voz", + "Voice message ({{duration}})": "Mensaje de voz ({{duration}})", "Your comment": "Tu comentario", "You": "Tú", "You can't send messages in this channel": "No puedes enviar mensajes en este canal", @@ -156,6 +161,21 @@ "Message failed to send": "El mensaje no se pudo enviar", "and {{ count }} others": "y {{ count }} más", "{{ user }} voted: {{ option }}": "{{ user }} votó: {{ option }}", + "{{count}} Audios_many": "{{count}} audios", + "{{count}} Audios_one": "{{count}} audio", + "{{count}} Audios_other": "{{count}} audios", + "{{count}} Files_many": "{{count}} archivos", + "{{count}} Files_one": "{{count}} archivo", + "{{count}} Files_other": "{{count}} archivos", + "{{count}} Photos_many": "{{count}} fotos", + "{{count}} Photos_one": "{{count}} foto", + "{{count}} Photos_other": "{{count}} fotos", + "{{count}} Voice messages_many": "{{count}} mensajes de voz", + "{{count}} Voice messages_one": "{{count}} mensaje de voz", + "{{count}} Voice messages_other": "{{count}} mensajes de voz", + "{{count}} Videos_many": "{{count}} vídeos", + "{{count}} Videos_one": "{{count}} vídeo", + "{{count}} Videos_other": "{{count}} vídeos", "{{count}} votes_many": "{{count}} votos", "{{count}} votes_one": "{{count}} voto", "{{count}} votes_other": "{{count}} votos", diff --git a/package/src/i18n/fr.json b/package/src/i18n/fr.json index 8792562d47..f39616f9a8 100644 --- a/package/src/i18n/fr.json +++ b/package/src/i18n/fr.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Êtes-vous sûr de vouloir supprimer définitivement ce message?", "Are you sure?": "Es-tu sûr ?", "Ask a question": "Poser une question", + "Audio": "Audio", "Ban User": "Bannir Utilisateur", "Block User": "Bloquer un utilisateur", "Cancel": "Annuler", @@ -46,11 +47,13 @@ "Flag Message": "Signaler le message", "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é.", "Generating...": "Génération...", + "Giphy": "Giphy", "Hold to start recording.": "Hold to start recording.", "How about sending your first message to a friend?": "Et si vous envoyiez votre premier message à un ami ?", "Instant Commands": "Commandes Instantanées", "Let's start chatting!": "Commençons à discuter !", "Links are disabled": "Links are disabled", + "Live Location": "Position en direct", "Loading channels...": "Chargement des canaux...", "Loading messages...": "Chargement des messages...", "Loading threads...": "Chargement des fils...", @@ -90,6 +93,7 @@ "Questions": "Questions", "Reconnecting...": "Se Reconnecter...", "Reply": "Répondre", + "Reply to {{name}}": "Répondre à {{name}}", "Reply to Message": "Répondre au message", "Resend": "Renvoyer", "SEND": "ENVOYER", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Voir {{count}} commentaire", "View {{count}} comments_other": "Voir {{count}} commentaires", "Voice message": "Message vocal", + "Voice message ({{duration}})": "Message vocal ({{duration}})", "Your comment": "Votre commentaire", "You": "Toi", "You can't send messages in this channel": "You can't send messages in this channel", @@ -156,6 +161,21 @@ "Message failed to send": "Le message n'a pas pu être envoyé", "and {{ count }} others": "et {{ count }} autres", "{{ user }} voted: {{ option }}": "{{ user }} a voté: {{ option }}", + "{{count}} Audios_many": "{{count}} audios", + "{{count}} Audios_one": "{{count}} audio", + "{{count}} Audios_other": "{{count}} audios", + "{{count}} Files_many": "{{count}} fichiers", + "{{count}} Files_one": "{{count}} fichier", + "{{count}} Files_other": "{{count}} fichiers", + "{{count}} Photos_many": "{{count}} photos", + "{{count}} Photos_one": "{{count}} photo", + "{{count}} Photos_other": "{{count}} photos", + "{{count}} Voice messages_many": "{{count}} messages vocaux", + "{{count}} Voice messages_one": "{{count}} message vocal", + "{{count}} Voice messages_other": "{{count}} messages vocaux", + "{{count}} Videos_many": "{{count}} vidéos", + "{{count}} Videos_one": "{{count}} vidéo", + "{{count}} Videos_other": "{{count}} vidéos", "{{count}} votes_many": "{{count}} votes", "{{count}} votes_one": "{{count}} vote", "{{count}} votes_other": "{{count}} votes", diff --git a/package/src/i18n/he.json b/package/src/i18n/he.json index c359f3482f..63af4d6a1a 100644 --- a/package/src/i18n/he.json +++ b/package/src/i18n/he.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "האם את/ה בטוח/ה שאת/ה רוצה למחוק את ההודעה הזו לצמיתות?", "Are you sure?": "האם אתה בטוח?", "Ask a question": "שאל שאלה", + "Audio": "אודיו", "Ban User": "לחסום משתמש", "Block User": "חסום משתמש", "Cancel": "ביטול", @@ -46,11 +47,13 @@ "Flag Message": "סמן הודעה", "Flag action failed either due to a network issue or the message is already flagged": "פעולת הסימון נכשלה בגלל בעיית רשת או שההודעה כבר סומנה.", "Generating...": "מייצר...", + "Giphy": "Giphy", "Hold to start recording.": "לחץ והחזק כדי להתחיל להקליט.", "How about sending your first message to a friend?": "מה דעתך לשלוח את ההודעה הראשונה שלך לחבר?", "Instant Commands": "פעולות מיידיות", "Let's start chatting!": "בואו נתחיל לשוחח!", "Links are disabled": "הקישורים מבוטלים", + "Live Location": "מיקום חי", "Loading channels...": "השיחות בטעינה...", "Loading messages...": "ההודעות בטעינה..", "Loading threads...": "טוען שרשורים...", @@ -90,6 +93,7 @@ "Questions": "שאלות", "Reconnecting...": "מתחבר מחדש...", "Reply": "השב/י", + "Reply to {{name}}": "השב/י ל-{{name}}", "Reply to Message": "השב/י להודעה", "Resend": "שלח/י שוב", "SEND": "שלח", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "הצג {{count}} תגובה", "View {{count}} comments_other": "הצג {{count}} תגובות", "Voice message": "הודעת קול", + "Voice message ({{duration}})": "הודעת קול ({{duration}})", "Your comment": "התגובה שלך", "You": "את/ה", "You can't send messages in this channel": "את/ב לא יכול/ה לשלוח הודעות בשיחה זו", @@ -156,6 +161,21 @@ "Message failed to send": "ההודעה לא נשלחה", "and {{ count }} others": "ועוד {{ count }} משתמש/ים", "{{ user }} voted: {{ option }}": "{{ user }} הצבע: {{ option }}", + "{{count}} Audios_many": "{{count}} קבצי אודיו", + "{{count}} Audios_one": "{{count}} קובץ אודיו", + "{{count}} Audios_other": "{{count}} קבצי אודיו", + "{{count}} Files_many": "{{count}} קבצים", + "{{count}} Files_one": "{{count}} קובץ", + "{{count}} Files_other": "{{count}} קבצים", + "{{count}} Photos_many": "{{count}} תמונות", + "{{count}} Photos_one": "{{count}} תמונה", + "{{count}} Photos_other": "{{count}} תמונות", + "{{count}} Voice messages_many": "{{count}} הודעות קול", + "{{count}} Voice messages_one": "{{count}} הודעת קול", + "{{count}} Voice messages_other": "{{count}} הודעות קול", + "{{count}} Videos_many": "{{count}} סרטונים", + "{{count}} Videos_one": "{{count}} סרטון", + "{{count}} Videos_other": "{{count}} סרטונים", "{{count}} votes_many": "{{count}} הצבעות", "{{count}} votes_one": "{{count}} הצבעה", "{{count}} votes_other": "{{count}} הצבעות", diff --git a/package/src/i18n/hi.json b/package/src/i18n/hi.json index 0b106a40af..dba733a830 100644 --- a/package/src/i18n/hi.json +++ b/package/src/i18n/hi.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "क्या आप वाकई इस संदेश को स्थायी रूप से हटाना चाहते हैं?", "Are you sure?": "क्या आप सुनिश्चित हैं?", "Ask a question": "एक प्रश्न पूछें", + "Audio": "ऑडियो", "Ban User": "उपयोगकर्ता को प्रतिबंधित करें", "Block User": "उपयोगकर्ता को रोक देना, ब्लॉक यूजर", "Cancel": "रद्द करें", @@ -46,11 +47,13 @@ "Flag Message": "झंडा संदेश", "Flag action failed either due to a network issue or the message is already flagged": "फ़्लैग कार्रवाई या तो नेटवर्क समस्या के कारण विफल हो गई या संदेश पहले से फ़्लैग किया गया है।", "Generating...": "जनरेट कर रहा है...", + "Giphy": "Giphy", "Hold to start recording.": "रिकॉर्डिंग शुरू करने के लिए दबाएं।", "How about sending your first message to a friend?": "किसी मित्र को अपना पहला संदेश भेजने के बारे में क्या ख़याल है?", "Instant Commands": "त्वरित कमांड", "Let's start chatting!": "आइए चैट करना शुरू करें!", "Links are disabled": "लिंक अक्षम हैं", + "Live Location": "लाइव लोकेशन", "Loading channels...": "चैनल लोड हो रहे हैं...", "Loading messages...": "मेसेजस लोड हो रहे हैं...", "Loading threads...": "थ्रेड्स लोड हो रहे हैं...", @@ -90,6 +93,7 @@ "Questions": "प्रश्न", "Reconnecting...": "पुनः कनेक्ट हो...", "Reply": "मैसेज को रिप्लाई करे", + "Reply to {{name}}": "{{name}} को जवाब दें", "Reply to Message": "संदेश का जवाब दें", "Resend": "पुन: भेजें", "SEND": "भेजें", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "{{count}} टिप्पणी देखें", "View {{count}} comments_other": "{{count}} टिप्पणियाँ देखें", "Voice message": "वॉइस संदेश", + "Voice message ({{duration}})": "वॉइस संदेश ({{duration}})", "Your comment": "आपकी टिप्पणी", "You": "आप", "You can't send messages in this channel": "आप इस चैनल में संदेश नहीं भेज सकते", @@ -156,6 +161,21 @@ "Message failed to send": "मैसेज भेजने में विफल", "and {{ count }} others": "और {{ count }} अन्य", "{{ user }} voted: {{ option }}": "{{ user }} वोट दिया: {{ option }}", + "{{count}} Audios_many": "{{count}} ऑडियो", + "{{count}} Audios_one": "{{count}} ऑडियो", + "{{count}} Audios_other": "{{count}} ऑडियो", + "{{count}} Files_many": "{{count}} फ़ाइलें", + "{{count}} Files_one": "{{count}} फ़ाइल", + "{{count}} Files_other": "{{count}} फ़ाइलें", + "{{count}} Photos_many": "{{count}} फ़ोटो", + "{{count}} Photos_one": "{{count}} फ़ोटो", + "{{count}} Photos_other": "{{count}} फ़ोटो", + "{{count}} Voice messages_many": "{{count}} वॉइस संदेश", + "{{count}} Voice messages_one": "{{count}} वॉइस संदेश", + "{{count}} Voice messages_other": "{{count}} वॉइस संदेश", + "{{count}} Videos_many": "{{count}} वीडियो", + "{{count}} Videos_one": "{{count}} वीडियो", + "{{count}} Videos_other": "{{count}} वीडियो", "{{count}} votes_many": "{{count}} वोट", "{{count}} votes_one": "{{count}} वोट", "{{count}} votes_other": "{{count}} वोट", diff --git a/package/src/i18n/it.json b/package/src/i18n/it.json index a43b7c8330..b1ee4540f5 100644 --- a/package/src/i18n/it.json +++ b/package/src/i18n/it.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Sei sicuro di voler eliminare definitivamente questo messaggio?", "Are you sure?": "Sei sicuro?", "Ask a question": "Fai una domanda", + "Audio": "Audio", "Ban User": "Blocca Utente", "Block User": "Blocca Utente", "Cancel": "Annulla", @@ -46,11 +47,13 @@ "Flag Message": "Contrassegna Messaggio", "Flag action failed either due to a network issue or the message is already flagged": "L'azione di segnalazione non è riuscita a causa di un problema di rete o il messaggio è già segnalato.", "Generating...": "Generando...", + "Giphy": "Giphy", "Hold to start recording.": "Tieni premuto per avviare la registrazione.", "How about sending your first message to a friend?": "Che ne dici di inviare il tuo primo messaggio ad un amico?", "Instant Commands": "Comandi Istantanei", "Let's start chatting!": "Iniziamo a chattare!", "Links are disabled": "I link sono disabilitati", + "Live Location": "Posizione in tempo reale", "Loading channels...": "Caricamento canali in corso...", "Loading messages...": "Caricamento messaggi...", "Loading threads...": "Caricamento dei thread...", @@ -90,6 +93,7 @@ "Questions": "Domande", "Reconnecting...": "Ricollegarsi...", "Reply": "Rispondi", + "Reply to {{name}}": "Rispondi a {{name}}", "Reply to Message": "Rispondi al messaggio", "Resend": "Invia di nuovo", "SEND": "INVIA", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Vedi {{count}} commento", "View {{count}} comments_other": "Vedi {{count}} commenti", "Voice message": "Messaggio vocale", + "Voice message ({{duration}})": "Messaggio vocale ({{duration}})", "Your comment": "Il tuo commento", "You": "Tu", "You can't send messages in this channel": "Non puoi inviare messaggi in questo canale", @@ -156,6 +161,21 @@ "Message failed to send": "Il messaggio non è stato inviato", "and {{ count }} others": "e {{ count }} altri", "{{ user }} voted: {{ option }}": "{{ user }} ha votato: {{ option }}", + "{{count}} Audios_many": "{{count}} audio", + "{{count}} Audios_one": "{{count}} audio", + "{{count}} Audios_other": "{{count}} audio", + "{{count}} Files_many": "{{count}} file", + "{{count}} Files_one": "{{count}} file", + "{{count}} Files_other": "{{count}} file", + "{{count}} Photos_many": "{{count}} foto", + "{{count}} Photos_one": "{{count}} foto", + "{{count}} Photos_other": "{{count}} foto", + "{{count}} Voice messages_many": "{{count}} messaggi vocali", + "{{count}} Voice messages_one": "{{count}} messaggio vocale", + "{{count}} Voice messages_other": "{{count}} messaggi vocali", + "{{count}} Videos_many": "{{count}} video", + "{{count}} Videos_one": "{{count}} video", + "{{count}} Videos_other": "{{count}} video", "{{count}} votes_many": "{{count}} voti", "{{count}} votes_one": "{{count}} voto", "{{count}} votes_other": "{{count}} voti", diff --git a/package/src/i18n/ja.json b/package/src/i18n/ja.json index 0505b82a45..85643f3e14 100644 --- a/package/src/i18n/ja.json +++ b/package/src/i18n/ja.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "このメッセージを完全に削除してもよろしいですか?", "Are you sure?": "本当によろしいですか?", "Ask a question": "質問をする", + "Audio": "音声", "Ban User": "ユーザーを禁止する", "Block User": "ユーザをブロックする", "Cancel": "キャンセル", @@ -46,11 +47,13 @@ "Flag Message": "メッセージをフラグする", "Flag action failed either due to a network issue or the message is already flagged": "ネットワーク接続に問題があるか、すでにフラグが設定されているため、フラグが失敗しました。", "Generating...": "生成中...", + "Giphy": "Giphy", "Hold to start recording.": "録音を開始するには押し続けてください。", "How about sending your first message to a friend?": "初めてのメッセージを友達に送ってみてはいかがでしょうか?", "Instant Commands": "インスタントコマンド", "Let's start chatting!": "チャットを始めましょう!", "Links are disabled": "リンク機能が無効になっています", + "Live Location": "ライブ位置情報", "Loading channels...": "チャネルを読み込み中。。。", "Loading messages...": "メッセージを読み込み中。。。", "Loading threads...": "スレッドを読み込み中...", @@ -90,6 +93,7 @@ "Questions": "質問", "Reconnecting...": "再接続中。。。", "Reply": "返事", + "Reply to {{name}}": "{{name}}に返信", "Reply to Message": "メッセージに返信", "Resend": "再送", "SEND": "送信", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "{{count}} 件のコメントを表示", "View {{count}} comments_other": "{{count}} 件のコメントを表示", "Voice message": "ボイスメッセージ", + "Voice message ({{duration}})": "ボイスメッセージ({{duration}})", "Your comment": "あなたのコメント", "You": "あなた", "You can't send messages in this channel": "このチャンネルではメッセージを送信できません", @@ -156,6 +161,21 @@ "Message failed to send": "メッセージを送信できませんでした", "and {{ count }} others": "{{ count }}人がタイピングしています", "{{ user }} voted: {{ option }}": "{{ user }} が投票しました: {{ option }}", + "{{count}} Audios_many": "{{count}} 件の音声", + "{{count}} Audios_one": "{{count}} 件の音声", + "{{count}} Audios_other": "{{count}} 件の音声", + "{{count}} Files_many": "{{count}} 件のファイル", + "{{count}} Files_one": "{{count}} 件のファイル", + "{{count}} Files_other": "{{count}} 件のファイル", + "{{count}} Photos_many": "{{count}} 枚の写真", + "{{count}} Photos_one": "{{count}} 枚の写真", + "{{count}} Photos_other": "{{count}} 枚の写真", + "{{count}} Voice messages_many": "{{count}} 件のボイスメッセージ", + "{{count}} Voice messages_one": "{{count}} 件のボイスメッセージ", + "{{count}} Voice messages_other": "{{count}} 件のボイスメッセージ", + "{{count}} Videos_many": "{{count}} 件の動画", + "{{count}} Videos_one": "{{count}} 件の動画", + "{{count}} Videos_other": "{{count}} 件の動画", "{{count}} votes_many": "{{count}}票", "{{count}} votes_one": "{{count}} 票", "{{count}} votes_other": "{{count}} 票", diff --git a/package/src/i18n/ko.json b/package/src/i18n/ko.json index d329a26d84..61f9a4d0b5 100644 --- a/package/src/i18n/ko.json +++ b/package/src/i18n/ko.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "이 메시지를 영구적으로 삭제하시겠습니까?", "Are you sure?": "확실합니까?", "Ask a question": "질문하기", + "Audio": "오디오", "Ban User": "사용자 차단", "Block User": "사용자 차단", "Cancel": "취소", @@ -46,11 +47,13 @@ "Flag Message": "메시지를 플래그하기", "Flag action failed either due to a network issue or the message is already flagged": "네트워크 연결에 문제가 있거나 이미 플래그 되어서 플래그에 실패했습니다.", "Generating...": "생성 중...", + "Giphy": "Giphy", "Hold to start recording.": "녹음을 시작하려면 눌러주세요.", "How about sending your first message to a friend?": "친구에게 첫 번째 메시지를 보내는 것은 어떻습니까?", "Instant Commands": "인스턴트 명령", "Let's start chatting!": "채팅을 시작합시다!", "Links are disabled": "링크 기능이 비활성화되었습니다", + "Live Location": "실시간 위치", "Loading channels...": "채널을 로딩 중...", "Loading messages...": "메시지를 로딩 중...", "Loading threads...": "스레드 로딩 중...", @@ -90,6 +93,7 @@ "Questions": "질문", "Reconnecting...": "다시 연결 중...", "Reply": "답장", + "Reply to {{name}}": "{{name}}님에게 답장", "Reply to Message": "메시지에 답장", "Resend": "재전송", "SEND": "보내기", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "{{count}}개의 댓글 보기", "View {{count}} comments_other": "{{count}}개의 댓글 보기", "Voice message": "음성 메시지", + "Voice message ({{duration}})": "음성 메시지 ({{duration}})", "Your comment": "댓글 입력", "You": "당신", "You can't send messages in this channel": "이 채널에서는 메세지를 전송할 수 없습니다", @@ -156,6 +161,21 @@ "Message failed to send": "메시지 전송 실패", "and {{ count }} others": "{{ count }}명 이상", "{{ user }} voted: {{ option }}": "{{ user }} 투표했습니다: {{ option }}", + "{{count}} Audios_many": "{{count}}개의 오디오", + "{{count}} Audios_one": "{{count}}개의 오디오", + "{{count}} Audios_other": "{{count}}개의 오디오", + "{{count}} Files_many": "{{count}}개의 파일", + "{{count}} Files_one": "{{count}}개의 파일", + "{{count}} Files_other": "{{count}}개의 파일", + "{{count}} Photos_many": "{{count}}장의 사진", + "{{count}} Photos_one": "{{count}}장의 사진", + "{{count}} Photos_other": "{{count}}장의 사진", + "{{count}} Voice messages_many": "{{count}}개의 음성 메시지", + "{{count}} Voice messages_one": "{{count}}개의 음성 메시지", + "{{count}} Voice messages_other": "{{count}}개의 음성 메시지", + "{{count}} Videos_many": "{{count}}개의 동영상", + "{{count}} Videos_one": "{{count}}개의 동영상", + "{{count}} Videos_other": "{{count}}개의 동영상", "{{count}} votes_many": "{{count}} 표", "{{count}} votes_one": "{{count}} 표", "{{count}} votes_other": "{{count}} 표", diff --git a/package/src/i18n/nl.json b/package/src/i18n/nl.json index 81090abd9a..06aa168b49 100644 --- a/package/src/i18n/nl.json +++ b/package/src/i18n/nl.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Weet u zeker dat u dit bericht definitief wilt verwijderen?", "Are you sure?": "Weet je het zeker?", "Ask a question": "Stel een vraag", + "Audio": "Audio", "Ban User": "Gebruiker Verbannen", "Block User": "Blokkeer Gebruiker", "Cancel": "Annuleer", @@ -46,11 +47,13 @@ "Flag Message": "Markeer bericht", "Flag action failed either due to a network issue or the message is already flagged": "Rapporteren mislukt door een netwerk fout of het berich is al gerapporteerd", "Generating...": "Aan het genereren...", + "Giphy": "Giphy", "Hold to start recording.": "Houd vast om opname te starten.", "How about sending your first message to a friend?": "Wat dacht je ervan om je eerste bericht naar een vriend te sturen?", "Instant Commands": "Directe Opdrachten", "Let's start chatting!": "Laten we beginnen met chatten!", "Links are disabled": "Het versturen van links staat uit", + "Live Location": "Live locatie", "Loading channels...": "Kanalen aan het laden...", "Loading messages...": "Berichten aan het laden...", "Loading threads...": "Threads laden...", @@ -90,6 +93,7 @@ "Questions": "Vragen", "Reconnecting...": "Opnieuw Verbinding Maken...", "Reply": "Antwoord", + "Reply to {{name}}": "Antwoord aan {{name}}", "Reply to Message": "Beantwoord bericht", "Resend": "Opnieuw versturen", "SEND": "VERZENDEN", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Bekijk {{count}} reactie", "View {{count}} comments_other": "Bekijk {{count}} reacties", "Voice message": "Spraakbericht", + "Voice message ({{duration}})": "Spraakbericht ({{duration}})", "Your comment": "Jouw reactie", "You": "U", "You can't send messages in this channel": "Je kan geen berichten sturen in dit kanaal", @@ -156,6 +161,21 @@ "Message failed to send": "Bericht niet verzonden", "and {{ count }} others": "{{ count }} anderen", "{{ user }} voted: {{ option }}": "{{ user }} heeft gestemd: {{ option }}", + "{{count}} Audios_many": "{{count}} audio's", + "{{count}} Audios_one": "{{count}} audio", + "{{count}} Audios_other": "{{count}} audio's", + "{{count}} Files_many": "{{count}} bestanden", + "{{count}} Files_one": "{{count}} bestand", + "{{count}} Files_other": "{{count}} bestanden", + "{{count}} Photos_many": "{{count}} foto's", + "{{count}} Photos_one": "{{count}} foto", + "{{count}} Photos_other": "{{count}} foto's", + "{{count}} Voice messages_many": "{{count}} spraakberichten", + "{{count}} Voice messages_one": "{{count}} spraakbericht", + "{{count}} Voice messages_other": "{{count}} spraakberichten", + "{{count}} Videos_many": "{{count}} video's", + "{{count}} Videos_one": "{{count}} video", + "{{count}} Videos_other": "{{count}} video's", "{{count}} votes_many": "{{count}} stemmen", "{{count}} votes_one": "{{count}} stem", "{{count}} votes_other": "{{count}} stemmen", diff --git a/package/src/i18n/pt-br.json b/package/src/i18n/pt-br.json index c7fa4e24cc..31416d809f 100644 --- a/package/src/i18n/pt-br.json +++ b/package/src/i18n/pt-br.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Tem certeza de que deseja excluir esta mensagem permanentemente?", "Are you sure?": "Tem certeza?", "Ask a question": "Fazer uma pergunta", + "Audio": "Áudio", "Ban User": "Banir Usuário", "Block User": "Bloquear Usuário", "Cancel": "Cancelar", @@ -46,11 +47,13 @@ "Flag Message": "Reportar Mensagem", "Flag action failed either due to a network issue or the message is already flagged": "A ação para reportar a mensagem falhou devido a um problema de rede ou a mensagem já foi reportada.", "Generating...": "Gerando...", + "Giphy": "Giphy", "Hold to start recording.": "Mantenha pressionado para começar a gravar.", "How about sending your first message to a friend?": "Que tal enviar sua primeira mensagem para um amigo?", "Instant Commands": "Comandos Instantâneos", "Let's start chatting!": "Vamos começar a conversar!", "Links are disabled": "Links estão desabilitados", + "Live Location": "Localização ao vivo", "Loading channels...": "Carregando canais...", "Loading messages...": "Carregando mensagens...", "Loading threads...": "Carregando tópicos...", @@ -90,6 +93,7 @@ "Questions": "Perguntas", "Reconnecting...": "Reconectando...", "Reply": "Responder", + "Reply to {{name}}": "Responder a {{name}}", "Reply to Message": "Responder à Mensagem", "Resend": "Reenviar", "SEND": "ENVIAR", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Ver {{count}} comentário", "View {{count}} comments_other": "Ver {{count}} comentários", "Voice message": "Mensagem de voz", + "Voice message ({{duration}})": "Mensagem de voz ({{duration}})", "Your comment": "Seu comentário", "You": "Você", "You can't send messages in this channel": "Você não pode enviar mensagens neste canal", @@ -156,6 +161,21 @@ "Message failed to send": "Mensagem não enviada", "and {{ count }} others": "{{ count }} outros", "{{ user }} voted: {{ option }}": "{{ user }} votou: {{ option }}", + "{{count}} Audios_many": "{{count}} áudios", + "{{count}} Audios_one": "{{count}} áudio", + "{{count}} Audios_other": "{{count}} áudios", + "{{count}} Files_many": "{{count}} arquivos", + "{{count}} Files_one": "{{count}} arquivo", + "{{count}} Files_other": "{{count}} arquivos", + "{{count}} Photos_many": "{{count}} fotos", + "{{count}} Photos_one": "{{count}} foto", + "{{count}} Photos_other": "{{count}} fotos", + "{{count}} Voice messages_many": "{{count}} mensagens de voz", + "{{count}} Voice messages_one": "{{count}} mensagem de voz", + "{{count}} Voice messages_other": "{{count}} mensagens de voz", + "{{count}} Videos_many": "{{count}} vídeos", + "{{count}} Videos_one": "{{count}} vídeo", + "{{count}} Videos_other": "{{count}} vídeos", "{{count}} votes_many": "{{count}} votos", "{{count}} votes_one": "{{count}} voto", "{{count}} votes_other": "{{count}} votos", diff --git a/package/src/i18n/ru.json b/package/src/i18n/ru.json index 54a9972abc..096faa6fb3 100644 --- a/package/src/i18n/ru.json +++ b/package/src/i18n/ru.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Вы действительно хотите удалить это сообщение без возможности восстановления?", "Are you sure?": "Вы уверены?", "Ask a question": "Задайте вопрос", + "Audio": "Аудио", "Ban User": "Заблокировать Пользователя", "Block User": "Заблокировать пользователя", "Cancel": "Отмена", @@ -46,11 +47,13 @@ "Flag Message": "Пометить сообщение", "Flag action failed either due to a network issue or the message is already flagged": "Не удалось отправить жалобу. Возможные причины: проблема с подключением к интернету или ваша жалоба уже была принята.", "Generating...": "Генерирую...", + "Giphy": "Giphy", "Hold to start recording.": "Удерживайте, чтобы начать запись.", "How about sending your first message to a friend?": "Как насчет отправки первого сообщения другу?", "Instant Commands": "Мгновенные Команды", "Let's start chatting!": "Давайте начнем общаться!", "Links are disabled": "Ссылки отключены", + "Live Location": "Трансляция местоположения", "Loading channels...": "Загружаю каналы...", "Loading messages...": "Загружаю сообщения...", "Loading threads...": "Загрузка потоков...", @@ -90,6 +93,7 @@ "Questions": "Вопросы", "Reconnecting...": "Переподключение...", "Reply": "Ответить", + "Reply to {{name}}": "Ответить пользователю {{name}}", "Reply to Message": "Ответить на сообщение", "Resend": "Отправить", "SEND": "ОТПРАВИТЬ", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "Посмотреть {{count}} комментарий", "View {{count}} comments_other": "Посмотреть {{count}} комментария", "Voice message": "Голосовое сообщение", + "Voice message ({{duration}})": "Голосовое сообщение ({{duration}})", "Your comment": "Ваш комментарий", "You": "Вы", "You can't send messages in this channel": "Вы не можете отправлять сообщения в этот канал", @@ -156,6 +161,21 @@ "Message failed to send": "Сообщение не отправлено", "and {{ count }} others": "{{ count }} других", "{{ user }} voted: {{ option }}": "{{ user }} проголосовал: {{ option }}", + "{{count}} Audios_many": "{{count}} аудио", + "{{count}} Audios_one": "{{count}} аудио", + "{{count}} Audios_other": "{{count}} аудио", + "{{count}} Files_many": "{{count}} файлов", + "{{count}} Files_one": "{{count}} файл", + "{{count}} Files_other": "{{count}} файлов", + "{{count}} Photos_many": "{{count}} фото", + "{{count}} Photos_one": "{{count}} фото", + "{{count}} Photos_other": "{{count}} фото", + "{{count}} Voice messages_many": "{{count}} голосовых сообщений", + "{{count}} Voice messages_one": "{{count}} голосовое сообщение", + "{{count}} Voice messages_other": "{{count}} голосовых сообщений", + "{{count}} Videos_many": "{{count}} видео", + "{{count}} Videos_one": "{{count}} видео", + "{{count}} Videos_other": "{{count}} видео", "{{count}} votes_many": "{{count}} голосов", "{{count}} votes_one": "{{count}} голос", "{{count}} votes_other": "{{count}} голосов", diff --git a/package/src/i18n/tr.json b/package/src/i18n/tr.json index 9aa082add3..14f2cc0285 100644 --- a/package/src/i18n/tr.json +++ b/package/src/i18n/tr.json @@ -14,6 +14,7 @@ "Are you sure you want to permanently delete this message?": "Bu mesajı kalıcı olarak silmek istediğinizden emin misiniz?", "Are you sure?": "Emin misiniz?", "Ask a question": "Bir soru sor", + "Audio": "Ses", "Ban User": "Kullanıcıyı Yasakla", "Block User": "Kullanıcıyı engelle", "Cancel": "İptal", @@ -46,11 +47,13 @@ "Flag Message": "Mesajı Raporla", "Flag action failed either due to a network issue or the message is already flagged": "Mesajın daha önce raporlanmış olması veya bir ağ bağlantısı sorunu nedeniyle raporlama işlemi başarısız oldu.", "Generating...": "Oluşturuluyor...", + "Giphy": "Giphy", "Hold to start recording.": "Kayıt yapmak için basılı tutun.", "How about sending your first message to a friend?": "İlk mesajınızı bir arkadaşınıza göndermeye ne dersiniz?", "Instant Commands": "Anlık Komutlar", "Let's start chatting!": "Haydi sohbete başlayalım!", "Links are disabled": "Bağlantılar devre dışı", + "Live Location": "Canlı Konum", "Loading channels...": "Kanallar yükleniyor...", "Loading messages...": "Mesajlar yükleniyor...", "Loading threads...": "Akışlar yükleniyor...", @@ -90,6 +93,7 @@ "Questions": "Sorular", "Reconnecting...": "Yeniden Bağlanılıyor...", "Reply": "Yanıtla", + "Reply to {{name}}": "{{name}} için yanıtla", "Reply to Message": "Mesajı Yanıtla", "Resend": "Yeniden gönder", "SEND": "GÖNDER", @@ -127,6 +131,7 @@ "View {{count}} comments_one": "{{count}} yorumu görüntüle", "View {{count}} comments_other": "{{count}} yorumu görüntüle", "Voice message": "Sesli mesaj", + "Voice message ({{duration}})": "Sesli mesaj ({{duration}})", "Your comment": "Yorumunuz", "You": "Sen", "You can't send messages in this channel": "Bu konuşmaya mesaj gönderemezsiniz", @@ -156,6 +161,21 @@ "Message failed to send": "Mesaj gönderimi başarısız", "and {{ count }} others": "{{ count }} kişi daha", "{{ user }} voted: {{ option }}": "{{ user }} oy verdi: {{ option }}", + "{{count}} Audios_many": "{{count}} ses", + "{{count}} Audios_one": "{{count}} ses", + "{{count}} Audios_other": "{{count}} ses", + "{{count}} Files_many": "{{count}} dosya", + "{{count}} Files_one": "{{count}} dosya", + "{{count}} Files_other": "{{count}} dosya", + "{{count}} Photos_many": "{{count}} fotoğraf", + "{{count}} Photos_one": "{{count}} fotoğraf", + "{{count}} Photos_other": "{{count}} fotoğraf", + "{{count}} Voice messages_many": "{{count}} sesli mesaj", + "{{count}} Voice messages_one": "{{count}} sesli mesaj", + "{{count}} Voice messages_other": "{{count}} sesli mesaj", + "{{count}} Videos_many": "{{count}} video", + "{{count}} Videos_one": "{{count}} video", + "{{count}} Videos_other": "{{count}} video", "{{count}} votes_many": "{{count}} oy", "{{count}} votes_one": "{{count}} oy", "{{count}} votes_other": "{{count}} oy", diff --git a/package/src/icons/arrow-up-right.tsx b/package/src/icons/arrow-up-right.tsx index addc07ae2d..52431cff3a 100644 --- a/package/src/icons/arrow-up-right.tsx +++ b/package/src/icons/arrow-up-right.tsx @@ -1,5 +1,6 @@ import React from 'react'; -import Svg, { Path } from 'react-native-svg'; +import { I18nManager } from 'react-native'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -12,13 +13,15 @@ export const ArrowUpRight = ({ height, size, width, ...rest }: IconProps) => { fill={'none'} {...rest} > - + + + ); }; diff --git a/package/src/icons/audio.tsx b/package/src/icons/audio.tsx index 0b10b4793c..01872b3a9f 100644 --- a/package/src/icons/audio.tsx +++ b/package/src/icons/audio.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -9,13 +10,15 @@ export const Sound = ({ fill, height, pathFill, size, stroke, width, ...props }: return ( - + + + ); }; diff --git a/package/src/icons/chevron-left.tsx b/package/src/icons/chevron-left.tsx index 67c196a7df..bcab552f63 100644 --- a/package/src/icons/chevron-left.tsx +++ b/package/src/icons/chevron-left.tsx @@ -1,17 +1,20 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import { Path, Svg } from 'react-native-svg'; +import { G, Path, Svg } from 'react-native-svg'; import { IconProps } from './utils/base'; export const ChevronLeft = ({ height, size, width, ...rest }: IconProps) => ( - + + + ); diff --git a/package/src/icons/leave.tsx b/package/src/icons/leave.tsx index c1b2dd0c8a..0a7e7335d1 100644 --- a/package/src/icons/leave.tsx +++ b/package/src/icons/leave.tsx @@ -1,16 +1,19 @@ import React from 'react'; -import Svg, { Path } from 'react-native-svg'; +import { I18nManager } from 'react-native'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; export const ArrowBoxLeft: React.FC = (props) => ( - + + + ); diff --git a/package/src/icons/message-bubble.tsx b/package/src/icons/message-bubble.tsx index c5ca2a40f0..9d48d69c8a 100644 --- a/package/src/icons/message-bubble.tsx +++ b/package/src/icons/message-bubble.tsx @@ -1,17 +1,20 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; export const MessageBubbleEmpty = ({ height, size, width, ...props }: IconProps) => ( - + + + ); diff --git a/package/src/icons/mute.tsx b/package/src/icons/mute.tsx index 28fc1a5665..2fd54d2919 100644 --- a/package/src/icons/mute.tsx +++ b/package/src/icons/mute.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -9,14 +10,16 @@ export const Mute = ({ fill, height, pathFill, size, stroke, width, ...rest }: I return ( - + + + ); }; diff --git a/package/src/icons/reply.tsx b/package/src/icons/reply.tsx index 21cb2dcb54..14e34c41b5 100644 --- a/package/src/icons/reply.tsx +++ b/package/src/icons/reply.tsx @@ -1,18 +1,21 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; export const CurveLineLeftUp = (props: IconProps) => ( - + + + ); diff --git a/package/src/icons/search.tsx b/package/src/icons/search.tsx index 88afed1030..7773d8e064 100644 --- a/package/src/icons/search.tsx +++ b/package/src/icons/search.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -16,14 +17,16 @@ export const Search = ({ fill, height, pathFill, size, stroke, width, ...rest }: {...rest} testID={'search-icon'} > - + + + ); }; diff --git a/package/src/icons/send.tsx b/package/src/icons/send.tsx index b4b6c9a8ef..7b77a3d0c1 100644 --- a/package/src/icons/send.tsx +++ b/package/src/icons/send.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -16,14 +17,16 @@ export const SendRight = ({ fill, height, pathFill, size, stroke, width, ...rest {...rest} testID='send-right' > - + + + ); }; diff --git a/package/src/icons/thread.tsx b/package/src/icons/thread.tsx index 7fdfe89804..13f5c002a0 100644 --- a/package/src/icons/thread.tsx +++ b/package/src/icons/thread.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import Svg, { Path } from 'react-native-svg'; +import Svg, { G, Path } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -17,13 +18,15 @@ export const ThreadReply = ({ return ( - + + + ); }; diff --git a/package/src/icons/video-fill.tsx b/package/src/icons/video-fill.tsx index be8d60394c..0ce488a315 100644 --- a/package/src/icons/video-fill.tsx +++ b/package/src/icons/video-fill.tsx @@ -1,4 +1,5 @@ import React from 'react'; +import { I18nManager } from 'react-native'; import Svg, { ClipPath, Defs, G, Path, Rect } from 'react-native-svg'; @@ -9,11 +10,13 @@ export const Recorder = ({ fill, height, pathFill, size, stroke, width, ...props return ( - - + + + + diff --git a/package/src/icons/video.tsx b/package/src/icons/video.tsx index 819d4601dd..f181c911f2 100644 --- a/package/src/icons/video.tsx +++ b/package/src/icons/video.tsx @@ -1,6 +1,7 @@ import React from 'react'; +import { I18nManager } from 'react-native'; -import { Path, Svg } from 'react-native-svg'; +import { G, Path, Svg } from 'react-native-svg'; import { IconProps } from './utils/base'; @@ -15,13 +16,15 @@ export const VideoIcon = ({ fill, height, pathFill, size, stroke, width, ...rest width={width ?? size} {...rest} > - + + + ); }; diff --git a/package/src/utils/rtlMirrorSwitchStyle.ts b/package/src/utils/rtlMirrorSwitchStyle.ts new file mode 100644 index 0000000000..ad3847b2f0 --- /dev/null +++ b/package/src/utils/rtlMirrorSwitchStyle.ts @@ -0,0 +1,11 @@ +import { I18nManager, Platform, ViewStyle } from 'react-native'; + +/** Mirrors Switch horizontally in RTL on iOS so thumb/track match layout direction. */ +export function getRtlMirrorSwitchStyle(): Pick { + if (Platform.OS !== 'ios' || !I18nManager.isRTL) { + return {}; + } + return { + transform: [{ scaleX: -1 }], + }; +}