diff --git a/package/i18next.config.ts b/package/i18next.config.ts index b65fd78cd6..43d8381ff1 100644 --- a/package/i18next.config.ts +++ b/package/i18next.config.ts @@ -3,6 +3,7 @@ import { defineConfig } from 'i18next-cli'; export default defineConfig({ "locales": [ "en", + "ar", "es", "fr", "he", diff --git a/package/src/i18n/ar.json b/package/src/i18n/ar.json new file mode 100644 index 0000000000..0acf03fc02 --- /dev/null +++ b/package/src/i18n/ar.json @@ -0,0 +1,355 @@ +{ + "+{{count}}_many": "+{{count}}", + "+{{count}}_one": "+{{count}}", + "+{{count}}_other": "+{{count}}", + "1 Reply": "رد واحد", + "1 Thread Reply": "رد واحد في الموضوع", + "Add a comment": "أضف تعليقاً", + "Add a comment to the poll": "أضف تعليقًا على التصويت", + "Add an option": "أضف خياراً", + "Add more": "أضف المزيد", + "Allow access to your Gallery": "اسمح بالوصول إلى المعرض", + "Allow camera access in device settings": "اسمح بالوصول إلى الكاميرا في إعدادات الجهاز", + "Also send to channel": "أرسل أيضاً إلى القناة", + "Anonymous": "مجهول", + "Anonymous voting": "تصويت مجهول", + "Are you sure you want to permanently delete this message?": "هل أنت متأكد أنك تريد حذف هذه الرسالة نهائياً؟", + "Are you sure?": "هل أنت متأكد؟", + "Ask a question": "اطرح سؤالاً", + "Audio": "صوت", + "Ban User": "منع المستخدم", + "Block User": "حظر المستخدم", + "Cancel": "إلغاء", + "Cannot Flag Message": "تعذر الإبلاغ عن الرسالة", + "Consider how your comment might make others feel and be sure to follow our Community Guidelines": "فكّر في تأثير تعليقك على الآخرين وتأكد من اتباع إرشادات مجتمعنا", + "Copy Message": "نسخ الرسالة", + "Create Poll": "إنشاء تصويت", + "Delete": "حذف", + "Delete Message": "حذف الرسالة", + "Delete for me": "حذف لدي", + "Device camera is used to take photos or videos.": "تُستخدم كاميرا الجهاز لالتقاط الصور أو الفيديو.", + "Device gallery permissions is used to take photos or videos.": "تُستخدم أذونات معرض الجهاز لالتقاط الصور أو الفيديو.", + "Do you want to send a copy of this message to a moderator for further investigation?": "هل تريد إرسال نسخة من هذه الرسالة إلى مشرف لمزيد من المراجعة؟", + "Due since {{ dueSince }}": "مستحق منذ {{ dueSince }}", + "Edit Message": "تعديل الرسالة", + "Edited": "تم التعديل", + "Editing Message": "جارٍ تعديل الرسالة", + "Emoji matching": "مطابقة الإيموجي", + "Empty message...": "رسالة فارغة...", + "Enter a new option": "أدخل خيارًا جديدًا", + "End Vote": "إنهاء التصويت", + "Error adding flag": "خطأ في إضافة الإبلاغ", + "Error deleting message": "خطأ في حذف الرسالة", + "Error fetching reactions": "خطأ في جلب التفاعلات", + "Error loading": "خطأ في التحميل", + "Error loading channel list...": "خطأ في تحميل قائمة القنوات...", + "Error loading messages for this channel...": "خطأ في تحميل رسائل هذه القناة...", + "Error marking message unread. Cannot mark unread messages older than the newest 100 channel messages.": "خطأ في وضع علامة غير مقروء. لا يمكن وضع علامة غير مقروء للرسائل الأقدم من أحدث 100 رسالة في القناة.", + "Error muting a user ...": "خطأ في كتم المستخدم...", + "Error pinning message": "خطأ في تثبيت الرسالة", + "Error removing message pin": "خطأ في إزالة تثبيت الرسالة", + "Error unmuting a user ...": "خطأ في إلغاء كتم المستخدم...", + "Error while loading, please reload/refresh": "حدث خطأ أثناء التحميل، يرجى إعادة التحميل/التحديث", + "File is too large: {{ size }}, maximum upload size is {{ limit }}": "الملف كبير جدًا: {{ size }}، الحد الأقصى للرفع هو {{ limit }}", + "File too large": "الملف كبير جدًا", + "File type not supported": "نوع الملف غير مدعوم", + "Flag": "إبلاغ", + "Flag Message": "الإبلاغ عن الرسالة", + "Flag action failed either due to a network issue or the message is already flagged": "فشلت عملية الإبلاغ بسبب مشكلة في الشبكة أو لأن الرسالة مبلّغ عنها بالفعل.", + "Generating...": "جارٍ الإنشاء...", + "Giphy": "Giphy", + "Hide who voted": "إخفاء من صوّت", + "Hold to record. Release to save.": "اضغط مطولًا للتسجيل. حرّر للحفظ.", + "Hold to start recording.": "اضغط مطولاً لبدء التسجيل.", + "How about sending your first message to a friend?": "ما رأيك في إرسال أول رسالة إلى صديق؟", + "Instant Commands": "الأوامر السريعة", + "Let others add options": "السماح للآخرين بإضافة خيارات", + "Let's start chatting!": "لنبدأ الدردشة!", + "Links are disabled": "الروابط معطلة", + "Live Location": "الموقع المباشر", + "Loading channels...": "جارٍ تحميل القنوات...", + "Loading messages...": "جارٍ تحميل الرسائل...", + "Loading threads...": "جارٍ تحميل المواضيع...", + "Loading...": "جارٍ التحميل...", + "Location": "الموقع", + "Mark as Unread": "وضع كغير مقروء", + "Maximum number of files reached": "تم الوصول إلى الحد الأقصى لعدد الملفات", + "Message Reactions": "تفاعلات الرسالة", + "Message deleted": "تم حذف الرسالة", + "Message has been successfully flagged": "تم الإبلاغ عن الرسالة بنجاح", + "Message flagged": "تم الإبلاغ عن الرسالة", + "Message marked as unread": "تم وضع علامة غير مقروء على الرسالة", + "Message pinned": "تم تثبيت الرسالة", + "Message unpinned": "تم إلغاء تثبيت الرسالة", + "Multiple votes": "تصويتات متعددة", + "Network error": "خطأ في الشبكة", + "Select more than one option": "اختر أكثر من خيار واحد", + "Limit votes per person": "تحديد عدد الأصوات لكل شخص", + "Choose between 2–10 options": "اختر بين 2 و10 خيارات", + "Mute User": "كتم المستخدم", + "No chats here yet…": "لا توجد محادثات هنا بعد…", + "No items exist": "لا توجد عناصر", + "No threads here yet": "لا توجد مواضيع هنا بعد", + "Not supported": "غير مدعوم", + "Nothing yet...": "لا شيء بعد...", + "Ok": "حسناً", + "Only visible to you": "مرئي لك فقط", + "Open Settings": "فتح الإعدادات", + "Option": "خيار", + "Option {{count}}": "الخيار {{count}}", + "Option already exists": "الخيار موجود بالفعل", + "Options": "الخيارات", + "Photo": "صورة", + "Photos and Videos": "الصور ومقاطع الفيديو", + "Pin to Conversation": "تثبيت في المحادثة", + "Pinned by": "مثبّت بواسطة", + "Please allow Audio permissions in settings.": "يرجى السماح بأذونات الصوت في الإعدادات.", + "Please enable access to your photos and videos so you can share them.": "يرجى تفعيل الوصول إلى صورك ومقاطع الفيديو حتى تتمكن من مشاركتها.", + "Please select a channel first": "يرجى اختيار قناة أولاً", + "Poll Comments": "تعليقات التصويت", + "Poll Options": "خيارات التصويت", + "Poll Results": "نتائج التصويت", + "Questions": "الأسئلة", + "Reconnecting...": "جارٍ إعادة الاتصال...", + "Reply": "رد", + "Reply to {{name}}": "الرد على {{name}}", + "Reply to Message": "الرد على الرسالة", + "Resend": "إعادة الإرسال", + "Retry Upload": "إعادة محاولة الرفع", + "SEND": "إرسال", + "Search": "بحث", + "Select More Photos": "اختيار المزيد من الصور", + "Select one": "اختر واحداً", + "Select one or more": "اختر واحداً أو أكثر", + "Select up to {{count}}_many": "اختر حتى {{count}}", + "Select up to {{count}}_one": "اختر حتى {{count}}", + "Select up to {{count}}_other": "اختر حتى {{count}}", + "Send Anyway": "أرسل على أي حال", + "Send a message": "أرسل رسالة", + "Sending links is not allowed in this conversation": "إرسال الروابط غير مسموح في هذه المحادثة", + "Show All": "عرض الكل", + "Slide to Cancel": "اسحب للإلغاء", + "Slow mode ON": "الوضع البطيء قيد التشغيل", + "Slow mode, wait {{seconds}}s...": "وضع بطيء، انتظر {{seconds}}ث...", + "Suggest an option": "اقترح خياراً", + "The message has been reported to a moderator.": "تم الإبلاغ عن الرسالة إلى مشرف.", + "The source message was deleted": "تم حذف الرسالة الأصلية", + "Thinking...": "جارٍ التفكير...", + "This reply was deleted": "تم حذف هذا الرد", + "Thread Reply": "رد في الموضوع", + "Type a number from 2 to 10": "اكتب رقماً من 2 إلى 10", + "Unban User": "إلغاء منع المستخدم", + "Unblock User": "إلغاء حظر المستخدم", + "Unknown User": "مستخدم غير معروف", + "Unmute User": "إلغاء كتم المستخدم", + "Unpin from Conversation": "إلغاء التثبيت من المحادثة", + "Unread Messages": "رسائل غير مقروءة", + "Update your comment": "حدّث تعليقك", + "Video": "فيديو", + "View Results": "عرض النتائج", + "View {{count}} comments_many": "عرض {{count}} تعليقات", + "View {{count}} comments_one": "عرض {{count}} تعليق", + "View {{count}} comments_other": "عرض {{count}} تعليقات", + "Voice message": "رسالة صوتية", + "Voice message ({{duration}})": "رسالة صوتية ({{duration}})", + "Voice message deleted": "تم حذف الرسالة الصوتية", + "Your comment": "تعليقك", + "You": "أنت", + "You can't send messages in this channel": "لا يمكنك إرسال رسائل في هذه القناة", + "duration/Location end at": "{{ milliseconds | durationFormatter(withSuffix: false) }}", + "duration/Message reminder": "{{ milliseconds | durationFormatter(withSuffix: true) }}", + "duration/Remind Me": "{{ milliseconds | durationFormatter(withSuffix: true) }}", + "replied to": "رد على", + "timestamp/ChannelPreviewStatus": "{{ timestamp | timestampFormatter(calendar: true; calendarFormats: {\"lastDay\":\"[أمس]\", \"lastWeek\":\"dddd\", \"nextDay\":\"[غدًا]\", \"nextWeek\":\"dddd [في] LT\", \"sameDay\":\"LT\", \"sameElse\":\"L\"}) }}", + "timestamp/ImageGalleryHeader": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/InlineDateSeparator": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/MessageEditedTimestamp": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/MessageSystem": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/MessageTimestamp": "{{ timestamp | timestampFormatter(format: LT) }}", + "timestamp/PollVote": "{{ timestamp | relativeCompactDateFormatter }}", + "timestamp/ReminderNotification": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/StickyHeader": "{{ timestamp | timestampFormatter(calendar: true) }}", + "timestamp/ThreadListItem": "{{ timestamp | timestampFormatter(calendar: true; calendarFormats: {\"lastDay\":\"[أمس]\", \"lastWeek\":\"dddd\", \"nextDay\":\"[غدًا]\", \"nextWeek\":\"dddd [في] LT\", \"sameDay\":\"LT\", \"sameElse\":\"L\"}) }}", + "{{ firstUser }} and {{ nonSelfUserLength }} more are typing": "{{ firstUser }} و{{ nonSelfUserLength }} آخرون يكتبون", + "{{ index }} of {{ photoLength }}": "{{ index }} من {{ photoLength }}", + "{{ replyCount }} Replies": "{{ replyCount }} ردود", + "{{ user }} is typing": "{{ user }} يكتب", + "You voted: {{ option }}": "لقد صوّتَّ: {{ option }}", + "{{ firstUser }} and {{ secondUser }} are typing": "{{ firstUser }} و{{ secondUser }} يكتبان", + "{{ numberOfUsers }} people are typing": "{{ numberOfUsers }} أشخاص يكتبون", + "Typing": "يكتب", + "No messages yet": "لا توجد رسائل بعد", + "Message failed to send": "فشل إرسال الرسالة", + "and {{ count }} others": "و{{ count }} آخرون", + "{{ user }} voted: {{ option }}": "{{ user }} صوّت: {{ option }}", + "{{count}} Audios_many": "{{count}} ملفًا صوتيًا", + "{{count}} Audios_one": "ملف صوتي واحد", + "{{count}} Audios_other": "{{count}} ملفات صوتية", + "{{count}} Files_many": "{{count}} ملفًا", + "{{count}} Files_one": "ملف واحد", + "{{count}} Files_other": "{{count}} ملفات", + "{{count}} Photos_many": "{{count}} صورة", + "{{count}} Photos_one": "صورة واحدة", + "{{count}} Photos_other": "{{count}} صور", + "{{count}} Voice messages_many": "{{count}} رسالة صوتية", + "{{count}} Voice messages_one": "رسالة صوتية واحدة", + "{{count}} Voice messages_other": "{{count}} رسائل صوتية", + "{{count}} Videos_many": "{{count}} مقطعًا", + "{{count}} Videos_one": "مقطع فيديو واحد", + "{{count}} Videos_other": "{{count}} مقاطع فيديو", + "{{count}} votes_many": "{{count}} أصوات", + "{{count}} votes_one": "{{count}} صوت", + "{{count}} votes_other": "{{count}} أصوات", + "🏙 Attachment...": "🏙 مرفق...", + "You have not granted access to the photo library.": "لم تمنح إذن الوصول إلى مكتبة الصور.", + "Change in Settings": "التغيير في الإعدادات", + "Create a poll and let everyone vote": "أنشئ تصويتاً ودع الجميع يصوّت", + "Open Camera": "فتح الكاميرا", + "Open Files": "فتح الملفات", + "Select files to share": "اختر الملفات للمشاركة", + "Take a photo and share": "التقط صورة وشاركها", + "Take a video and share": "التقط فيديو وشاركه", + "You have not granted access to your camera": "لم تمنح إذن الوصول إلى الكاميرا", + "{{count}} Reactions_many": "{{count}} تفاعلات", + "{{count}} Reactions_one": "{{count}} تفاعل", + "{{count}} Reactions_other": "{{count}} تفاعلات", + "Tap to remove": "اضغط للإزالة", + "Draft": "مسودة", + "Reminder set": "تم ضبط التذكير", + "Also sent in channel": "تم الإرسال أيضًا في القناة", + "Replied to a thread": "تم الرد في موضوع", + "View": "عرض", + "Reminder overdue": "انتهى وقت التذكير", + "Poll has ended": "انتهى التصويت", + "Reply to a message to start a thread": "قم بالرد على رسالة لبدء موضوع", + "Couldn't load new threads. Tap to retry": "تعذر تحميل المواضيع الجديدة. اضغط لإعادة المحاولة", + "{{count}} new threads": "{{count}} مواضيع جديدة", + "No conversations yet": "لا توجد محادثات بعد", + "Are you sure you want to delete this group? This can't be undone.": "هل أنت متأكد أنك تريد حذف هذه المجموعة؟ لا يمكن التراجع عن هذا.", + "Are you sure you want to delete this chat? This can't be undone.": "هل أنت متأكد أنك تريد حذف هذه الدردشة؟ لا يمكن التراجع عن هذا.", + "Delete chat": "حذف الدردشة", + "Delete group": "حذف المجموعة", + "Archive Chat": "أرشفة الدردشة", + "Archive Group": "أرشفة المجموعة", + "Delete Chat": "حذف الدردشة", + "Delete Group": "حذف المجموعة", + "Leave Chat": "مغادرة الدردشة", + "Leave Group": "مغادرة المجموعة", + "Mute Group": "كتم المجموعة", + "Offline": "غير متصل", + "Online": "متصل", + "Unarchive Chat": "إلغاء أرشفة الدردشة", + "Unarchive Group": "إلغاء أرشفة المجموعة", + "Unmute Group": "إلغاء كتم المجموعة", + "{{memberCount}} members, {{onlineCount}} online_one": "{{memberCount}} عضو، {{onlineCount}} متصل", + "{{memberCount}} members, {{onlineCount}} online_other": "{{memberCount}} أعضاء، {{onlineCount}} متصل", + "{{memberCount}} members, {{onlineCount}} online_many": "{{memberCount}} أعضاء، {{onlineCount}} متصل", + "{{count}} unread": "{{count}} غير مقروء", + "{{count}} new messages": "{{count}} رسائل جديدة", + "Unsupported Attachment": "مرفق غير مدعوم", + "+{{count}} More Options_one": "+{{count}} خيار إضافي", + "+{{count}} More Options_other": "+{{count}} خيارات إضافية", + "+{{count}} More Options_many": "+{{count}} خيارات إضافية", + "a11y/AI is generating": "AI is generating", + "a11y/AI is thinking": "AI is thinking", + "a11y/Avatar of {{name}}": "Avatar of {{name}}", + "a11y/Connected": "Connected", + "a11y/Delivered": "Delivered", + "a11y/Loading": "Loading", + "a11y/Loading failed": "Loading failed", + "a11y/Message actions": "Message actions", + "a11y/New message from {{user}}": "New message from {{user}}", + "a11y/Offline": "Offline", + "a11y/Open message actions": "Open message actions", + "a11y/Reaction {{emoji}} by {{count}} users": "Reaction {{emoji}} by {{count}} users", + "a11y/Read": "Read", + "a11y/Reconnecting": "Reconnecting", + "a11y/Reply to {{user}}": "Reply to {{user}}", + "a11y/Remove edit": "Remove edit", + "a11y/Remove reply": "Remove reply", + "a11y/Scroll to bottom": "Scroll to bottom", + "a11y/Scroll to bottom, {{count}} new messages": "Scroll to bottom, {{count}} new messages", + "a11y/Scroll to latest": "Scroll to latest", + "a11y/Scroll to latest, {{count}} unread": "Scroll to latest, {{count}} unread", + "a11y/Send message": "Send message", + "a11y/Sending": "Sending", + "a11y/Sent": "Sent", + "a11y/Voice message recording. Hold to record.": "Voice message recording. Hold to record.", + "a11y/{{count}} new messages": "{{count}} new messages", + "a11y/Add attachment": "Add attachment", + "a11y/Close attachments": "Close attachments", + "a11y/Remove attachment": "Remove Attachment", + "a11y/Close poll": "Close poll", + "a11y/Close poll creation": "Close poll creation", + "a11y/Create poll": "Create poll", + "a11y/Decrease maximum votes": "Decrease maximum votes", + "a11y/Delete voice recording": "Delete voice recording", + "a11y/Deselect image": "Deselect image", + "a11y/Deselect video": "Deselect video", + "a11y/Dismiss unread messages": "Dismiss unread messages", + "a11y/Grid Icon": "Grid Icon", + "a11y/Hide Overlay": "Hide Overlay", + "a11y/Increase maximum votes": "Increase maximum votes", + "a11y/Open camera": "Open camera", + "a11y/Open commands": "Open commands", + "a11y/Open file picker": "Open file picker", + "a11y/Open more reactions": "Open more reactions", + "a11y/Open photo picker": "Open photo picker", + "a11y/Open poll creation": "Open poll creation", + "a11y/Open video recorder": "Open video recorder", + "a11y/Play Pause Button": "Play Pause Button", + "a11y/reaction-button-{{type}}-{{selected}}": "reaction-button-{{type}}-{{selected}}", + "a11y/Save edited message": "Save edited message", + "a11y/Select image": "Select image", + "a11y/Select video": "Select video", + "a11y/Send voice recording": "Send voice recording", + "a11y/Share Button": "Share Button", + "a11y/Start voice recording": "Start voice recording", + "a11y/Stop voice recording": "Stop voice recording", + "a11y/Notifications": "Notifications", + "a11y/Dismiss notification": "Dismiss notification", + "Attachment upload blocked due to {{reason}}": "تم حظر رفع المرفق بسبب {{reason}}", + "Attachment upload failed due to {{reason}}": "فشل رفع المرفق بسبب {{reason}}", + "Command not available": "الأمر غير متاح", + "Command not available while editing": "الأمر غير متاح أثناء التعديل", + "Command not available while replying": "الأمر غير متاح أثناء الرد", + "Error reproducing the recording": "خطأ في تشغيل التسجيل", + "Error uploading attachment": "خطأ في رفع المرفق", + "Failed to create the poll": "فشل إنشاء التصويت", + "Failed to create the poll due to {{reason}}": "فشل إنشاء التصويت بسبب {{reason}}", + "Failed to end the poll": "فشل إنهاء التصويت", + "Failed to end the poll due to {{reason}}": "فشل إنهاء التصويت بسبب {{reason}}", + "Failed to jump to the first unread message": "فشل الانتقال إلى أول رسالة غير مقروءة", + "Failed to retrieve location": "فشل جلب الموقع", + "Failed to share location": "فشل مشاركة الموقع", + "File is required for upload attachment": "الملف مطلوب لرفع المرفق", + "Local upload attachment missing local id": "المرفق المرفوع محليًا يفتقد المعرف المحلي", + "Poll ended": "انتهى التصويت", + "Reached the vote limit. Remove an existing vote first.": "تم الوصول إلى حد التصويت. أزل صوتًا قائمًا أولًا.", + "Thread has not been found": "لم يتم العثور على الموضوع", + "Wait until all attachments have uploaded": "انتظر حتى يتم رفع جميع المرفقات", + "Cannot seek in the recording": "لا يمكن التنقل داخل التسجيل", + "Channel archived": "تمت أرشفة القناة", + "Channel muted": "تم كتم القناة", + "Channel pinned": "تم تثبيت القناة", + "Channel unarchived": "تم إلغاء أرشفة القناة", + "Channel unmuted": "تم إلغاء كتم القناة", + "Channel unpinned": "تم إلغاء تثبيت القناة", + "Edit message request failed": "فشل طلب تعديل الرسالة", + "Failed to block user": "فشل حظر المستخدم", + "Failed to leave channel": "فشل مغادرة القناة", + "Failed to play the recording": "فشل تشغيل التسجيل", + "Failed to update channel archive status": "فشل تحديث حالة أرشفة القناة", + "Failed to update channel mute status": "فشل تحديث حالة كتم القناة", + "Failed to update channel pinned status": "فشل تحديث حالة تثبيت القناة", + "Left channel": "تمت مغادرة القناة", + "Recording format is not supported and cannot be reproduced": "تنسيق التسجيل غير مدعوم ولا يمكن تشغيله", + "Send message request failed": "فشل طلب إرسال الرسالة", + "User blocked": "تم حظر المستخدم", + "User unblocked": "تم إلغاء حظر المستخدم", + "{{ user }} has been muted": "تم كتم {{ user }}", + "{{ user }} has been unmuted": "تم إلغاء كتم {{ user }}", + "size limit": "حد الحجم", + "unknown error": "خطأ غير معروف", + "unsupported file type": "نوع ملف غير مدعوم" +} diff --git a/package/src/utils/i18n/Streami18n.ts b/package/src/utils/i18n/Streami18n.ts index dfbf883a32..b268841def 100644 --- a/package/src/utils/i18n/Streami18n.ts +++ b/package/src/utils/i18n/Streami18n.ts @@ -15,6 +15,7 @@ import { predefinedFormatters } from './predefinedFormatters'; import { CustomFormatters, PredefinedFormatters } from './types'; import type { TDateTimeParser } from '../../contexts/translationContext/types'; +import arTranslations from '../../i18n/ar.json'; import enTranslations from '../../i18n/en.json'; import esTranslations from '../../i18n/es.json'; import frTranslations from '../../i18n/fr.json'; @@ -28,6 +29,7 @@ import ptBRTranslations from '../../i18n/pt-br.json'; import ruTranslations from '../../i18n/ru.json'; import trTranslations from '../../i18n/tr.json'; +import 'dayjs/locale/ar'; import 'dayjs/locale/es'; import 'dayjs/locale/fr'; import 'dayjs/locale/he'; @@ -65,6 +67,9 @@ Dayjs.updateLocale('en', { }, }); +Dayjs.updateLocale('ar', { + calendar: calendarFormats.ar, +}); Dayjs.updateLocale('es', { calendar: calendarFormats.es, }); @@ -393,6 +398,7 @@ export class Streami18n { [key: string]: Partial; }; } = { + ar: { [defaultNS]: arTranslations }, en: { [defaultNS]: enTranslations }, es: { [defaultNS]: esTranslations }, fr: { [defaultNS]: frTranslations }, diff --git a/package/src/utils/i18n/calendarFormats.ts b/package/src/utils/i18n/calendarFormats.ts index e4ffaf5c43..baa99162cd 100644 --- a/package/src/utils/i18n/calendarFormats.ts +++ b/package/src/utils/i18n/calendarFormats.ts @@ -4,6 +4,14 @@ import { CalendarFormats } from './Streami18n'; * Calendar formats for different languages. */ export const calendarFormats: Record = { + ar: { + lastDay: '[أمس]', + lastWeek: 'dddd', + nextDay: '[غدًا]', + nextWeek: 'dddd [عند] LT', + sameDay: '[اليوم]', + sameElse: 'L', + }, en: { lastDay: '[Yesterday]', lastWeek: 'dddd',