From 1e803533e7bec11228015d9246f4cc0c2c17d4d5 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 10 Apr 2026 10:25:46 +0200 Subject: [PATCH 1/5] fix: mirror icons in RTL mode --- examples/SampleApp/src/icons/ChatsTab.tsx | 17 ++-- examples/SampleApp/src/icons/Mute.tsx | 43 ++++----- examples/SampleApp/src/icons/RightArrow.tsx | 19 ++-- examples/SampleApp/src/icons/Search.tsx | 18 ++-- .../__snapshots__/SendButton.test.js.snap | 90 +++++++++++-------- .../__snapshots__/Thread.test.js.snap | 45 ++++++---- package/src/icons/arrow-up-right.tsx | 19 ++-- package/src/icons/audio.tsx | 19 ++-- package/src/icons/chevron-left.tsx | 19 ++-- package/src/icons/leave.tsx | 19 ++-- package/src/icons/message-bubble.tsx | 19 ++-- package/src/icons/mute.tsx | 21 +++-- package/src/icons/reply.tsx | 19 ++-- package/src/icons/search.tsx | 21 +++-- package/src/icons/send.tsx | 21 +++-- package/src/icons/thread.tsx | 19 ++-- package/src/icons/video-fill.tsx | 13 +-- package/src/icons/video.tsx | 19 ++-- 18 files changed, 268 insertions(+), 192 deletions(-) diff --git a/examples/SampleApp/src/icons/ChatsTab.tsx b/examples/SampleApp/src/icons/ChatsTab.tsx index 138892d84b..13b2d0bc26 100644 --- a/examples/SampleApp/src/icons/ChatsTab.tsx +++ b/examples/SampleApp/src/icons/ChatsTab.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'; import { useLegacyColors } from '../theme/useLegacyColors'; @@ -8,12 +9,14 @@ export const ChatsTab: React.FC = ({ 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/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/Thread/__tests__/__snapshots__/Thread.test.js.snap b/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap index c9e1e0cc1a..dafdad9e51 100644 --- a/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +++ b/package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap @@ -2282,28 +2282,37 @@ exports[`Thread should match thread snapshot 1`] = ` } strokeWidth={1.5} > - + > + + 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} > - + + + ); }; From 75598cdd2fe91f7c0e0b2c2f2457b226750754cd Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 10 Apr 2026 13:48:26 +0200 Subject: [PATCH 2/5] fix: missing translation keys from message preview --- .../messagePreview/useMessagePreviewText.tsx | 30 +++++++++++-------- package/src/i18n/en.json | 19 ++++++++++++ package/src/i18n/es.json | 19 ++++++++++++ package/src/i18n/fr.json | 19 ++++++++++++ package/src/i18n/he.json | 19 ++++++++++++ package/src/i18n/hi.json | 19 ++++++++++++ package/src/i18n/it.json | 19 ++++++++++++ package/src/i18n/ja.json | 19 ++++++++++++ package/src/i18n/ko.json | 19 ++++++++++++ package/src/i18n/nl.json | 19 ++++++++++++ package/src/i18n/pt-br.json | 19 ++++++++++++ package/src/i18n/ru.json | 19 ++++++++++++ package/src/i18n/tr.json | 19 ++++++++++++ 13 files changed, 245 insertions(+), 13 deletions(-) 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..1507f8b507 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...", @@ -127,6 +130,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 +160,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..9e7e288d67 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...", @@ -127,6 +130,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 +160,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..0c4acc7957 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...", @@ -127,6 +130,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 +160,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..1628276353 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...": "טוען שרשורים...", @@ -127,6 +130,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 +160,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..d8db0ea45a 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...": "थ्रेड्स लोड हो रहे हैं...", @@ -127,6 +130,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 +160,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..b40b645a9b 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...", @@ -127,6 +130,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 +160,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..1da1ac1b98 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...": "スレッドを読み込み中...", @@ -127,6 +130,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 +160,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..79a712723a 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...": "스레드 로딩 중...", @@ -127,6 +130,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 +160,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..7035fd69ea 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...", @@ -127,6 +130,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 +160,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..9b94e507c2 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...", @@ -127,6 +130,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 +160,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..1671070749 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...": "Загрузка потоков...", @@ -127,6 +130,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 +160,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..1a55016071 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...", @@ -127,6 +130,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 +160,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", From 92da2f48e2bed7939319e4927d10fd0873ceb996 Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 10 Apr 2026 15:26:22 +0200 Subject: [PATCH 3/5] fix: mirror switch in RTL mode --- .../SampleApp/src/components/MenuDrawer.tsx | 2 ++ .../src/screens/GroupChannelDetailsScreen.tsx | 2 ++ .../screens/OneOnOneChannelDetailScreen.tsx | 2 ++ .../src/utils/rtlMirrorSwitchStyle.ts | 8 ++++++++ .../src/components/Poll/CreatePollContent.tsx | 19 ++++++++++++++++--- .../Poll/components/MultipleAnswersField.tsx | 7 ++++++- .../Poll/components/MultipleVotesSettings.tsx | 7 ++++++- package/src/utils/rtlMirrorSwitchStyle.ts | 8 ++++++++ 8 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 examples/SampleApp/src/utils/rtlMirrorSwitchStyle.ts create mode 100644 package/src/utils/rtlMirrorSwitchStyle.ts 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) => { = ({ trailing={ = ({ trailing={ { + return { + transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }], + }; +} 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/utils/rtlMirrorSwitchStyle.ts b/package/src/utils/rtlMirrorSwitchStyle.ts new file mode 100644 index 0000000000..ce6c2729fb --- /dev/null +++ b/package/src/utils/rtlMirrorSwitchStyle.ts @@ -0,0 +1,8 @@ +import { I18nManager, ViewStyle } from 'react-native'; + +/** Mirrors Switch horizontally in RTL so thumb/track match layout direction. */ +export function getRtlMirrorSwitchStyle(): Pick { + return { + transform: [{ scaleX: I18nManager.isRTL ? -1 : 1 }], + }; +} From 533f99875e7f20488c43080f06315d38b82d5b6b Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 10 Apr 2026 16:10:58 +0200 Subject: [PATCH 4/5] fix: PollInputDialog title misaligned in RTL mode --- package/src/components/Poll/components/PollInputDialog.tsx | 1 + 1 file changed, 1 insertion(+) 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', From 96872fde399903b793e07d2195f5df85944604bd Mon Sep 17 00:00:00 2001 From: Zita Szupera Date: Fri, 10 Apr 2026 16:32:46 +0200 Subject: [PATCH 5/5] fix: channel search not mirrored in RTL --- .../src/screens/ChannelListScreen.tsx | 64 +++++++++++-------- 1 file changed, 36 insertions(+), 28 deletions(-) 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;