diff --git a/frontend/app/locales/ar.json b/frontend/app/locales/ar.json new file mode 100644 index 00000000..e2da53a9 --- /dev/null +++ b/frontend/app/locales/ar.json @@ -0,0 +1,177 @@ + { + "auth.back": "رجوع", + "auth.email-address": "البريد الإلكتروني", + "auth.loading": "جارٍ التحميل...", + "auth.oauth-button": "سجل دخولاً عبر {provider}", + "auth.oauth-source": "عبر التواصل الاجتماعي", + "auth.open-profile": "الصفحة الشخصية", + "auth.or": "أو", + "auth.signin": "دخول", + "auth.signout": "خروج", + "auth.submit": "إرسال", + "auth.symbols-restriction": "اسم المستخدم ينبغي أن يحتوي فقط على حروف، أرقام، مسافات، أو شرطات", + "auth.telegram-check": "تأكد", + "auth.telegram-link": "عبر الرابط", + "auth.telegram-message-1": "افتح تيليجرام", + "auth.telegram-message-2": "انقر \"ابدأ\" هناك.", + "auth.telegram-message-3": "ثم انقر \"تأكد\" أسفله.", + "auth.telegram-optional-qr": "أو عبر مسح رمز QR", + "auth.telegram-qr": "رمز QR للتيليجرام", + "auth.user-not-found": "لا مستخدم بهذا الاسم", + "auth.username": "اسم المستخدم", + "authPanel.disable-comments": "عطّل التعليقات", + "authPanel.disabled-cookies": "ألغِ حظرَ كوكيز الطرف الثالث للدخول أو أنشئ تعليقاً في", + "authPanel.enable-comments": "فعل التعليقات", + "authPanel.enable-cookies": "اسمح بالكوكيز للدخول والتعليق", + "authPanel.hide-settings": "أخفِ الإعدادات", + "authPanel.new-page": "صفحة جديدة", + "authPanel.read-only": "للقراءة فقط", + "authPanel.show-settings": "أظهر الإعدادات", + "blockingDuration.day": "ليومٍ", + "blockingDuration.month": "لشهرٍ", + "blockingDuration.permanently": "دائماً", + "blockingDuration.week": "لأسبوعٍ", + "comment.block": "حظر", + "comment.block-user": "هل تودُّ حظر {userName} لمدة {duration}؟", + "comment.blocked-user": "محظور", + "comment.blocking-period": "فترة الحظر", + "comment.cancel": "إلغاء", + "comment.controversy": "مستوى النقاش: {value}", + "comment.copied": "نُسِخ!", + "comment.copy": "نسخ", + "comment.delete": "حذف", + "comment.delete-message": "هل تود حذف هذا التعليق؟", + "comment.deleted-comment": "هذا التعليق محذوف", + "comment.deleted-user": "حُذِف", + "comment.edit": "عدّل", + "comment.expired-time": "انتهى وقت التعديل", + "comment.go-to-parent": "اذهب للتعليق الأصلي", + "comment.hide": "أخفِ", + "comment.hide-user-comment": "هل تود إخفاء تعليقات {userName}؟", + "comment.pin": "ثبّت", + "comment.pin-comment": "هل تودُّ تثبيت هذا التعليق؟", + "comment.reply": "ردّ", + "comment.time": "{day} في {time}", + "comment.toggle-verification": "فعّل التحقق", + "comment.unblock": "ألغِ حظر", + "comment.unblock-user": "هل تود إلغاء حظر هذا المستخدم؟", + "comment.unpin": "إلغاء تثبيت", + "comment.unpin-comment": "هل تودُّ إلغاء تثبيت هذا التعليق؟", + "comment.unverified-user": "مستخدم غير مُحقَّق", + "comment.unverify-user": "هل تودُّ إلغاء التحقق من {userName}؟", + "comment.verified-user": "مستخدم مُحَقَّق", + "comment.verify-user": "هل تود تحقيق {userName}؟", + "comment.vote-error": "خطأ تصويت: {voteErrorMessage}", + "commentForm.anonymous-uploading-disabled": "رفع الصور مُعطّل للمجهولين. فضلاً سجل الدخول لإرفاق صور.", + "commentForm.exceeded-size": "{fileName} يتجاوز حد الرفع: {maxImageSize}", + "commentForm.input-placeholder": "تعليقك هنا", + "commentForm.new-comment": "تعليق جديد", + "commentForm.notice-about-styling": "تنميط الكتابة بالماركداون مدعوم", + "commentForm.preview": "عاين", + "commentForm.reply": "رُد", + "commentForm.save": "احفظ", + "commentForm.send": "أرسل", + "commentForm.subscribe-by": "اشترك عبر", + "commentForm.subscribe-or": "أو", + "commentForm.unauthorized-uploading-disabled": "رفع الصور مُعطّل لغير المُتحقق منهم. عليك بالدخول قبل الرفع.", + "commentForm.unexpected-error": "ثمّة عطلٌ ما. فضلاً عاود المحاولة لاحقاً.", + "commentForm.upload-file-fail": "رفع {fileName} فشل بخطأ: \"{errorMessage}", + "commentForm.uploading": "جارٍ الرفع...", + "commentForm.uploading-file": "جارٍ رفع {fileName}...", + "commentsSort.best": "الأفضل", + "commentsSort.least-controversial": "الأقل جدلاً", + "commentsSort.least-recently-updated": "الأقدم تحديثاً", + "commentsSort.most-controversial": "الأكثر جدلاً", + "commentsSort.newest": "الأجدد", + "commentsSort.oldest": "الأقدم", + "commentsSort.recently-updated": "الأجدد تحديثاً", + "commentsSort.worst": "الأسوأ", + "empty-state": "لا تعليقات للآن", + "errors.0": "ثمّة عطلٌ ما. فضلاً عاود المحاولة لاحقاً.", + "errors.1": "لا يمكن إيجاد التعليق. فضلاً حدث الصفحة وعاود المحاولة.", + "errors.10": "وقت تعديل التعليق فات.", + "errors.11": "للتعليق ردُّ بالفعل. لا يمكنك التعديل.", + "errors.12": "لا يُمكن حفظ نتيجة التصويت. فضلاً عاود المحاولة لاحقاً.", + "errors.13": "لا يمكنك التصويت لتعليقك.", + "errors.14": "لقد صوّتَّ بالفعل للتعليق", + "errors.15": "تصويتات فوق المسموح للتعليق.", + "errors.16": "التعليق وصل لأقل مستوى.", + "errors.17": "رُفض الإجراء. فضلاً عاود المحاولة لاحقاً.", + "errors.18": "الملف المطلوب لا يمكن إيجاده", + "errors.19": "التعليق يحتوي على كلمات محظورة.", + "errors.2": "خطأ في معالجة الطلب القادم.", + "errors.20": "الصورة المنشورة غير موجودة. فضلاً عاود رفعها.", + "errors.3": "لا صلاحية لك في هذا الإجراء.", + "errors.4": "محتويات التعليق غير صالحة", + "errors.5": "التعليق لا يمكن إيجاده. فضلاً عاود تحميل الصفحة.", + "errors.6": "الموقع لا يمكن إيجاده. فضلاً عاود تحميل الصفحة", + "errors.7": "المستخدم محظور", + "errors.8": "لا يمكن نشر تعليقات على هذه الصفحة. التعليقات مؤرشفة للقراءة فقط.", + "errors.9": "فشل تعديل التعليق. فضلاً، عاود المحاولة.", + "errors.failed-fetch": "فشل الاتصال. فضلاً تأكد من اتصالك بالإنترنت.", + "errors.forbidden": "ممنوع.", + "errors.not-authorized": "غير مخوّل بالدخول.", + "errors.to-many-request": "لقد وصلت للحد الأقصى من الطلبات.", + "errors.unexpected-error": "ثمة عطلٌ ما.", + "profile.close": "أغلق الملف.", + "profile.request-to-delete-data": "طلب حذف بياناتي", + "retry": "إعادة المحاولة", + "root.pinned-comments": "التعليقات المثبتة", + "root.powered-by": "صنع باستخدام Remark42", + "root.show-more": "أظهر المزيد", + "settings.block": "حظر", + "settings.block-time": "إلى {day} في {time}", + "settings.block-user": "هل تودُّ حظر {userName}؟", + "settings.blocked-users-header": "المحظورون:", + "settings.blocked-users-title": "المحظورون", + "settings.hidden-user-header": "المخفيون:", + "settings.hidden-users-title": "المخفيون", + "settings.hide": "أخفِ", + "settings.no-blocked-users": "لا يوجد محظورون", + "settings.no-hidden-users": "لا يوجد مخفيون", + "settings.permanently": "دائماً", + "settings.show": "أظهر", + "settings.unblock": "إلغِ حظر", + "settings.unblock-user": "هل تودُّ إلغاء حظر {userName}؟", + "settings.unknown": "غير معروف", + "sort-by": "صنّف حسب", + "subscribeByEmail.back": "عودة", + "subscribeByEmail.close": "أغلق", + "subscribeByEmail.email": "البريد الإلكتروني", + "subscribeByEmail.have-been-subscribed": "لقد اشتركت في تحديثات البريد الإلكتروني", + "subscribeByEmail.have-been-unsubscribed": "لقد ألغيت اشتراكك في تحديثات البريد الإلكتروني", + "subscribeByEmail.only-registered-users": "متاح للمُسجّلين فقط", + "subscribeByEmail.submit": "أرسل", + "subscribeByEmail.subscribe": "اشترك", + "subscribeByEmail.subscribe-by-email": "اشترك عبر البريد", + "subscribeByEmail.subscribe-to-replies": "اشترك للردود", + "subscribeByEmail.subscribed": "أنت مشترك بالتحديثات عبر البريد", + "subscribeByEmail.unsubscribe": "إلغاء الاشتراك", + "subscribeByRSS.button-title": "اشترك عبر RSS", + "subscribeByRSS.replies": "الردود", + "subscribeByRSS.site": "الموقع", + "subscribeByRSS.thread": "سلسلة ردود", + "subscribeByRSS.title": "RSS", + "token": "رمز", + "token.expired": "الرمز انتهت صلاحيته", + "token.invalid": "الرمز غير صالح", + "toolbar.attach-image": "أرفق صورةً، أو اسحبها وأسقطها، أو الصقها من الحافظة", + "toolbar.bold": "أضف نصّاً عريضاً {shortcut}", + "toolbar.code": "أدرج نصّاً برمجياً", + "toolbar.header": "أضف عنواناً", + "toolbar.italic": "أضف نصاً مائلاً {shortcut}", + "toolbar.link": "أضف رابطاً {shortcut}", + "toolbar.ordered-list": "أضف قائمةً مرقمةً", + "toolbar.quote": "أضف اقتباساً", + "toolbar.unordered-list": "أضف قائمةً مُنقّطةً", + "user.comments": "تعليقات", + "user.load-more": "تحميل المزيد", + "user.my-comments": "تعليقات", + "vote.anonymous": "لا يُسمح بتصويت المجهولين", + "vote.deleted": "لا يمكن التصويت لتعليقٍ محذوف", + "vote.guest": "سجل الدخول للتصويت", + "vote.only-positive": "مسموح بنقاطٍ موجبة فقط", + "vote.only-post-page": "التصويت مسموح على صفحة المنشور فقط", + "vote.own-comment": "لا يمكنك التصويت لتعليقك.", + "vote.readonly": "لا يمكنك التصويت على مواضيع للقراءة فقط." + } \ No newline at end of file diff --git a/frontend/app/utils/loadLocale.ts b/frontend/app/utils/loadLocale.ts index 20d52971..282deffd 100644 --- a/frontend/app/utils/loadLocale.ts +++ b/frontend/app/utils/loadLocale.ts @@ -51,6 +51,9 @@ export async function loadLocale(locale: string): Promise if (locale === 'it') { return import(/* webpackChunkName: "it" */ '../locales/it.json').then((res) => res.default).catch(() => enMessages); } + if (locale === 'ar') { + return import(/* webpackChunkName: "ar" */ '../locales/ar.json').then((res) => res.default).catch(() => enMessages); + } return enMessages; } diff --git a/frontend/package-lock.json b/frontend/package-lock.json index a335bb7b..6f5b441f 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -29323,9 +29323,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.8", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", - "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", + "version": "1.14.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.7.tgz", + "integrity": "sha512-+hbxoLbFMbRKDwohX8GkTataGqO6Jb7jGwpAlwgy2bIz25XtRm7KEzJM76R1WiNT5SwZkX4Y75SwBolkpmE7iQ==", "dev": true }, "for-in": { diff --git a/frontend/tasks/supportedLocales.json b/frontend/tasks/supportedLocales.json index 80fc7de1..15457338 100644 --- a/frontend/tasks/supportedLocales.json +++ b/frontend/tasks/supportedLocales.json @@ -1 +1 @@ -["en", "ru", "de", "fi", "es", "zh", "tr", "bg", "ua", "pl", "vi", "be", "fr", "ja", "ko", "bp", "it"] +["en", "ru", "de", "fi", "es", "zh", "tr", "bg", "ua", "pl", "vi", "be", "fr", "ja", "ko", "bp", "it", "ar"]