feat: adding Arabic Language Support (#1049)

* 🌐 feat(lang): Add Arabic language support

* 🌐 feat(lang): Add Arabic to LocaleOptions & fix RTL direction

* 🌐 feat(lang): Add Arabic to LocaleOptions & fix RTL direction

* 🎨 style(lang): Improve RTL support and use native Arabic label
This commit is contained in:
Ayman Mustafa
2024-01-15 18:27:24 +02:00
committed by GitHub
parent 260caa3cb7
commit a325ef915d
15 changed files with 872 additions and 3 deletions
+1
View File
@@ -5,6 +5,7 @@ module.exports = defineConfig({
entryLocale: 'zh-CN',
output: 'locales',
outputLocales: [
'ar',
'zh-TW',
'en-US',
'ru-RU',
+96
View File
@@ -0,0 +1,96 @@
{
"agentDefaultMessage": "مرحبًا، أنا **{{name}}**، يمكنك البدء في الدردشة معي على الفور، أو يمكنك الانتقال إلى [إعدادات المساعد](/chat/settings#session={{id}}) لتحسين معلوماتي.",
"agentDefaultMessageWithSystemRole": "مرحبًا، أنا **{{name}}**، {{systemRole}}، دعنا نبدأ الدردشة!",
"backToBottom": "العودة إلى الأسفل",
"clearCurrentMessages": "مسح رسائل الجلسة الحالية",
"confirmClearCurrentMessages": "سيتم مسح رسائل الجلسة الحالية قريبًا، وبمجرد المسح لن يمكن استعادتها، يرجى تأكيد الإجراء الخاص بك",
"confirmRemoveSessionItemAlert": "سيتم حذف هذا المساعد قريبًا، وبمجرد الحذف لن يمكن استعادته، يرجى تأكيد الإجراء الخاص بك",
"defaultAgent": "المساعد الافتراضي",
"defaultSession": "المساعد الافتراضي",
"duplicateTitle": "{{title}} نسخة",
"historyRange": "نطاق التاريخ",
"inbox": {
"defaultMessage": "مرحبًا، أنا مساعدك الذكي، يمكنك أن تسألني أي شيء وسأحاول الإجابة عليك. إذا كنت بحاجة إلى مساعد أكثر احترافية أو مخصصة، يمكنك النقر على `+` لإنشاء مساعد مخصص",
"desc": "قم بتشغيل مجموعة الدماغ وأشعل شرارة التفكير. مساعدك الذكي، هنا حيث يمكنك التواصل بكل شيء",
"title": "دردشة عشوائية"
},
"input": {
"onlyAdd": "إضافة الرسالة فقط",
"send": "إرسال",
"sendWithCmdEnter": "اضغط {{meta}} + Enter للإرسال",
"sendWithEnter": "اضغط Enter للإرسال",
"stop": "توقف",
"warp": "تغيير السطر"
},
"messageAction": {
"delAndRegenerate": "حذف وإعادة الإنشاء",
"regenerate": "إعادة الإنشاء"
},
"newAgent": "مساعد جديد",
"noDescription": "لا توجد وصف",
"pin": "تثبيت",
"pinOff": "إلغاء التثبيت",
"regenerate": "إعادة الإنشاء",
"roleAndArchive": "الدور والأرشيف",
"searchAgentPlaceholder": "البحث عن مساعد ومحادثة...",
"sendPlaceholder": "أدخل محتوى الدردشة...",
"sessionList": "قائمة المساعدين",
"shareModal": {
"download": "تحميل اللقطة",
"imageType": "نوع الصورة",
"screenshot": "لقطة شاشة",
"settings": "إعدادات التصدير",
"shareToShareGPT": "إنشاء رابط مشاركة ShareGPT",
"withBackground": "تضمين صورة الخلفية",
"withFooter": "تضمين تذييل",
"withPluginInfo": "تضمين معلومات البرنامج المساعد",
"withSystemRole": "تضمين دور المساعد"
},
"stt": {
"action": "إدخال صوتي",
"loading": "جارٍ التعرف...",
"prettifying": "جارٍ التجميل..."
},
"temp": "مؤقت",
"tokenDetail": "إعداد الدور: {{systemRoleToken}} · رسائل الجلسة: {{chatsToken}} · إعداد الأدوات: {{toolsToken}}",
"tokenTag": {
"overload": "تجاوز الحد",
"remained": "متبقي",
"used": "مستخدم"
},
"topic": {
"actions": {
"autoRename": "إعادة تسمية ذكية",
"duplicate": "إنشاء نسخة",
"export": "تصدير الموضوع"
},
"confirmRemoveAll": "سيتم حذف جميع المواضيع قريبًا، وبمجرد الحذف لن يمكن استعادتها، يرجى التحلي بالحذر.",
"confirmRemoveTopic": "سيتم حذف هذا الموضوع قريبًا، وبمجرد الحذف لن يمكن استعادته، يرجى التحلي بالحذر.",
"confirmRemoveUnstarred": "سيتم حذف المواضيع غير المحفوظة قريبًا، وبمجرد الحذف لن يمكن استعادتها، يرجى التحلي بالحذر.",
"defaultTitle": "الموضوع الافتراضي",
"guide": {
"desc": "انقر فوق زر الإرسال الأيسر لحفظ الجلسة الحالية كموضوع تاريخي وبدء جلسة جديدة",
"title": "قائمة المواضيع"
},
"openNewTopic": "فتح موضوع جديد",
"removeAll": "حذف جميع المواضيع",
"removeUnstarred": "حذف المواضيع غير المحفوظة",
"saveCurrentMessages": "حفظ الجلسة الحالية كموضوع",
"searchPlaceholder": "البحث في المواضيع...",
"title": "الموضوع"
},
"translate": {
"action": "ترجمة",
"clear": "مسح الترجمة"
},
"tts": {
"action": "قراءة صوتية",
"clear": "مسح الصوت"
},
"updateAgent": "تحديث معلومات المساعد",
"upload": {
"actionTooltip": "تحميل الصورة",
"dragDesc": "اسحب الملفات إلى هنا، يدعم تحميل عدة صور. اضغط على Shift لإرسال الصور مباشرة",
"dragTitle": "تحميل الصورة"
}
}
+114
View File
@@ -0,0 +1,114 @@
{
"about": "حول",
"advanceSettings": "إعدادات متقدمة",
"agentMaxToken": "أقصى طول للجلسة",
"agentModel": "النموذج",
"agentProfile": "ملف المساعد",
"appInitializing": "جاري تهيئة LobeChat، يرجى الانتظار ...",
"archive": "أرشيف",
"autoGenerate": "توليد تلقائي",
"autoGenerateTooltip": "إكمال تلقائي بناءً على الكلمات المقترحة لوصف المساعد",
"cancel": "إلغاء",
"changelog": "سجل التغييرات",
"close": "إغلاق",
"confirmRemoveSessionItemAlert": "سيتم حذف هذا المساعد قريبًا، وبمجرد الحذف لن يمكن استعادته، يرجى تأكيد الإجراء",
"copy": "نسخ",
"copySuccess": "تم النسخ بنجاح",
"defaultAgent": "مساعد افتراضي",
"defaultSession": "جلسة افتراضية",
"delete": "حذف",
"duplicate": "إنشاء نسخة",
"edit": "تحرير",
"export": "تصدير الإعدادات",
"exportType": {
"agent": "تصدير إعدادات المساعد",
"agentWithMessage": "تصدير المساعد والرسائل",
"all": "تصدير الإعدادات العامة وجميع بيانات المساعد",
"allAgent": "تصدير جميع إعدادات المساعد",
"allAgentWithMessage": "تصدير جميع المساعدين والرسائل",
"globalSetting": "تصدير الإعدادات العامة"
},
"feedback": "تقديم ملاحظات",
"historyRange": "نطاق التاريخ",
"import": "استيراد الإعدادات",
"importModal": {
"finish": {
"onlySettings": "تم استيراد إعدادات النظام بنجاح",
"start": "ابدأ الاستخدام",
"subTitle": "تم استيراد البيانات بنجاح، وقت الاستيراد {{duration}} ثانية. تفاصيل الاستيراد كالتالي:",
"title": "اكتمال عملية الاستيراد"
},
"loading": "جاري استيراد البيانات، يرجى الانتظار...",
"result": {
"added": "تمت الإضافة بنجاح",
"errors": "حدثت أخطاء أثناء الاستيراد",
"messages": "الرسائل",
"sessions": "الجلسات",
"skips": "التخطيات",
"topics": "المواضيع",
"type": "نوع البيانات"
},
"title": "استيراد البيانات"
},
"lang": {
"bn": "البنغالية",
"cs-CZ": "التشيكية",
"da-DK": "الدنماركية",
"de-DE": "الألمانية",
"el-GR": "اليونانية",
"en": "الإنجليزية",
"en-US": "الإنجليزية",
"es-ES": "الإسبانية",
"fi-FI": "الفنلندية",
"fr-FR": "الفرنسية",
"hi-IN": "الهندية",
"hu-HU": "الهنغارية",
"id-ID": "الإندونيسية",
"it-IT": "الإيطالية",
"ja-JP": "اليابانية",
"ko-KR": "الكورية",
"nl-NL": "الهولندية",
"no-NO": "النرويجية",
"pl-PL": "البولندية",
"pt-BR": "البرتغالية",
"pt-PT": "البرتغالية",
"ro-RO": "الرومانية",
"ru-RU": "الروسية",
"sk-SK": "السلوفاكية",
"sr-RS": "الصربية",
"sv-SE": "السويدية",
"th-TH": "التايلاندية",
"tr-TR": "التركية",
"uk-UA": "الأوكرانية",
"vi-VN": "الفيتنامية",
"zh": "الصينية المبسطة",
"zh-CN": "الصينية المبسطة",
"zh-TW": "الصينية التقليدية"
},
"layoutInitializing": "جاري تحميل التخطيط...",
"noDescription": "لا توجد وصف",
"ok": "موافق",
"password": "كلمة المرور",
"pin": "تثبيت في الأعلى",
"pinOff": "إلغاء التثبيت",
"regenerate": "إعادة توليد",
"rename": "إعادة تسمية",
"reset": "إعادة تعيين",
"retry": "إعادة المحاولة",
"send": "إرسال",
"setting": "الإعدادات",
"share": "مشاركة",
"stop": "إيقاف",
"tab": {
"chat": "الدردشة",
"market": "الاكتشاف",
"setting": "الإعدادات"
},
"temp": "مؤقت",
"updateAgent": "تحديث معلومات الوكيل",
"upgradeVersion": {
"action": "ترقية",
"hasNew": "يوجد تحديث متاح",
"newVersion": "هناك إصدار جديد متاح: {{version}}"
}
}
+72
View File
@@ -0,0 +1,72 @@
{
"pluginSettings": {
"desc": "أكمل الإعدادات التالية لبدء استخدام هذا المكون الإضافي",
"title": "تكوين مكون الإضافة {{name}}"
},
"response": {
"400": "عذرًا، الخادم غير قادر على فهم طلبك، يرجى التحقق من صحة معلمات الطلب الخاصة بك",
"401": "عذرًا، رفض الخادم طلبك، قد يكون بسبب صلاحياتك غير الكافية أو عدم تقديم التحقق من الهوية الصالحة",
"403": "عذرًا، رفض الخادم طلبك، ليس لديك إذن للوصول إلى هذا المحتوى",
"404": "عذرًا، الخادم لا يمكنه العثور على الصفحة أو المورد المطلوب، يرجى التحقق من صحة عنوان URL الخاص بك",
"405": "عذرًا، الخادم لا يدعم طريقة الطلب المستخدمة، يرجى التحقق من صحة طريقة الطلب الخاصة بك",
"406": "عذرًا، الخادم غير قادر على استكمال الطلب وفقًا لخصائص المحتوى التي طلبتها",
"407": "عذرًا، تحتاج إلى مصادقة الوكيل لمتابعة هذا الطلب",
"408": "عذرًا، تجاوز الخادم الوقت المحدد في انتظار الطلب، يرجى التحقق من اتصالك بالشبكة والمحاولة مرة أخرى",
"409": "عذرًا، يوجد تضارب في الطلب الذي لا يمكن معالجته، قد يكون بسبب عدم توافق حالة المورد مع الطلب",
"410": "عذرًا، تمت إزالة المورد الذي طلبته بشكل دائم ولا يمكن العثور عليه",
"411": "عذرًا، الخادم غير قادر على معالجة الطلب الذي لا يحتوي على طول محتوى صالح",
"412": "عذرًا، لم يتم تلبية شروط الخادم الجانبية لطلبك ولا يمكن استكمال الطلب",
"413": "عذرًا، حجم بيانات طلبك كبير جدًا والخادم غير قادر على معالجته",
"414": "عذرًا، طول عنوان URI الخاص بطلبك كبير جدًا والخادم غير قادر على معالجته",
"415": "عذرًا، الخادم غير قادر على معالجة تنسيق الوسائط المرفقة بالطلب",
"416": "عذرًا، الخادم غير قادر على تلبية نطاق الطلب الذي قدمته",
"417": "عذرًا، الخادم غير قادر على تلبية قيم توقعاتك",
"422": "عذرًا، الطلب لديه تنسيق صحيح، ولكن بسبب وجود أخطاء دلالية، لا يمكن الاستجابة",
"423": "عذرًا، تم قفل المورد الذي طلبته",
"424": "عذرًا، بسبب فشل الطلب السابق، لا يمكن استكمال الطلب الحالي",
"426": "عذرًا، يتطلب الخادم ترقية عميلك إلى إصدار بروتوكول أعلى",
"428": "عذرًا، يتطلب الخادم شروطًا مسبقة، ويجب أن يحتوي طلبك على رؤوس الشروط الصحيحة",
"429": "عذرًا، طلبك كثير جدًا والخادم متعب قليلاً، يرجى المحاولة مرة أخرى لاحقًا",
"431": "عذرًا، حقول رأس الطلب الخاصة بك كبيرة جدًا والخادم غير قادر على معالجتها",
"451": "عذرًا، بسبب الأسباب القانونية، يرفض الخادم توفير هذا المورد",
"500": "عذرًا، يبدو أن الخادم واجه بعض الصعوبات ولا يمكنه حاليًا استكمال طلبك، يرجى المحاولة مرة أخرى لاحقًا",
"502": "عذرًا، يبدو أن الخادم قد ضل الطريق ولا يمكنه حاليًا تقديم الخدمة، يرجى المحاولة مرة أخرى لاحقًا",
"503": "عذرًا، الخادم غير قادر حاليًا على معالجة طلبك، قد يكون بسبب الحمل الزائد أو الصيانة الجارية، يرجى المحاولة مرة أخرى لاحقًا",
"504": "عذرًا، الخادم لم ينتظر ردًا من الخادم الأصلي، يرجى المحاولة مرة أخرى لاحقًا",
"InvalidAccessCode": "كلمة المرور غير صحيحة أو فارغة، يرجى إدخال كلمة مرور الوصول الصحيحة أو إضافة مفتاح API الخاص بك",
"NoAPIKey": "مفتاح API الخاص بـ OpenAI فارغ، يرجى إضافة مفتاح API الخاص بـ OpenAI",
"OpenAIBizError": "حدث خطأ في طلب خدمة OpenAI، يرجى التحقق من المعلومات أدناه وإعادة المحاولة",
"PluginApiNotFound": "عذرًا، لا يوجد API للإضافة في وصف الإضافة، يرجى التحقق من تطابق طريقة الطلب الخاصة بك مع API الوصف",
"PluginApiParamsError": "عذرًا، فشلت التحقق من صحة معلمات الطلب للإضافة، يرجى التحقق من تطابق المعلمات مع معلومات الوصف",
"PluginGatewayError": "عذرًا، حدث خطأ في بوابة الإضافة، يرجى التحقق من تكوين بوابة الإضافة",
"PluginManifestInvalid": "عذرًا، فشلت التحقق من صحة وصف الإضافة، يرجى التحقق من تنسيق وصف الإضافة",
"PluginManifestNotFound": "عذرًا، لم يتم العثور على وصف الإضافة (manifest.json) في الخادم، يرجى التحقق من صحة عنوان ملف وصف الإضافة",
"PluginMarketIndexInvalid": "عذرًا، فشلت التحقق من صحة فهرس الإضافات، يرجى التحقق من تنسيق ملف الفهرس",
"PluginMarketIndexNotFound": "عذرًا، لم يتم العثور على فهرس الإضافات في الخادم، يرجى التحقق من صحة عنوان الفهرس",
"PluginMetaInvalid": "عذرًا، فشلت التحقق من صحة بيانات الإضافة، يرجى التحقق من تنسيق بيانات الإضافة",
"PluginMetaNotFound": "عذرًا، لم يتم العثور على معلومات تكوين الإضافة في الفهرس",
"PluginOpenApiInitError": "عذرًا، فشل تهيئة عميل OpenAPI، يرجى التحقق من معلومات تكوين OpenAPI",
"PluginServerError": "خطأ في استجابة الخادم لطلب الإضافة، يرجى التحقق من ملف وصف الإضافة وتكوين الإضافة وتنفيذ الخادم وفقًا لمعلومات الخطأ أدناه",
"PluginSettingsInvalid": "تحتاج هذه الإضافة إلى تكوين صحيح قبل الاستخدام، يرجى التحقق من صحة تكوينك"
},
"stt": {
"responseError": "فشل طلب الخدمة، يرجى التحقق من الإعدادات أو إعادة المحاولة"
},
"tts": {
"responseError": "فشل طلب الخدمة، يرجى التحقق من الإعدادات أو إعادة المحاولة"
},
"unlock": {
"apikey": {
"addProxyUrl": "إضافة عنوان الوكيل لـ OpenAI (اختياري)",
"description": "قم بإدخال مفتاح OpenAI API الخاص بك لبدء الجلسة. لن يتم تسجيل مفتاح الخاص بك من قبل التطبيق",
"title": "استخدام مفتاح API مخصص"
},
"closeMessage": "إغلاق الرسالة",
"confirm": "تأكيد وإعادة المحاولة",
"password": {
"description": "قام المسؤول بتشفير التطبيق، قم بإدخال كلمة مرور التطبيق لفتح التطبيق. يتعين إدخال كلمة المرور مرة واحدة فقط",
"placeholder": "الرجاء إدخال كلمة المرور",
"title": "إدخال كلمة المرور لفتح التطبيق"
}
}
}
+30
View File
@@ -0,0 +1,30 @@
{
"addAgent": "إضافة وكيل",
"guide": {
"func1": {
"desc1": "في نافذة الدردشة، انتقل إلى صفحة إعدادات الوكيل التي ترغب في تقديمها من الزاوية اليمنى العلوية.",
"desc2": "انقر فوق زر تقديم إلى سوق الوكلاء في الزاوية اليمنى العلوية.",
"tag": "الطريقة الأولى",
"title": "تقديم عبر LobeChat"
},
"func2": {
"button": "انتقل إلى مستودع وكلاء Github",
"desc": "إذا كنت ترغب في إضافة الوكيل إلى الفهرس، يرجى استخدام agent-template.json أو agent-template-full.json لإنشاء إدخال في دليل plugins، وكتابة وصف موجز ووضع علامات بشكل مناسب، ثم إنشاء طلب سحب.",
"tag": "الطريقة الثانية",
"title": "تقديم عبر Github"
}
},
"search": {
"placeholder": "ابحث عن اسم الوكيل أو وصفه أو كلمات رئيسية..."
},
"sidebar": {
"comment": "منطقة النقاش",
"prompt": "كلمة تلميح",
"title": "تفاصيل الوكيل"
},
"submitAgent": "تقديم الوكيل",
"title": {
"allAgents": "جميع الوكلاء",
"recentSubmits": "الإضافات الأخيرة"
}
}
+45
View File
@@ -0,0 +1,45 @@
{
"dbV1": {
"action": {
"clearDB": "مسح البيانات المحلية",
"downloadBackup": "تنزيل نسخة احتياطية للبيانات",
"reUpgrade": "إعادة الترقية",
"start": "ابدأ الاستخدام",
"upgrade": "ترقية فورية"
},
"clear": {
"confirm": "سيتم مسح البيانات المحلية (دون تأثير على الإعدادات العامة)، يرجى التأكد من تنزيل نسخة احتياطية للبيانات."
},
"description": "في الإصدار الجديد، تم تحقيق قفزة هائلة في تخزين بيانات LobeChat. لذا نحتاج إلى ترقية البيانات القديمة لتوفير تجربة استخدام أفضل لك.",
"features": {
"capability": {
"desc": "بناءً على تقنية IndexedDB، يمكنها استيعاب رسائل المحادثات طوال حياتك",
"title": "سعة كبيرة"
},
"performance": {
"desc": "ملايين الرسائل مفهرسة تلقائيًا، استجابة فورية للاستعلامات بالميلي ثانية",
"title": "أداء عالي"
},
"use": {
"desc": "دعم البحث في العناوين والوصف والعلامات ومحتوى الرسائل وحتى النصوص المترجمة، مما يعزز كفاءة البحث اليومي بشكل كبير",
"title": "أكثر سهولة في الاستخدام"
}
},
"title": "تطور بيانات LobeChat",
"upgrade": {
"error": {
"subTitle": "نأسف جدًا، حدث استثناء أثناء عملية ترقية قاعدة البيانات. يرجى تجربة الحلول التالية: أ. مسح البيانات المحلية ثم إعادة استيراد بيانات النسخ الاحتياطي؛ ب. انقر على زر \"إعادة الترقية\".<br><br> إذا استمرت المشكلة، يرجى <1>تقديم مشكلتك</1>، سنقوم بمساعدتك في أقرب وقت ممكن",
"title": "فشل ترقية قاعدة البيانات"
},
"success": {
"subTitle": "تم ترقية قاعدة بيانات LobeChat إلى أحدث إصدار، ابدأ التجربة الآن",
"title": "نجاح ترقية قاعدة البيانات"
}
},
"upgradeTip": "من المتوقع أن تستغرق عملية الترقية حوالي 10-20 ثانية، يرجى عدم إغلاق LobeChat خلال عملية الترقية"
},
"migrateError": {
"missVersion": "البيانات المستوردة تفتقد رقم الإصدار، يرجى التحقق من الملف وإعادة المحاولة",
"noMigration": "لم يتم العثور على خطة هجرة تتوافق مع الإصدار الحالي، يرجى التحقق من رقم الإصدار وإعادة المحاولة. إذا استمرت المشكلة، يرجى تقديم ملاحظاتك"
}
}
+166
View File
@@ -0,0 +1,166 @@
{
"debug": {
"arguments": "متغيرات الاستدعاء",
"function_call": "استدعاء الدالة",
"off": "إيقاف التصحيح",
"on": "عرض معلومات استدعاء البرنامج المساعد",
"response": "الرد"
},
"detailModal": {
"info": {
"description": "وصف واجهة برمجة التطبيقات",
"name": "اسم واجهة برمجة التطبيقات"
},
"tabs": {
"info": "قدرات البرنامج المساعد",
"manifest": "ملف التثبيت",
"settings": "الإعدادات"
},
"title": "تفاصيل البرنامج المساعد"
},
"dev": {
"confirmDeleteDevPlugin": "سيتم حذف البرنامج المساعد المحلي، وبمجرد الحذف لن يمكن استعادته، هل ترغب في حذف هذا البرنامج المساعد؟",
"customParams": {
"useProxy": {
"label": "تثبيت عبر الوكيل (في حالة حدوث أخطاء الوصول عبر النطاقات المتقاطعة، يمكنك تجربة تفعيل هذا الخيار ثم إعادة التثبيت)"
}
},
"deleteSuccess": "تم حذف البرنامج المساعد بنجاح",
"manifest": {
"identifier": {
"desc": "العلامة المميزة للبرنامج المساعد",
"label": "المعرف"
},
"mode": {
"local": "تكوين بصري",
"local-tooltip": "غير مدعوم مؤقتًا",
"url": "رابط عبر الإنترنت"
},
"name": {
"desc": "عنوان البرنامج المساعد",
"label": "العنوان",
"placeholder": "محرك البحث"
}
},
"meta": {
"author": {
"desc": "مؤلف البرنامج المساعد",
"label": "المؤلف"
},
"avatar": {
"desc": "رمز البرنامج المساعد، يمكن استخدام الرموز التعبيرية أو روابط URL",
"label": "الرمز"
},
"description": {
"desc": "وصف البرنامج المساعد",
"label": "الوصف",
"placeholder": "البحث في محركات البحث للحصول على المعلومات"
},
"formFieldRequired": "هذا الحقل مطلوب",
"homepage": {
"desc": "صفحة البداية للبرنامج المساعد",
"label": "الصفحة الرئيسية"
},
"identifier": {
"desc": "العلامة المميزة للبرنامج المساعد، سيتم التعرف عليها تلقائيًا من خلال الملف التعريفي",
"errorDuplicate": "تكرار العلامة المميزة مع برنامج مساعد موجود، يرجى تعديل العلامة المميزة",
"label": "المعرف",
"pattenErrorMessage": "يمكن إدخال الأحرف الإنجليزية والأرقام والرمزين - و_ فقط"
},
"manifest": {
"desc": "سيقوم LobeChat بتثبيت البرنامج المساعد من خلال هذا الرابط",
"label": "ملف وصف البرنامج المساعد (Manifest) URL",
"preview": "معاينة الملف التعريفي",
"refresh": "تحديث"
},
"title": {
"desc": "عنوان البرنامج المساعد",
"label": "العنوان",
"placeholder": "محرك البحث"
}
},
"metaConfig": "تكوين معلومات البرنامج المساعد",
"modalDesc": "بعد إضافة البرنامج المساعد المخصص، يمكن استخدامه للتحقق من تطوير البرنامج المساعد، كما يمكن استخدامه مباشرة في الدردشة. للحصول على معلومات حول تطوير البرنامج المساعد، يرجى الرجوع إلى <1>وثائق التطوير↗</>",
"openai": {
"importUrl": "استيراد من رابط URL",
"schema": "مخطط"
},
"preview": {
"card": "معاينة عرض البرنامج المساعد",
"desc": "معاينة وصف البرنامج المساعد",
"title": "معاينة اسم البرنامج المساعد"
},
"save": "تثبيت البرنامج المساعد",
"saveSuccess": "تم حفظ إعدادات البرنامج المساعد بنجاح",
"tabs": {
"manifest": "قائمة وصف الوظائف (Manifest)",
"meta": "معلومات البرنامج المساعد"
},
"title": {
"create": "إضافة برنامج مساعد مخصص",
"edit": "تحرير برنامج مساعد مخصص"
},
"type": {
"lobe": "برنامج مساعد LobeChat",
"openai": "برنامج مساعد OpenAI"
},
"update": "تحديث",
"updateSuccess": "تم تحديث إعدادات البرنامج المساعد بنجاح"
},
"error": {
"fetchError": "فشل طلب الرابط المعطى للملف، يرجى التأكد من صحة الرابط والسماح بالوصول عبر النطاقات المختلفة",
"installError": "فشل تثبيت الإضافة {{name}}",
"manifestInvalid": "الملف غير مطابق للمواصفات، نتيجة التحقق: \n\n {{error}}",
"noManifest": "ملف الوصف غير موجود",
"openAPIInvalid": "فشل تحليل OpenAPI، الخطأ: \n\n {{error}}",
"reinstallError": "فشل تحديث الإضافة {{name}}",
"urlError": "الرابط لا يعيد محتوى بتنسيق JSON، يرجى التأكد من صحة الرابط"
},
"list": {
"item": {
"deprecated.title": "مهجور",
"local.config": "التكوين",
"local.title": "مخصص"
}
},
"loading": {
"content": "جاري استدعاء الإضافة...",
"plugin": "جاري تشغيل الإضافة..."
},
"pluginList": "قائمة الإضافات",
"plugins": {
"loading": "جاري فحص الأدوات...",
"unknown": "أداة غير معروفة"
},
"setting": "إعدادات الإضافة",
"settings": {
"indexUrl": {
"title": "فهرس السوق",
"tooltip": "غير مدعوم حاليا للتحرير عبر الإنترنت، يرجى ضبطه عند نشر المتغيرات البيئية"
},
"modalDesc": "بعد ضبط عنوان سوق الإضافات، يمكن استخدام سوق الإضافات المخصص",
"title": "ضبط سوق الإضافات"
},
"store": {
"actions": {
"confirmUninstall": "سيتم إلغاء تثبيت الإضافة، وسيتم مسح تكوين الإضافة، يرجى تأكيد العملية",
"detail": "التفاصيل",
"install": "تثبيت",
"manifest": "تحرير ملف التثبيت",
"settings": "الإعدادات",
"uninstall": "إلغاء التثبيت"
},
"communityPlugin": "مجتمع ثالث",
"customPlugin": "مخصص",
"empty": "لا توجد إضافات مثبتة حاليا",
"installAllPlugins": "تثبيت الكل",
"networkError": "فشل الحصول على متجر الإضافات، يرجى التحقق من الاتصال بالشبكة وإعادة المحاولة",
"placeholder": "ابحث عن اسم الإضافة أو الكلمات الرئيسية...",
"releasedAt": "صدر في {{createdAt}}",
"tabs": {
"all": "الكل",
"installed": "مثبتة"
},
"title": "متجر الإضافات"
}
}
+306
View File
@@ -0,0 +1,306 @@
{
"danger": {
"clear": {
"action": "مسح الآن",
"confirm": "هل تؤكد مسح جميع بيانات المحادثات؟",
"desc": "سيتم مسح جميع بيانات الجلسة بما في ذلك المساعد والملفات والرسائل والإضافات",
"success": "تم مسح جميع رسائل الجلسة",
"title": "مسح جميع رسائل الجلسة"
},
"reset": {
"action": "إعادة تعيين الآن",
"confirm": "هل تؤكد إعادة تعيين جميع الإعدادات؟",
"currentVersion": "الإصدار الحالي",
"desc": "إعادة تعيين جميع عناصر الإعدادات إلى القيم الافتراضية",
"title": "إعادة تعيين جميع الإعدادات"
}
},
"header": {
"global": "إعدادات عامة",
"session": "إعدادات الجلسة",
"sessionWithName": "إعدادات الجلسة · {{name}}"
},
"llm": {
"AzureOpenAI": {
"endpoint": {
"desc": "يمكن العثور على هذه القيمة في قسم 'المفتاح والنقطة النهائية' عند التحقق من الموارد في بوابة Azure",
"placeholder": "https://docs-test-001.openai.azure.com",
"title": "عنوان واجهة برمجة التطبيقات لـ Azure"
},
"models": {
"desc": "النماذج المدعومة",
"title": "قائمة النماذج"
},
"title": "إعدادات Azure OpenAI",
"token": {
"desc": "يمكن العثور على هذه القيمة في قسم 'المفتاح والنقطة النهائية' عند التحقق من الموارد في بوابة Azure. يمكن استخدام KEY1 أو KEY2",
"placeholder": "مفتاح واجهة برمجة التطبيقات لـ Azure",
"title": "مفتاح واجهة برمجة التطبيقات"
}
},
"OpenAI": {
"azureApiVersion": {
"desc": "إصدار واجهة برمجة التطبيقات لـ Azure، يتبع تنسيق YYYY-MM-DD، اطلع على [أحدث الإصدارات](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions)",
"fetch": "الحصول على القائمة",
"title": "إصدار واجهة برمجة التطبيقات لـ Azure"
},
"check": {
"button": "فحص",
"desc": "اختبار مفتاح واجهة البرمجة التطبيقية وعنوان الوكيل للتأكد من ملئهما بشكل صحيح",
"pass": "تم الفحص بنجاح",
"title": "فحص الاتصال"
},
"customModelName": {
"desc": "إضافة نموذج مخصص، يمكن استخدام فاصلة (,) للنماذج المتعددة",
"placeholder": "نموذج1،نموذج2،نموذج3",
"title": "اسم النموذج المخصص"
},
"endpoint": {
"desc": "بالإضافة إلى العنوان الافتراضي، يجب أن يتضمن http(s)://",
"placeholder": "https://api.openai.com/v1",
"title": "عنوان وكيل الواجهة"
},
"models": {
"count": "يدعم {{count}} نموذج",
"desc": "النماذج المدعومة",
"fetch": "الحصول على قائمة النماذج",
"notSupport": "Azure OpenAI غير مدعوم حالياً لعرض قائمة النماذج",
"notSupportTip": "يجب عليك التأكد بنفسك من تطابق اسم النموذج مع اسم النشر",
"refetch": "الحصول على قائمة النماذج مرة أخرى",
"title": "قائمة النماذج"
},
"title": "إعدادات OpenAI",
"token": {
"desc": "استخدام مفتاح OpenAI الخاص بك",
"placeholder": "مفتاح واجهة برمجة التطبيقات لـ OpenAI",
"title": "مفتاح واجهة برمجة التطبيقات"
},
"useAzure": {
"desc": "استخدام خدمة OpenAI المقدمة من Azure",
"fetch": "الحصول على القائمة",
"serverConfig": "المسؤول قام بتكوين خدمة Azure OpenAI على الخادم، ويتم منع التبديل",
"title": "استخدام Azure OpenAI"
}
},
"waitingForMore": "يتم <1>التخطيط لتوفير</1> المزيد من النماذج، ترقبوا المزيد ✨"
},
"plugin": {
"addTooltip": "إضافة البرنامج المساعد",
"clearDeprecated": "مسح البرامج المساعدة الغير صالحة",
"empty": "لا توجد برامج مساعدة مثبتة حاليًا، نرحب بك لزيارة <1>متجر البرامج المساعدة</1> للاستكشاف",
"installStatus": {
"deprecated": "تم إلغاء التثبيت"
},
"settings": {
"hint": "يرجى ملء الإعدادات التالية وفقًا للوصف",
"title": "إعدادات البرنامج المساعد {{id}}",
"tooltip": "إعدادات البرنامج المساعد"
},
"store": "متجر البرامج المساعد"
},
"settingAgent": {
"avatar": {
"title": "الصورة الرمزية"
},
"backgroundColor": {
"title": "لون الخلفية"
},
"description": {
"placeholder": "الرجاء إدخال وصف المساعد",
"title": "وصف المساعد"
},
"name": {
"placeholder": "الرجاء إدخال اسم المساعد",
"title": "الاسم"
},
"prompt": {
"placeholder": "الرجاء إدخال كلمة الإشارة للشخصية",
"title": "ضبط الشخصية"
},
"tag": {
"placeholder": "الرجاء إدخال العلامة",
"title": "العلامة"
},
"title": "معلومات المساعد"
},
"settingChat": {
"autoCreateTopicThreshold": {
"desc": "عند تجاوز عدد الرسائل الحالي هذا القيمة، سيتم إنشاء موضوع تلقائيًا",
"title": "عتبة إنشاء الموضوع التلقائي"
},
"chatStyleType": {
"title": "نوع نافذة الدردشة",
"type": {
"chat": "نمط المحادثة",
"docs": "نمط الوثائق"
}
},
"compressThreshold": {
"desc": "عندما يتجاوز عدد الرسائل التاريخية غير المضغوطة هذه القيمة، سيتم ضغطها",
"title": "عتبة ضغط طول الرسائل التاريخية"
},
"enableAutoCreateTopic": {
"desc": "هل يجب إنشاء موضوع تلقائيًا أثناء الدردشة، يسري ذلك فقط في المواضيع المؤقتة",
"title": "تمكين إنشاء الموضوع تلقائيًا"
},
"enableCompressThreshold": {
"title": "هل تريد تمكين عتبة ضغط طول الرسائل التاريخية"
},
"enableHistoryCount": {
"alias": "غير محدود",
"limited": "يحتوي فقط على {{number}} رسالة محادثة",
"title": "تحديد عدد الرسائل التاريخية",
"unlimited": "غير محدود"
},
"historyCount": {
"desc": "عدد الرسائل التي يتم إرفاقها في كل طلب (تشمل الأسئلة والأجوبة الجديدة. يُحسب كل سؤال وجواب كرسالة واحدة)",
"title": "عدد الرسائل المرفقة"
},
"inputTemplate": {
"desc": "سيتم ملء أحدث رسالة من المستخدم في هذا القالب",
"placeholder": "القالب المُعالج مسبقًا {{text}} سيتم استبداله بالمعلومات المُدخلة في الوقت الحقيقي",
"title": "معالجة مُدخلات المستخدم"
},
"title": "إعدادات الدردشة"
},
"settingModel": {
"enableMaxTokens": {
"title": "تمكين الحد الأقصى للردود"
},
"frequencyPenalty": {
"desc": "كلما زادت القيمة، زاد احتمال تقليل تكرار الكلمات",
"title": "عقوبة التكرار"
},
"maxTokens": {
"desc": "عدد الرموز الأقصى المستخدمة في التفاعل الواحد",
"title": "الحد الأقصى للردود"
},
"model": {
"desc": "نموذج ChatGPT",
"list": {
"gpt-3.5-turbo": "GPT 3.5",
"gpt-3.5-turbo-16k": "GPT 3.5 (16K)",
"gpt-4": "GPT 4",
"gpt-4-32k": "GPT 4 (32K)"
},
"title": "النموذج"
},
"presencePenalty": {
"desc": "كلما زادت القيمة، زاد احتمال التوسع في مواضيع جديدة",
"title": "جديد الحديث"
},
"temperature": {
"desc": "كلما زادت القيمة، زادت الردود عشوائية أكثر",
"title": "التباين",
"titleWithValue": "التباين {{value}}"
},
"title": "إعدادات النموذج",
"topP": {
"desc": "مشابه للتباين ولكن لا يجب تغييره مع التباين",
"title": "العينة الأساسية"
}
},
"settingPlugin": {
"title": "قائمة الإضافات"
},
"settingSystem": {
"accessCode": {
"desc": "قام المسؤول بتمكين الوصول المشفر",
"placeholder": "الرجاء إدخال كلمة المرور",
"title": "كلمة المرور"
},
"title": "إعدادات النظام"
},
"settingTTS": {
"openai": {
"sttModel": "نموذج تحويل النص إلى كلام من OpenAI",
"ttsModel": "نموذج توليد الكلام من OpenAI"
},
"showAllLocaleVoice": {
"desc": "إذا تم إيقافه، سيتم عرض مصادر الصوت الخاصة باللغة الحالية فقط",
"title": "عرض جميع مصادر الصوت للغات"
},
"stt": "إعدادات التحويل من الصوت إلى نص",
"sttAutoStop": {
"desc": "عند الإيقاف، لن يتم إيقاف تحويل الصوت إلى نص تلقائيًا، وسيتطلب الأمر النقر على زر الإيقاف يدويًا",
"title": "إيقاف تحويل الصوت إلى نص تلقائيًا"
},
"sttLocale": {
"desc": "لغة الصوت المدخلة، يمكن أن يساعد هذا الخيار في زيادة دقة تحويل الصوت إلى نص",
"title": "لغة تحويل الصوت إلى نص"
},
"sttService": {
"desc": "حيث يكون المتصفح هو خدمة التحويل الصوتي الأصلية",
"title": "خدمة تحويل الصوت إلى نص"
},
"title": "خدمة الصوت",
"tts": "إعدادات توليد الكلام",
"ttsService": {
"desc": "إذا كنت تستخدم خدمة توليد الكلام من OpenAI، يجب التأكد من تمكين خدمة نموذج OpenAI",
"title": "خدمة توليد الكلام"
},
"voice": {
"desc": "حدد صوتًا للمساعد الحالي، تختلف مصادر الصوت المدعومة بحسب خدمة توليد الكلام",
"preview": "معاينة الصوت",
"title": "مصدر توليد الكلام"
}
},
"settingTheme": {
"avatar": {
"title": "الصورة الرمزية"
},
"fontSize": {
"desc": "حجم الخط لمحتوى المحادثة",
"marks": {
"large": "كبير",
"normal": "عادي",
"small": "صغير"
},
"title": "حجم الخط"
},
"lang": {
"autoMode": "متابعة النظام",
"title": "اللغة"
},
"neutralColor": {
"desc": "تخصيص درجات اللون الرمادي للاتجاهات المختلفة",
"title": "اللون الأحادي"
},
"primaryColor": {
"desc": "تخصيص لون السمة الرئيسي",
"title": "لون السمة"
},
"themeMode": {
"auto": "تلقائي",
"dark": "داكن",
"light": "فاتح",
"title": "السمة"
},
"title": "إعدادات السمة"
},
"submitAgentModal": {
"button": "تقديم المساعد",
"identifier": "معرف المساعد",
"metaMiss": "يرجى استكمال معلومات المساعد قبل التقديم، يجب أن تتضمن الاسم والوصف والعلامة",
"placeholder": "الرجاء إدخال معرف المساعد، يجب أن يكون فريدًا، مثل تطوير الويب",
"tooltips": "مشاركة في سوق المساعدين"
},
"tab": {
"agent": "المساعد الافتراضي",
"common": "إعدادات عامة",
"llm": "نموذج اللغة",
"tts": "خدمة الكلام"
},
"tools": {
"builtins": {
"groupName": "الامتدادات المدمجة"
},
"plugins": {
"enabled": "ممكّنة {{num}}",
"groupName": "الإضافات",
"noEnabled": "لا توجد إضافات ممكّنة حاليًا",
"store": "متجر الإضافات"
},
"title": "أدوات الامتداد"
}
}
+9
View File
@@ -0,0 +1,9 @@
{
"dalle": {
"autoGenerate": "توليد تلقائي",
"downloading": "صلاحية روابط الصور المُولَّدة بواسطة DallE3 تدوم ساعة واحدة فقط، يتم تحميل الصور إلى الجهاز المحلي...",
"generate": "توليد",
"generating": "جارٍ التوليد...",
"images": "الصور:"
}
}
+14
View File
@@ -0,0 +1,14 @@
{
"button": {
"import": "استيراد التكوين",
"start": "ابدأ الآن"
},
"header": "مرحبًا بكم في الاستخدام",
"pickAgent": "أو اختيار قالب مساعد من القائمة التالية",
"skip": "تخطى الإنشاء",
"slogan": {
"desc1": "قم بتشغيل عقلك الجماعي وأشعل شرارة التفكير. مساعدك الذكي، دائمًا موجود.",
"desc2": "أنشئ مساعدك الأول ولنبدأ!",
"title": "امنح نفسك عقلاً أذكى"
}
}
+2
View File
@@ -117,6 +117,7 @@
"remark": "^14",
"remark-gfm": "^3",
"remark-html": "^15",
"rtl-detect": "^1.1.2",
"semver": "^7",
"sharp": "0.33.1",
"swr": "^2",
@@ -148,6 +149,7 @@
"@types/node": "^20",
"@types/react": "^18",
"@types/react-dom": "^18",
"@types/rtl-detect": "^1.0.3",
"@types/semver": "^7",
"@types/systemjs": "^6",
"@types/ua-parser-js": "^0.7",
+3 -2
View File
@@ -1,6 +1,7 @@
import { Viewport } from 'next';
import { cookies } from 'next/headers';
import { PropsWithChildren } from 'react';
import { isRtlLang } from 'rtl-detect';
import Analytics from '@/components/Analytics';
import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
@@ -20,9 +21,9 @@ const RootLayout = ({ children }: PropsWithChildren) => {
const neutralColor = cookieStore.get(LOBE_THEME_NEUTRAL_COLOR);
const primaryColor = cookieStore.get(LOBE_THEME_PRIMARY_COLOR);
const lang = cookieStore.get(LOBE_LOCALE_COOKIE);
const direction = isRtlLang(lang?.value || DEFAULT_LANG) ? 'rtl' : 'ltr';
return (
<html lang={lang?.value || DEFAULT_LANG} suppressHydrationWarning>
<html dir={direction} lang={lang?.value || DEFAULT_LANG} suppressHydrationWarning>
<body>
<StyleRegistry>
<Layout
+8 -1
View File
@@ -2,6 +2,7 @@ import i18n from 'i18next';
import LanguageDetector from 'i18next-browser-languagedetector';
import resourcesToBackend from 'i18next-resources-to-backend';
import { initReactI18next } from 'react-i18next';
import { isRtlLang } from 'rtl-detect';
import { getClientConfig } from '@/config/client';
import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
@@ -23,7 +24,13 @@ export const createI18nNext = (lang?: string) => {
return import(`@/../locales/${normalizeLocale(lng)}/${ns}.json`);
}),
);
// Dynamically set HTML direction on language change
instance.on('languageChanged', (lng) => {
if (typeof window !== 'undefined') {
const direction = isRtlLang(lng) ? 'rtl' : 'ltr';
document.documentElement.dir = direction;
}
});
return {
init: () =>
instance.init({
+1
View File
@@ -51,6 +51,7 @@ export default {
title: '导入数据',
},
lang: {
'ar': '阿拉伯语',
'bn': '孟加拉语',
'cs-CZ': '捷克语',
'da-DK': '丹麦语',
+5
View File
@@ -1,6 +1,7 @@
import resources from './default';
export const locales = [
'ar',
'de-DE',
'en-US',
'es-ES',
@@ -41,6 +42,10 @@ type LocaleOptions = {
}[];
export const localeOptions: LocaleOptions = [
{
label: 'العربية',
value: 'ar',
},
{
label: '简体中文',
value: 'zh-CN',