diff --git a/locale/ar/client.json b/locale/ar/client.json new file mode 100644 index 000000000..5e1edbf3a --- /dev/null +++ b/locale/ar/client.json @@ -0,0 +1,153 @@ +{ + "action.cancel": "إلغاء", + "action.change": "تغيير", + "action.close": "إغلاق", + "action.confirm": "تأكيد", + "action.delete": "حذف", + "action.edit": "تحرير", + "action.markallasread": "تحديد الكل كمقروء", + "action.ok": "موافق", + "action.respond": "رد", + "action.save": "حفظ", + "action.signin": "تسجيل الدخول", + "action.submit": "إرسال", + "enum.poststatus.completed": "مكتمل", + "enum.poststatus.declined": "مرفوض", + "enum.poststatus.deleted": "محذوف", + "enum.poststatus.duplicate": "مكرر", + "enum.poststatus.open": "مفتوح", + "enum.poststatus.planned": "مخطط له", + "enum.poststatus.started": "بدأ", + "error.expired.text": "الرابط الذي نقرت عليه قد انتهت صلاحيته.", + "error.expired.title": "منتهي الصلاحية", + "error.forbidden.text": "أنت غير مخول لعرض هذه الصفحة.", + "error.forbidden.title": "ممنوع", + "error.internalerror.text": "حدث خطأ ونحن نعمل على إصلاح المشكلة! سنكون في الخدمة قريباً.", + "error.internalerror.title": "عفواً! هذا غير متوقع...", + "error.pagenotfound.text": "الرابط الذي نقرت عليه قد يكون مكسورًا أو قد تكون الصفحة قد تمت إزالتها.", + "error.pagenotfound.title": "الصفحة غير موجودة", + "error.unauthorized.text": "أنت غير مخول لعرض هذه الصفحة.", + "error.unauthorized.title": "غير مخول", + "home.form.defaultinvitation": "أدخل اقتراحك هنا...", + "home.form.defaultwelcomemessage": "نود أن نسمع ما تفكر به.\n\nماذا يمكننا أن نفعل بشكل أفضل؟ هذا هو المكان المناسب للتصويت والمناقشة ومشاركة الأفكار.", + "home.lonely.suggestion": "يوصى بإنشاء <0>على الأقل 3 اقتراحات هنا قبل مشاركة هذا الموقع. المحتوى الأولي مهم لبدء جذب جمهورك.", + "home.lonely.text": "لم يتم إنشاء أي منشورات حتى الآن.", + "home.postfilter.label.view": "عرض", + "home.postfilter.option.mostdiscussed": "الأكثر مناقشة", + "home.postfilter.option.mostwanted": "الأكثر رغبة", + "home.postfilter.option.myvotes": "تصويتي", + "home.postfilter.option.recent": "حديث", + "home.postfilter.option.trending": "الشائع", + "home.postinput.description.placeholder": "وصف اقتراحك (اختياري)", + "home.postscontainer.label.noresults": "لم تتطابق أي نتائج مع بحثك، جرب شيئًا مختلفًا.", + "home.postscontainer.label.viewmore": "عرض المزيد من المنشورات", + "home.postscontainer.query.placeholder": "بحث", + "home.similar.subtitle": "فكر في التصويت على المنشورات الموجودة بدلاً من ذلك.", + "home.similar.title": "منشورات مشابهة", + "home.tagsfilter.label.with": "مع", + "home.tagsfilter.selected.none": "أي وسم", + "label.actions": "إجراءات", + "label.avatar": "الصورة الرمزية", + "label.custom": "مخصص", + "label.description": "وصف", + "label.discussion": "نقاش", + "label.email": "البريد الإلكتروني", + "label.gravatar": "Gravatar", + "label.letter": "حرف", + "label.moderation": "إشراف", + "label.name": "الاسم", + "label.none": "لا شيء", + "label.notifications": "إشعارات", + "label.or": "أو", + "label.subscribe": "اشتراك", + "label.tags": "وسوم", + "label.unread": "غير مقروء", + "label.unsubscribe": "إلغاء الاشتراك", + "label.voters": "المصوتون", + "legal.agreement": "لقد قرأت وأوافق على <0/> و <1/>.", + "legal.notice": "بتسجيل الدخول، أنت توافق على <0/> و <1/>.", + "legal.privacypolicy": "سياسة الخصوصية", + "legal.termsofservice": "شروط الخدمة", + "menu.administration": "إدارة", + "menu.mysettings": "إعداداتي", + "menu.signout": "تسجيل الخروج", + "menu.sitesettings": "إعدادات الموقع", + "modal.changeemail.header": "تأكيد بريدك الإلكتروني الجديد", + "modal.changeemail.text": "لقد أرسلنا للتو رابط تأكيد إلى <0>{0}. <1/> انقر على الرابط لتحديث بريدك الإلكتروني.", + "modal.completeprofile.header": "إكمال ملفك الشخصي", + "modal.completeprofile.name.placeholder": "الاسم", + "modal.completeprofile.text": "لأن هذه هي المرة الأولى التي تسجل فيها الدخول، يرجى إدخال اسمك.", + "modal.deleteaccount.header": "حذف الحساب", + "modal.deleteaccount.text": "<0>عند اختيارك حذف حسابك، سنمحو جميع معلوماتك الشخصية إلى الأبد. سيبقى المحتوى الذي قمت بنشره، ولكنه سيصبح مجهولًا.<1>هذه العملية لا رجعة فيها. <2>هل أنت متأكد؟", + "modal.deletecomment.header": "حذف التعليق", + "modal.deletecomment.text": "هذه العملية لا رجعة فيها. <0>هل أنت متأكد؟", + "modal.showvotes.message.zeromatches": "لم يتم العثور على مستخدمين مطابقين لـ <0>{0}.", + "modal.showvotes.query.placeholder": "ابحث عن المستخدمين بالاسم...", + "modal.signin.header": "تسجيل الدخول للمشاركة والتصويت", + "mynotifications.label.readrecently": "مقروء في آخر 30 يومًا.", + "mynotifications.message.nounread": "لا توجد إشعارات غير مقروءة.", + "mynotifications.page.subtitle": "ابقَ على اطلاع بما يحدث", + "mynotifications.page.title": "الإشعارات", + "mysettings.apikey.documentation": "لتعلم كيفية استخدام API، اقرأ <0>التوثيق الرسمي.", + "mysettings.apikey.generate": "إعادة توليد مفتاح API", + "mysettings.apikey.newkey": "مفتاح API الجديد هو: <0>{0}", + "mysettings.apikey.newkeynotice": "احفظه بأمان على خوادمك ولا تخزنه أبدًا في جانب العميل لتطبيقك.", + "mysettings.apikey.notice": "يتم عرض مفتاح API فقط عند توليده. إذا فقدت مفتاحك أو تعرض للاختراق، قم بتوليد مفتاح جديد ودون ملاحظة ذلك.", + "mysettings.apikey.title": "مفتاح API", + "mysettings.dangerzone.delete": "حذف حسابي", + "mysettings.dangerzone.notice": "هذه العملية لا رجعة فيها. يرجى التأكد.", + "mysettings.dangerzone.text": "عند اختيارك حذف حسابك، سنمحو جميع معلوماتك الشخصية إلى الأبد. سيبقى المحتوى الذي قمت بنشره، ولكنه سيصبح مجهولًا.", + "mysettings.dangerzone.title": "حذف الحساب", + "mysettings.message.avatar.custom": "نقبل صور JPG، GIF و PNG، أقل من 100KB وبنسبة عرض إلى ارتفاع 1:1 بأبعاد لا تقل عن 50x50 بكسل.", + "mysettings.message.avatar.gravatar": "سيتم استخدام <0>Gravatar بناءً على بريدك الإلكتروني. إذا لم يكن لديك Gravatar، سيتم إنشاء صورة رمزية من حرف أولي بناءً على الأحرف الأولى من اسمك.", + "mysettings.message.avatar.letter": "سيتم إنشاء صورة رمزية من حرف أولي بناءً على الأحرف الأولى من اسمك.", + "mysettings.message.noemail": "حسابك لا يحتوي على بريد إلكتروني.", + "mysettings.message.privateemail": "بريدك الإلكتروني خاص ولن يتم عرضه علنًا أبدًا.", + "mysettings.notification.channelemail": "البريد الإلكتروني", + "mysettings.notification.channelweb": "الويب", + "mysettings.notification.event.discussion": "نقاش", + "mysettings.notification.event.discussion.staff": "التعليقات على جميع المنشورات إلا إذا تم إلغاء الاشتراك بشكل فردي", + "mysettings.notification.event.discussion.visitors": "التعليقات على المنشورات التي قمت بالاشتراك فيها", + "mysettings.notification.event.newpost": "منشور جديد", + "mysettings.notification.event.newpost.staff": "المنشورات الجديدة على هذا الموقع", + "mysettings.notification.event.newpost.visitors": "المنشورات الجديدة على هذا الموقع", + "mysettings.notification.event.statuschanged": "تغيير الحالة", + "mysettings.notification.event.statuschanged.staff": "تغيير الحالة على جميع المنشورات إلا إذا تم إلغاء الاشتراك بشكل فردي", + "mysettings.notification.event.statuschanged.visitors": "تغيير الحالة على المنشورات التي قمت بالاشتراك فيها", + "mysettings.notification.message.emailonly": "ستتلقى إشعارات <0>البريد الإلكتروني حول {about}.", + "mysettings.notification.message.none": "لن تتلقى <0>أي إشعار حول هذا الحدث.", + "mysettings.notification.message.webandemail": "ستتلقى إشعارات <0>الويب و<1>البريد الإلكتروني حول {about}.", + "mysettings.notification.message.webonly": "ستتلقى إشعارات <0>الويب حول {about}.", + "mysettings.notification.title": "استخدم اللوحة التالية لاختيار الأحداث التي ترغب في تلقي إشعارات عنها", + "mysettings.page.subtitle": "إدارة إعدادات ملفك الشخصي", + "mysettings.page.title": "الإعدادات", + "page.backhome": "أعدني إلى <0>{0} الصفحة الرئيسية.", + "page.notinvited.text": "لم نتمكن من العثور على حساب لبريدك الإلكتروني.", + "page.notinvited.title": "غير مدعو", + "page.pendingactivation.text": "لقد أرسلنا لك بريدًا إلكترونيًا يحتوي على رابط لتفعيل حسابك.", + "page.pendingactivation.text2": "يرجى التحقق من بريدك الوارد لتفعيله.", + "page.pendingactivation.title": "حسابك في انتظار التفعيل", + "showpost.commentinput.placeholder": "اترك تعليقاً", + "showpost.discussionpanel.emptymessage": "لم يقم أحد بالتعليق بعد.", + "showpost.label.author": "نشر بواسطة <0/> · <1/>", + "showpost.message.nodescription": "لم يتم توفير وصف.", + "showpost.moderationpanel.text.help": "هذه العملية <0>لا يمكن التراجع عنها.", + "showpost.moderationpanel.text.placeholder": "لماذا تحذف هذا المنشور؟ (اختياري)", + "showpost.notificationspanel.message.subscribed": "أنت تتلقى إشعارات حول النشاط على هذا المنشور.", + "showpost.notificationspanel.message.unsubscribed": "لن تتلقى أي إشعار حول هذا المنشور.", + "showpost.postsearch.numofvotes": "{0} صوت", + "showpost.postsearch.query.placeholder": "ابحث عن المنشور الأصلي...", + "showpost.responseform.message.mergedvotes": "ستدمج الأصوات من هذا المنشور في المنشور الأصلي.", + "showpost.responseform.text.placeholder": "ما الذي يحدث مع هذا المنشور؟ دع مستخدميك يعرفون ما هي خططك...", + "showpost.votespanel.more": "+{extraVotesCount} أكثر", + "showpost.votespanel.seedetails": "شاهد التفاصيل", + "signin.message.email": "أدخل عنوان بريدك الإلكتروني لتسجيل الدخول", + "signin.message.emaildisabled": "تم تعطيل المصادقة عبر البريد الإلكتروني من قبل المسؤول. إذا كان لديك حساب مسؤول وتحتاج إلى تجاوز هذا التقييد، يرجى <0>النقر هنا.", + "signin.message.emailsent": "لقد أرسلنا للتو رابط تأكيد إلى <0>{email}. انقر على الرابط وستسجل الدخول.", + "signin.message.locked.text": "لتفعيل هذا الموقع، قم بتسجيل الدخول بحساب مسؤول وقم بتحديث الإعدادات المطلوبة.", + "signin.message.locked.title": "<0>{0} مغلق حاليًا.", + "signin.message.onlyadmins": "حاليًا مسموح فقط بتسجيل الدخول إلى حساب مسؤول", + "signin.message.private.text": "إذا كان لديك حساب أو دعوة، يمكنك استخدام الخيارات التالية لتسجيل الدخول.", + "signin.message.private.title": "<0>{0} مساحة خاصة، يجب عليك تسجيل الدخول للمشاركة والتصويت.", + "{count, plural, one {# وسم} other {# وسوم}}": "{count, plural, one {# وسم} other {# وسوم}}" +} diff --git a/locale/ar/server.json b/locale/ar/server.json new file mode 100644 index 000000000..bac763d8c --- /dev/null +++ b/locale/ar/server.json @@ -0,0 +1,62 @@ +{ + "property.avatarType": "نوع الصورة الرمزية", + "property.name": "الاسم", + "property.image": "صورة", + "property.customdomain": "نطاق مخصص", + "property.key": "المفتاح", + "property.email": "البريد الإلكتروني", + "property.title": "العنوان", + "property.comment": "تعليق", + "property.status": "الحالة", + "validation.required": "{name} مطلوب.", + "validation.invalid": "{name} غير صالح.", + "validation.invalidvalue": "{name} يحتوي على قيمة غير صالحة '{value}'.", + "validation.maxstringlen": "{name} يجب أن يحتوي على أقل من {len} حرفًا.", + "validation.custom.maxattachments": "يُسمح بحد أقصى {number} من المرفقات لكل منشور.", + "validation.custom.differentemail": "اختر بريدًا إلكترونيًا مختلفًا.", + "validation.custom.emailtaken": "هذا البريد الإلكتروني مستخدم بالفعل من قبل شخص آخر.", + "validation.custom.descriptivetitle": "يجب أن يكون العنوان أكثر وصفًا.", + "validation.custom.duplicatetitle": "تم نشر هذا من قبل.", + "validation.custom.selfduplicate": "لا يمكن أن يكون مكررًا لنفسه.", + "validation.custom.originalpostnotfound": "لم يتم العثور على المنشور الأصلي.", + "validation.custom.cannotdeleteduplicatepost": "لا يمكن حذف هذا المنشور لأنه مرجع لمنشور مكرر.", + "validation.custom.unknownsettings": "إعدادات غير معروفة باسم '{name}'", + "validation.custom.invalidemail": "'{email}' ليس عنوان بريد إلكتروني صالح.", + "validation.custom.invalidurl": "'{url}' ليس عنوان URL صالح.", + "validation.custom.invalidcustomdomain": "'{domain}' ليس نطاق مخصص صالح.", + "validation.custom.customdomaintaken": "هذا النطاق المخصص مستخدم بالفعل من قبل شخص آخر.", + "validation.custom.unsupportedfileformat": "صيغة هذا الملف غير مدعومة.", + "validation.custom.minimagedimensions": "يجب أن تكون الصورة بأبعاد لا تقل عن {width}x{height} بكسل.", + "validation.custom.imagesquareratio": "يجب أن تكون نسبة عرض الصورة إلى ارتفاعها 1:1.", + "validation.custom.maximagesize": "يجب أن يكون حجم الصورة أقل من {kilobytes} كيلو بايت.", + "enum.poststatus.open": "مفتوح", + "enum.poststatus.started": "بدأ", + "enum.poststatus.completed": "مكتمل", + "enum.poststatus.declined": "مرفوض", + "enum.poststatus.planned": "مخطط له", + "enum.poststatus.duplicate": "مكرر", + "enum.poststatus.deleted": "محذوف", + "email.change_emailaddress.subject": "تأكيد بريدك الإلكتروني الجديد", + "email.change_emailaddress.request": "لقد طلبت تغيير بريدك الإلكتروني من {oldEmail} إلى {newEmail}.", + "email.subscription.view": "عرضه في متصفحك", + "email.subscription.change": "تغيير تفضيلات الإشعارات الخاصة بك", + "email.subscription.unsubscribe": "إلغاء الاشتراك منه", + "email.greetings": "مرحباً!", + "email.greetings_name": "مرحباً، {name}!", + "email.operation_confirmation": "انقر على الرابط أدناه لتأكيد هذه العملية.", + "email.footer.noreply": "تم إرسال هذا البريد الإلكتروني من عنوان إشعار فقط لا يقبل الرسائل الواردة. يرجى عدم الرد على هذه الرسالة.", + "email.change_status.duplicate": "{title} ({postLink}) تم إغلاقه باعتباره مكرر لـ {duplicate}.", + "email.change_status.others": "تم تغيير حالة {title} ({postLink}) إلى {status}.", + "email.delete_post.text": "{title} تم حذفه.", + "email.new_comment.text": "{userName} ترك تعليقًا على {title} ({postLink}).", + "email.new_post.text": "{userName} أنشأ منشورًا جديدًا {title} ({postLink}).", + "email.signin_email.subject": "تسجيل الدخول إلى {siteName}", + "email.signin_email.text": "طلبت منا إرسال رابط تسجيل الدخول لك وها هو.", + "email.signin_email.confirmation": "انقر على الرابط أدناه لتسجيل الدخول إلى {siteName}.", + "email.signup_email.subject": "موقع Fider الجديد الخاص بك", + "email.signup_email.text": "أنت على بعد خطوة واحدة من تفعيل موقع Fider الخاص بك.", + "email.signup_email.confirmation": "من خلال الرابط أدناه يمكنك التحقق من عنوان بريدك الإلكتروني وإكمال عملية التفعيل.", + "email.footer.subscription_notice": "أنت تتلقى هذا البريد الإلكتروني لأنك مشترك في هذا المنشور. يمكنك {view}، {unsubscribe} أو {change}.", + "email.footer.subscription_notice2": "أنت تتلقى هذا البريد الإلكتروني لأنك مشترك في هذا المنشور. يمكنك {change}.", + "email.footer.subscription_notice3": "أنت تتلقى هذا البريد الإلكتروني لأنك مشترك في هذا المنشور. يمكنك {view} أو {change}." +} diff --git a/locale/locales.ts b/locale/locales.ts index 63e0e651f..d8a9aeafb 100644 --- a/locale/locales.ts +++ b/locale/locales.ts @@ -39,6 +39,9 @@ const locales: { [key: string]: Locale } = { el: { text: "Greek", }, + ar: { + text: "Arabic", + }, } export default locales