@lobehub/chat 0.119.12 → 0.120.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.i18nrc.js +1 -0
- package/CHANGELOG.md +50 -0
- package/LICENSE +1 -1
- package/README.md +8 -8
- package/README.zh-CN.md +50 -7
- package/locales/ar/chat.json +96 -0
- package/locales/ar/common.json +114 -0
- package/locales/ar/error.json +72 -0
- package/locales/ar/market.json +30 -0
- package/locales/ar/migration.json +45 -0
- package/locales/ar/plugin.json +166 -0
- package/locales/ar/setting.json +306 -0
- package/locales/ar/tool.json +9 -0
- package/locales/ar/welcome.json +14 -0
- package/package.json +5 -3
- package/src/app/home/Redirect.tsx +4 -0
- package/src/app/layout.tsx +3 -2
- package/src/database/models/message.ts +6 -0
- package/src/features/Conversation/Actions/Function.tsx +2 -2
- package/src/locales/create.ts +8 -1
- package/src/locales/default/common.ts +1 -0
- package/src/locales/resources.ts +5 -0
- package/src/services/__tests__/message.test.ts +3 -4
- package/src/services/message.ts +2 -1
- package/vercel.json +1 -1
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"debug": {
|
|
3
|
+
"arguments": "متغيرات الاستدعاء",
|
|
4
|
+
"function_call": "استدعاء الدالة",
|
|
5
|
+
"off": "إيقاف التصحيح",
|
|
6
|
+
"on": "عرض معلومات استدعاء البرنامج المساعد",
|
|
7
|
+
"response": "الرد"
|
|
8
|
+
},
|
|
9
|
+
"detailModal": {
|
|
10
|
+
"info": {
|
|
11
|
+
"description": "وصف واجهة برمجة التطبيقات",
|
|
12
|
+
"name": "اسم واجهة برمجة التطبيقات"
|
|
13
|
+
},
|
|
14
|
+
"tabs": {
|
|
15
|
+
"info": "قدرات البرنامج المساعد",
|
|
16
|
+
"manifest": "ملف التثبيت",
|
|
17
|
+
"settings": "الإعدادات"
|
|
18
|
+
},
|
|
19
|
+
"title": "تفاصيل البرنامج المساعد"
|
|
20
|
+
},
|
|
21
|
+
"dev": {
|
|
22
|
+
"confirmDeleteDevPlugin": "سيتم حذف البرنامج المساعد المحلي، وبمجرد الحذف لن يمكن استعادته، هل ترغب في حذف هذا البرنامج المساعد؟",
|
|
23
|
+
"customParams": {
|
|
24
|
+
"useProxy": {
|
|
25
|
+
"label": "تثبيت عبر الوكيل (في حالة حدوث أخطاء الوصول عبر النطاقات المتقاطعة، يمكنك تجربة تفعيل هذا الخيار ثم إعادة التثبيت)"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"deleteSuccess": "تم حذف البرنامج المساعد بنجاح",
|
|
29
|
+
"manifest": {
|
|
30
|
+
"identifier": {
|
|
31
|
+
"desc": "العلامة المميزة للبرنامج المساعد",
|
|
32
|
+
"label": "المعرف"
|
|
33
|
+
},
|
|
34
|
+
"mode": {
|
|
35
|
+
"local": "تكوين بصري",
|
|
36
|
+
"local-tooltip": "غير مدعوم مؤقتًا",
|
|
37
|
+
"url": "رابط عبر الإنترنت"
|
|
38
|
+
},
|
|
39
|
+
"name": {
|
|
40
|
+
"desc": "عنوان البرنامج المساعد",
|
|
41
|
+
"label": "العنوان",
|
|
42
|
+
"placeholder": "محرك البحث"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"meta": {
|
|
46
|
+
"author": {
|
|
47
|
+
"desc": "مؤلف البرنامج المساعد",
|
|
48
|
+
"label": "المؤلف"
|
|
49
|
+
},
|
|
50
|
+
"avatar": {
|
|
51
|
+
"desc": "رمز البرنامج المساعد، يمكن استخدام الرموز التعبيرية أو روابط URL",
|
|
52
|
+
"label": "الرمز"
|
|
53
|
+
},
|
|
54
|
+
"description": {
|
|
55
|
+
"desc": "وصف البرنامج المساعد",
|
|
56
|
+
"label": "الوصف",
|
|
57
|
+
"placeholder": "البحث في محركات البحث للحصول على المعلومات"
|
|
58
|
+
},
|
|
59
|
+
"formFieldRequired": "هذا الحقل مطلوب",
|
|
60
|
+
"homepage": {
|
|
61
|
+
"desc": "صفحة البداية للبرنامج المساعد",
|
|
62
|
+
"label": "الصفحة الرئيسية"
|
|
63
|
+
},
|
|
64
|
+
"identifier": {
|
|
65
|
+
"desc": "العلامة المميزة للبرنامج المساعد، سيتم التعرف عليها تلقائيًا من خلال الملف التعريفي",
|
|
66
|
+
"errorDuplicate": "تكرار العلامة المميزة مع برنامج مساعد موجود، يرجى تعديل العلامة المميزة",
|
|
67
|
+
"label": "المعرف",
|
|
68
|
+
"pattenErrorMessage": "يمكن إدخال الأحرف الإنجليزية والأرقام والرمزين - و_ فقط"
|
|
69
|
+
},
|
|
70
|
+
"manifest": {
|
|
71
|
+
"desc": "سيقوم LobeChat بتثبيت البرنامج المساعد من خلال هذا الرابط",
|
|
72
|
+
"label": "ملف وصف البرنامج المساعد (Manifest) URL",
|
|
73
|
+
"preview": "معاينة الملف التعريفي",
|
|
74
|
+
"refresh": "تحديث"
|
|
75
|
+
},
|
|
76
|
+
"title": {
|
|
77
|
+
"desc": "عنوان البرنامج المساعد",
|
|
78
|
+
"label": "العنوان",
|
|
79
|
+
"placeholder": "محرك البحث"
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"metaConfig": "تكوين معلومات البرنامج المساعد",
|
|
83
|
+
"modalDesc": "بعد إضافة البرنامج المساعد المخصص، يمكن استخدامه للتحقق من تطوير البرنامج المساعد، كما يمكن استخدامه مباشرة في الدردشة. للحصول على معلومات حول تطوير البرنامج المساعد، يرجى الرجوع إلى <1>وثائق التطوير↗</>",
|
|
84
|
+
"openai": {
|
|
85
|
+
"importUrl": "استيراد من رابط URL",
|
|
86
|
+
"schema": "مخطط"
|
|
87
|
+
},
|
|
88
|
+
"preview": {
|
|
89
|
+
"card": "معاينة عرض البرنامج المساعد",
|
|
90
|
+
"desc": "معاينة وصف البرنامج المساعد",
|
|
91
|
+
"title": "معاينة اسم البرنامج المساعد"
|
|
92
|
+
},
|
|
93
|
+
"save": "تثبيت البرنامج المساعد",
|
|
94
|
+
"saveSuccess": "تم حفظ إعدادات البرنامج المساعد بنجاح",
|
|
95
|
+
"tabs": {
|
|
96
|
+
"manifest": "قائمة وصف الوظائف (Manifest)",
|
|
97
|
+
"meta": "معلومات البرنامج المساعد"
|
|
98
|
+
},
|
|
99
|
+
"title": {
|
|
100
|
+
"create": "إضافة برنامج مساعد مخصص",
|
|
101
|
+
"edit": "تحرير برنامج مساعد مخصص"
|
|
102
|
+
},
|
|
103
|
+
"type": {
|
|
104
|
+
"lobe": "برنامج مساعد LobeChat",
|
|
105
|
+
"openai": "برنامج مساعد OpenAI"
|
|
106
|
+
},
|
|
107
|
+
"update": "تحديث",
|
|
108
|
+
"updateSuccess": "تم تحديث إعدادات البرنامج المساعد بنجاح"
|
|
109
|
+
},
|
|
110
|
+
"error": {
|
|
111
|
+
"fetchError": "فشل طلب الرابط المعطى للملف، يرجى التأكد من صحة الرابط والسماح بالوصول عبر النطاقات المختلفة",
|
|
112
|
+
"installError": "فشل تثبيت الإضافة {{name}}",
|
|
113
|
+
"manifestInvalid": "الملف غير مطابق للمواصفات، نتيجة التحقق: \n\n {{error}}",
|
|
114
|
+
"noManifest": "ملف الوصف غير موجود",
|
|
115
|
+
"openAPIInvalid": "فشل تحليل OpenAPI، الخطأ: \n\n {{error}}",
|
|
116
|
+
"reinstallError": "فشل تحديث الإضافة {{name}}",
|
|
117
|
+
"urlError": "الرابط لا يعيد محتوى بتنسيق JSON، يرجى التأكد من صحة الرابط"
|
|
118
|
+
},
|
|
119
|
+
"list": {
|
|
120
|
+
"item": {
|
|
121
|
+
"deprecated.title": "مهجور",
|
|
122
|
+
"local.config": "التكوين",
|
|
123
|
+
"local.title": "مخصص"
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
"loading": {
|
|
127
|
+
"content": "جاري استدعاء الإضافة...",
|
|
128
|
+
"plugin": "جاري تشغيل الإضافة..."
|
|
129
|
+
},
|
|
130
|
+
"pluginList": "قائمة الإضافات",
|
|
131
|
+
"plugins": {
|
|
132
|
+
"loading": "جاري فحص الأدوات...",
|
|
133
|
+
"unknown": "أداة غير معروفة"
|
|
134
|
+
},
|
|
135
|
+
"setting": "إعدادات الإضافة",
|
|
136
|
+
"settings": {
|
|
137
|
+
"indexUrl": {
|
|
138
|
+
"title": "فهرس السوق",
|
|
139
|
+
"tooltip": "غير مدعوم حاليا للتحرير عبر الإنترنت، يرجى ضبطه عند نشر المتغيرات البيئية"
|
|
140
|
+
},
|
|
141
|
+
"modalDesc": "بعد ضبط عنوان سوق الإضافات، يمكن استخدام سوق الإضافات المخصص",
|
|
142
|
+
"title": "ضبط سوق الإضافات"
|
|
143
|
+
},
|
|
144
|
+
"store": {
|
|
145
|
+
"actions": {
|
|
146
|
+
"confirmUninstall": "سيتم إلغاء تثبيت الإضافة، وسيتم مسح تكوين الإضافة، يرجى تأكيد العملية",
|
|
147
|
+
"detail": "التفاصيل",
|
|
148
|
+
"install": "تثبيت",
|
|
149
|
+
"manifest": "تحرير ملف التثبيت",
|
|
150
|
+
"settings": "الإعدادات",
|
|
151
|
+
"uninstall": "إلغاء التثبيت"
|
|
152
|
+
},
|
|
153
|
+
"communityPlugin": "مجتمع ثالث",
|
|
154
|
+
"customPlugin": "مخصص",
|
|
155
|
+
"empty": "لا توجد إضافات مثبتة حاليا",
|
|
156
|
+
"installAllPlugins": "تثبيت الكل",
|
|
157
|
+
"networkError": "فشل الحصول على متجر الإضافات، يرجى التحقق من الاتصال بالشبكة وإعادة المحاولة",
|
|
158
|
+
"placeholder": "ابحث عن اسم الإضافة أو الكلمات الرئيسية...",
|
|
159
|
+
"releasedAt": "صدر في {{createdAt}}",
|
|
160
|
+
"tabs": {
|
|
161
|
+
"all": "الكل",
|
|
162
|
+
"installed": "مثبتة"
|
|
163
|
+
},
|
|
164
|
+
"title": "متجر الإضافات"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
{
|
|
2
|
+
"danger": {
|
|
3
|
+
"clear": {
|
|
4
|
+
"action": "مسح الآن",
|
|
5
|
+
"confirm": "هل تؤكد مسح جميع بيانات المحادثات؟",
|
|
6
|
+
"desc": "سيتم مسح جميع بيانات الجلسة بما في ذلك المساعد والملفات والرسائل والإضافات",
|
|
7
|
+
"success": "تم مسح جميع رسائل الجلسة",
|
|
8
|
+
"title": "مسح جميع رسائل الجلسة"
|
|
9
|
+
},
|
|
10
|
+
"reset": {
|
|
11
|
+
"action": "إعادة تعيين الآن",
|
|
12
|
+
"confirm": "هل تؤكد إعادة تعيين جميع الإعدادات؟",
|
|
13
|
+
"currentVersion": "الإصدار الحالي",
|
|
14
|
+
"desc": "إعادة تعيين جميع عناصر الإعدادات إلى القيم الافتراضية",
|
|
15
|
+
"title": "إعادة تعيين جميع الإعدادات"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"header": {
|
|
19
|
+
"global": "إعدادات عامة",
|
|
20
|
+
"session": "إعدادات الجلسة",
|
|
21
|
+
"sessionWithName": "إعدادات الجلسة · {{name}}"
|
|
22
|
+
},
|
|
23
|
+
"llm": {
|
|
24
|
+
"AzureOpenAI": {
|
|
25
|
+
"endpoint": {
|
|
26
|
+
"desc": "يمكن العثور على هذه القيمة في قسم 'المفتاح والنقطة النهائية' عند التحقق من الموارد في بوابة Azure",
|
|
27
|
+
"placeholder": "https://docs-test-001.openai.azure.com",
|
|
28
|
+
"title": "عنوان واجهة برمجة التطبيقات لـ Azure"
|
|
29
|
+
},
|
|
30
|
+
"models": {
|
|
31
|
+
"desc": "النماذج المدعومة",
|
|
32
|
+
"title": "قائمة النماذج"
|
|
33
|
+
},
|
|
34
|
+
"title": "إعدادات Azure OpenAI",
|
|
35
|
+
"token": {
|
|
36
|
+
"desc": "يمكن العثور على هذه القيمة في قسم 'المفتاح والنقطة النهائية' عند التحقق من الموارد في بوابة Azure. يمكن استخدام KEY1 أو KEY2",
|
|
37
|
+
"placeholder": "مفتاح واجهة برمجة التطبيقات لـ Azure",
|
|
38
|
+
"title": "مفتاح واجهة برمجة التطبيقات"
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"OpenAI": {
|
|
42
|
+
"azureApiVersion": {
|
|
43
|
+
"desc": "إصدار واجهة برمجة التطبيقات لـ Azure، يتبع تنسيق YYYY-MM-DD، اطلع على [أحدث الإصدارات](https://learn.microsoft.com/zh-cn/azure/ai-services/openai/reference#chat-completions)",
|
|
44
|
+
"fetch": "الحصول على القائمة",
|
|
45
|
+
"title": "إصدار واجهة برمجة التطبيقات لـ Azure"
|
|
46
|
+
},
|
|
47
|
+
"check": {
|
|
48
|
+
"button": "فحص",
|
|
49
|
+
"desc": "اختبار مفتاح واجهة البرمجة التطبيقية وعنوان الوكيل للتأكد من ملئهما بشكل صحيح",
|
|
50
|
+
"pass": "تم الفحص بنجاح",
|
|
51
|
+
"title": "فحص الاتصال"
|
|
52
|
+
},
|
|
53
|
+
"customModelName": {
|
|
54
|
+
"desc": "إضافة نموذج مخصص، يمكن استخدام فاصلة (,) للنماذج المتعددة",
|
|
55
|
+
"placeholder": "نموذج1،نموذج2،نموذج3",
|
|
56
|
+
"title": "اسم النموذج المخصص"
|
|
57
|
+
},
|
|
58
|
+
"endpoint": {
|
|
59
|
+
"desc": "بالإضافة إلى العنوان الافتراضي، يجب أن يتضمن http(s)://",
|
|
60
|
+
"placeholder": "https://api.openai.com/v1",
|
|
61
|
+
"title": "عنوان وكيل الواجهة"
|
|
62
|
+
},
|
|
63
|
+
"models": {
|
|
64
|
+
"count": "يدعم {{count}} نموذج",
|
|
65
|
+
"desc": "النماذج المدعومة",
|
|
66
|
+
"fetch": "الحصول على قائمة النماذج",
|
|
67
|
+
"notSupport": "Azure OpenAI غير مدعوم حالياً لعرض قائمة النماذج",
|
|
68
|
+
"notSupportTip": "يجب عليك التأكد بنفسك من تطابق اسم النموذج مع اسم النشر",
|
|
69
|
+
"refetch": "الحصول على قائمة النماذج مرة أخرى",
|
|
70
|
+
"title": "قائمة النماذج"
|
|
71
|
+
},
|
|
72
|
+
"title": "إعدادات OpenAI",
|
|
73
|
+
"token": {
|
|
74
|
+
"desc": "استخدام مفتاح OpenAI الخاص بك",
|
|
75
|
+
"placeholder": "مفتاح واجهة برمجة التطبيقات لـ OpenAI",
|
|
76
|
+
"title": "مفتاح واجهة برمجة التطبيقات"
|
|
77
|
+
},
|
|
78
|
+
"useAzure": {
|
|
79
|
+
"desc": "استخدام خدمة OpenAI المقدمة من Azure",
|
|
80
|
+
"fetch": "الحصول على القائمة",
|
|
81
|
+
"serverConfig": "المسؤول قام بتكوين خدمة Azure OpenAI على الخادم، ويتم منع التبديل",
|
|
82
|
+
"title": "استخدام Azure OpenAI"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"waitingForMore": "يتم <1>التخطيط لتوفير</1> المزيد من النماذج، ترقبوا المزيد ✨"
|
|
86
|
+
},
|
|
87
|
+
"plugin": {
|
|
88
|
+
"addTooltip": "إضافة البرنامج المساعد",
|
|
89
|
+
"clearDeprecated": "مسح البرامج المساعدة الغير صالحة",
|
|
90
|
+
"empty": "لا توجد برامج مساعدة مثبتة حاليًا، نرحب بك لزيارة <1>متجر البرامج المساعدة</1> للاستكشاف",
|
|
91
|
+
"installStatus": {
|
|
92
|
+
"deprecated": "تم إلغاء التثبيت"
|
|
93
|
+
},
|
|
94
|
+
"settings": {
|
|
95
|
+
"hint": "يرجى ملء الإعدادات التالية وفقًا للوصف",
|
|
96
|
+
"title": "إعدادات البرنامج المساعد {{id}}",
|
|
97
|
+
"tooltip": "إعدادات البرنامج المساعد"
|
|
98
|
+
},
|
|
99
|
+
"store": "متجر البرامج المساعد"
|
|
100
|
+
},
|
|
101
|
+
"settingAgent": {
|
|
102
|
+
"avatar": {
|
|
103
|
+
"title": "الصورة الرمزية"
|
|
104
|
+
},
|
|
105
|
+
"backgroundColor": {
|
|
106
|
+
"title": "لون الخلفية"
|
|
107
|
+
},
|
|
108
|
+
"description": {
|
|
109
|
+
"placeholder": "الرجاء إدخال وصف المساعد",
|
|
110
|
+
"title": "وصف المساعد"
|
|
111
|
+
},
|
|
112
|
+
"name": {
|
|
113
|
+
"placeholder": "الرجاء إدخال اسم المساعد",
|
|
114
|
+
"title": "الاسم"
|
|
115
|
+
},
|
|
116
|
+
"prompt": {
|
|
117
|
+
"placeholder": "الرجاء إدخال كلمة الإشارة للشخصية",
|
|
118
|
+
"title": "ضبط الشخصية"
|
|
119
|
+
},
|
|
120
|
+
"tag": {
|
|
121
|
+
"placeholder": "الرجاء إدخال العلامة",
|
|
122
|
+
"title": "العلامة"
|
|
123
|
+
},
|
|
124
|
+
"title": "معلومات المساعد"
|
|
125
|
+
},
|
|
126
|
+
"settingChat": {
|
|
127
|
+
"autoCreateTopicThreshold": {
|
|
128
|
+
"desc": "عند تجاوز عدد الرسائل الحالي هذا القيمة، سيتم إنشاء موضوع تلقائيًا",
|
|
129
|
+
"title": "عتبة إنشاء الموضوع التلقائي"
|
|
130
|
+
},
|
|
131
|
+
"chatStyleType": {
|
|
132
|
+
"title": "نوع نافذة الدردشة",
|
|
133
|
+
"type": {
|
|
134
|
+
"chat": "نمط المحادثة",
|
|
135
|
+
"docs": "نمط الوثائق"
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
"compressThreshold": {
|
|
139
|
+
"desc": "عندما يتجاوز عدد الرسائل التاريخية غير المضغوطة هذه القيمة، سيتم ضغطها",
|
|
140
|
+
"title": "عتبة ضغط طول الرسائل التاريخية"
|
|
141
|
+
},
|
|
142
|
+
"enableAutoCreateTopic": {
|
|
143
|
+
"desc": "هل يجب إنشاء موضوع تلقائيًا أثناء الدردشة، يسري ذلك فقط في المواضيع المؤقتة",
|
|
144
|
+
"title": "تمكين إنشاء الموضوع تلقائيًا"
|
|
145
|
+
},
|
|
146
|
+
"enableCompressThreshold": {
|
|
147
|
+
"title": "هل تريد تمكين عتبة ضغط طول الرسائل التاريخية"
|
|
148
|
+
},
|
|
149
|
+
"enableHistoryCount": {
|
|
150
|
+
"alias": "غير محدود",
|
|
151
|
+
"limited": "يحتوي فقط على {{number}} رسالة محادثة",
|
|
152
|
+
"title": "تحديد عدد الرسائل التاريخية",
|
|
153
|
+
"unlimited": "غير محدود"
|
|
154
|
+
},
|
|
155
|
+
"historyCount": {
|
|
156
|
+
"desc": "عدد الرسائل التي يتم إرفاقها في كل طلب (تشمل الأسئلة والأجوبة الجديدة. يُحسب كل سؤال وجواب كرسالة واحدة)",
|
|
157
|
+
"title": "عدد الرسائل المرفقة"
|
|
158
|
+
},
|
|
159
|
+
"inputTemplate": {
|
|
160
|
+
"desc": "سيتم ملء أحدث رسالة من المستخدم في هذا القالب",
|
|
161
|
+
"placeholder": "القالب المُعالج مسبقًا {{text}} سيتم استبداله بالمعلومات المُدخلة في الوقت الحقيقي",
|
|
162
|
+
"title": "معالجة مُدخلات المستخدم"
|
|
163
|
+
},
|
|
164
|
+
"title": "إعدادات الدردشة"
|
|
165
|
+
},
|
|
166
|
+
"settingModel": {
|
|
167
|
+
"enableMaxTokens": {
|
|
168
|
+
"title": "تمكين الحد الأقصى للردود"
|
|
169
|
+
},
|
|
170
|
+
"frequencyPenalty": {
|
|
171
|
+
"desc": "كلما زادت القيمة، زاد احتمال تقليل تكرار الكلمات",
|
|
172
|
+
"title": "عقوبة التكرار"
|
|
173
|
+
},
|
|
174
|
+
"maxTokens": {
|
|
175
|
+
"desc": "عدد الرموز الأقصى المستخدمة في التفاعل الواحد",
|
|
176
|
+
"title": "الحد الأقصى للردود"
|
|
177
|
+
},
|
|
178
|
+
"model": {
|
|
179
|
+
"desc": "نموذج ChatGPT",
|
|
180
|
+
"list": {
|
|
181
|
+
"gpt-3.5-turbo": "GPT 3.5",
|
|
182
|
+
"gpt-3.5-turbo-16k": "GPT 3.5 (16K)",
|
|
183
|
+
"gpt-4": "GPT 4",
|
|
184
|
+
"gpt-4-32k": "GPT 4 (32K)"
|
|
185
|
+
},
|
|
186
|
+
"title": "النموذج"
|
|
187
|
+
},
|
|
188
|
+
"presencePenalty": {
|
|
189
|
+
"desc": "كلما زادت القيمة، زاد احتمال التوسع في مواضيع جديدة",
|
|
190
|
+
"title": "جديد الحديث"
|
|
191
|
+
},
|
|
192
|
+
"temperature": {
|
|
193
|
+
"desc": "كلما زادت القيمة، زادت الردود عشوائية أكثر",
|
|
194
|
+
"title": "التباين",
|
|
195
|
+
"titleWithValue": "التباين {{value}}"
|
|
196
|
+
},
|
|
197
|
+
"title": "إعدادات النموذج",
|
|
198
|
+
"topP": {
|
|
199
|
+
"desc": "مشابه للتباين ولكن لا يجب تغييره مع التباين",
|
|
200
|
+
"title": "العينة الأساسية"
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
"settingPlugin": {
|
|
204
|
+
"title": "قائمة الإضافات"
|
|
205
|
+
},
|
|
206
|
+
"settingSystem": {
|
|
207
|
+
"accessCode": {
|
|
208
|
+
"desc": "قام المسؤول بتمكين الوصول المشفر",
|
|
209
|
+
"placeholder": "الرجاء إدخال كلمة المرور",
|
|
210
|
+
"title": "كلمة المرور"
|
|
211
|
+
},
|
|
212
|
+
"title": "إعدادات النظام"
|
|
213
|
+
},
|
|
214
|
+
"settingTTS": {
|
|
215
|
+
"openai": {
|
|
216
|
+
"sttModel": "نموذج تحويل النص إلى كلام من OpenAI",
|
|
217
|
+
"ttsModel": "نموذج توليد الكلام من OpenAI"
|
|
218
|
+
},
|
|
219
|
+
"showAllLocaleVoice": {
|
|
220
|
+
"desc": "إذا تم إيقافه، سيتم عرض مصادر الصوت الخاصة باللغة الحالية فقط",
|
|
221
|
+
"title": "عرض جميع مصادر الصوت للغات"
|
|
222
|
+
},
|
|
223
|
+
"stt": "إعدادات التحويل من الصوت إلى نص",
|
|
224
|
+
"sttAutoStop": {
|
|
225
|
+
"desc": "عند الإيقاف، لن يتم إيقاف تحويل الصوت إلى نص تلقائيًا، وسيتطلب الأمر النقر على زر الإيقاف يدويًا",
|
|
226
|
+
"title": "إيقاف تحويل الصوت إلى نص تلقائيًا"
|
|
227
|
+
},
|
|
228
|
+
"sttLocale": {
|
|
229
|
+
"desc": "لغة الصوت المدخلة، يمكن أن يساعد هذا الخيار في زيادة دقة تحويل الصوت إلى نص",
|
|
230
|
+
"title": "لغة تحويل الصوت إلى نص"
|
|
231
|
+
},
|
|
232
|
+
"sttService": {
|
|
233
|
+
"desc": "حيث يكون المتصفح هو خدمة التحويل الصوتي الأصلية",
|
|
234
|
+
"title": "خدمة تحويل الصوت إلى نص"
|
|
235
|
+
},
|
|
236
|
+
"title": "خدمة الصوت",
|
|
237
|
+
"tts": "إعدادات توليد الكلام",
|
|
238
|
+
"ttsService": {
|
|
239
|
+
"desc": "إذا كنت تستخدم خدمة توليد الكلام من OpenAI، يجب التأكد من تمكين خدمة نموذج OpenAI",
|
|
240
|
+
"title": "خدمة توليد الكلام"
|
|
241
|
+
},
|
|
242
|
+
"voice": {
|
|
243
|
+
"desc": "حدد صوتًا للمساعد الحالي، تختلف مصادر الصوت المدعومة بحسب خدمة توليد الكلام",
|
|
244
|
+
"preview": "معاينة الصوت",
|
|
245
|
+
"title": "مصدر توليد الكلام"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"settingTheme": {
|
|
249
|
+
"avatar": {
|
|
250
|
+
"title": "الصورة الرمزية"
|
|
251
|
+
},
|
|
252
|
+
"fontSize": {
|
|
253
|
+
"desc": "حجم الخط لمحتوى المحادثة",
|
|
254
|
+
"marks": {
|
|
255
|
+
"large": "كبير",
|
|
256
|
+
"normal": "عادي",
|
|
257
|
+
"small": "صغير"
|
|
258
|
+
},
|
|
259
|
+
"title": "حجم الخط"
|
|
260
|
+
},
|
|
261
|
+
"lang": {
|
|
262
|
+
"autoMode": "متابعة النظام",
|
|
263
|
+
"title": "اللغة"
|
|
264
|
+
},
|
|
265
|
+
"neutralColor": {
|
|
266
|
+
"desc": "تخصيص درجات اللون الرمادي للاتجاهات المختلفة",
|
|
267
|
+
"title": "اللون الأحادي"
|
|
268
|
+
},
|
|
269
|
+
"primaryColor": {
|
|
270
|
+
"desc": "تخصيص لون السمة الرئيسي",
|
|
271
|
+
"title": "لون السمة"
|
|
272
|
+
},
|
|
273
|
+
"themeMode": {
|
|
274
|
+
"auto": "تلقائي",
|
|
275
|
+
"dark": "داكن",
|
|
276
|
+
"light": "فاتح",
|
|
277
|
+
"title": "السمة"
|
|
278
|
+
},
|
|
279
|
+
"title": "إعدادات السمة"
|
|
280
|
+
},
|
|
281
|
+
"submitAgentModal": {
|
|
282
|
+
"button": "تقديم المساعد",
|
|
283
|
+
"identifier": "معرف المساعد",
|
|
284
|
+
"metaMiss": "يرجى استكمال معلومات المساعد قبل التقديم، يجب أن تتضمن الاسم والوصف والعلامة",
|
|
285
|
+
"placeholder": "الرجاء إدخال معرف المساعد، يجب أن يكون فريدًا، مثل تطوير الويب",
|
|
286
|
+
"tooltips": "مشاركة في سوق المساعدين"
|
|
287
|
+
},
|
|
288
|
+
"tab": {
|
|
289
|
+
"agent": "المساعد الافتراضي",
|
|
290
|
+
"common": "إعدادات عامة",
|
|
291
|
+
"llm": "نموذج اللغة",
|
|
292
|
+
"tts": "خدمة الكلام"
|
|
293
|
+
},
|
|
294
|
+
"tools": {
|
|
295
|
+
"builtins": {
|
|
296
|
+
"groupName": "الامتدادات المدمجة"
|
|
297
|
+
},
|
|
298
|
+
"plugins": {
|
|
299
|
+
"enabled": "ممكّنة {{num}}",
|
|
300
|
+
"groupName": "الإضافات",
|
|
301
|
+
"noEnabled": "لا توجد إضافات ممكّنة حاليًا",
|
|
302
|
+
"store": "متجر الإضافات"
|
|
303
|
+
},
|
|
304
|
+
"title": "أدوات الامتداد"
|
|
305
|
+
}
|
|
306
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"button": {
|
|
3
|
+
"import": "استيراد التكوين",
|
|
4
|
+
"start": "ابدأ الآن"
|
|
5
|
+
},
|
|
6
|
+
"header": "مرحبًا بكم في الاستخدام",
|
|
7
|
+
"pickAgent": "أو اختيار قالب مساعد من القائمة التالية",
|
|
8
|
+
"skip": "تخطى الإنشاء",
|
|
9
|
+
"slogan": {
|
|
10
|
+
"desc1": "قم بتشغيل عقلك الجماعي وأشعل شرارة التفكير. مساعدك الذكي، دائمًا موجود.",
|
|
11
|
+
"desc2": "أنشئ مساعدك الأول ولنبدأ!",
|
|
12
|
+
"title": "امنح نفسك عقلاً أذكى"
|
|
13
|
+
}
|
|
14
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lobehub/chat",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.120.0",
|
|
4
4
|
"description": "Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"ai": "^2.2.22",
|
|
84
84
|
"antd": "^5.12.7",
|
|
85
85
|
"antd-style": "^3",
|
|
86
|
-
"brotli-wasm": "^
|
|
86
|
+
"brotli-wasm": "^2.0.0",
|
|
87
87
|
"chroma-js": "^2",
|
|
88
88
|
"copy-to-clipboard": "^3",
|
|
89
89
|
"dayjs": "^1",
|
|
@@ -117,8 +117,9 @@
|
|
|
117
117
|
"remark": "^14",
|
|
118
118
|
"remark-gfm": "^3",
|
|
119
119
|
"remark-html": "^15",
|
|
120
|
+
"rtl-detect": "^1.1.2",
|
|
120
121
|
"semver": "^7",
|
|
121
|
-
"sharp": "
|
|
122
|
+
"sharp": "0.33.1",
|
|
122
123
|
"swr": "^2",
|
|
123
124
|
"systemjs": "^6",
|
|
124
125
|
"ts-md5": "^1",
|
|
@@ -148,6 +149,7 @@
|
|
|
148
149
|
"@types/node": "^20",
|
|
149
150
|
"@types/react": "^18",
|
|
150
151
|
"@types/react-dom": "^18",
|
|
152
|
+
"@types/rtl-detect": "^1.0.3",
|
|
151
153
|
"@types/semver": "^7",
|
|
152
154
|
"@types/systemjs": "^6",
|
|
153
155
|
"@types/ua-parser-js": "^0.7",
|
|
@@ -5,6 +5,8 @@ import { memo, useEffect } from 'react';
|
|
|
5
5
|
|
|
6
6
|
import { messageService } from '@/services/message';
|
|
7
7
|
import { sessionService } from '@/services/session';
|
|
8
|
+
import { useGlobalStore } from '@/store/global';
|
|
9
|
+
import { SidebarTabKey } from '@/store/global/initialState';
|
|
8
10
|
import { useSessionStore } from '@/store/session';
|
|
9
11
|
|
|
10
12
|
const checkHasConversation = async () => {
|
|
@@ -19,6 +21,8 @@ const Redirect = memo(() => {
|
|
|
19
21
|
|
|
20
22
|
useEffect(() => {
|
|
21
23
|
checkHasConversation().then((hasData) => {
|
|
24
|
+
useGlobalStore.getState().switchSideBar(SidebarTabKey.Chat);
|
|
25
|
+
|
|
22
26
|
if (hasData) {
|
|
23
27
|
router.push('/chat');
|
|
24
28
|
|
package/src/app/layout.tsx
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Viewport } from 'next';
|
|
2
2
|
import { cookies } from 'next/headers';
|
|
3
3
|
import { PropsWithChildren } from 'react';
|
|
4
|
+
import { isRtlLang } from 'rtl-detect';
|
|
4
5
|
|
|
5
6
|
import Analytics from '@/components/Analytics';
|
|
6
7
|
import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
|
|
@@ -20,9 +21,9 @@ const RootLayout = ({ children }: PropsWithChildren) => {
|
|
|
20
21
|
const neutralColor = cookieStore.get(LOBE_THEME_NEUTRAL_COLOR);
|
|
21
22
|
const primaryColor = cookieStore.get(LOBE_THEME_PRIMARY_COLOR);
|
|
22
23
|
const lang = cookieStore.get(LOBE_LOCALE_COOKIE);
|
|
23
|
-
|
|
24
|
+
const direction = isRtlLang(lang?.value || DEFAULT_LANG) ? 'rtl' : 'ltr';
|
|
24
25
|
return (
|
|
25
|
-
<html lang={lang?.value || DEFAULT_LANG} suppressHydrationWarning>
|
|
26
|
+
<html dir={direction} lang={lang?.value || DEFAULT_LANG} suppressHydrationWarning>
|
|
26
27
|
<body>
|
|
27
28
|
<StyleRegistry>
|
|
28
29
|
<Layout
|
|
@@ -102,6 +102,12 @@ class _MessageModel extends BaseModel {
|
|
|
102
102
|
return super._update(id, data);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
+
async updatePluginState(id: string, key: string, value: any) {
|
|
106
|
+
const item = await this.findById(id);
|
|
107
|
+
|
|
108
|
+
return this.update(id, { pluginState: { ...item.pluginState, [key]: value } });
|
|
109
|
+
}
|
|
110
|
+
|
|
105
111
|
/**
|
|
106
112
|
* Batch updates multiple fields of the specified messages.
|
|
107
113
|
*
|
|
@@ -5,10 +5,10 @@ import { useChatListActionsBar } from '../hooks/useChatListActionsBar';
|
|
|
5
5
|
import { RenderAction } from '../types';
|
|
6
6
|
|
|
7
7
|
export const FunctionActionsBar: RenderAction = memo(({ onActionClick }) => {
|
|
8
|
-
const { regenerate, divider, del } = useChatListActionsBar();
|
|
8
|
+
const { regenerate, divider, delAndRegenerate, del } = useChatListActionsBar();
|
|
9
9
|
return (
|
|
10
10
|
<ActionIconGroup
|
|
11
|
-
dropdownMenu={[regenerate, divider, del]}
|
|
11
|
+
dropdownMenu={[regenerate, divider, delAndRegenerate, del]}
|
|
12
12
|
items={[regenerate]}
|
|
13
13
|
onActionClick={onActionClick}
|
|
14
14
|
type="ghost"
|
package/src/locales/create.ts
CHANGED
|
@@ -2,6 +2,7 @@ import i18n from 'i18next';
|
|
|
2
2
|
import LanguageDetector from 'i18next-browser-languagedetector';
|
|
3
3
|
import resourcesToBackend from 'i18next-resources-to-backend';
|
|
4
4
|
import { initReactI18next } from 'react-i18next';
|
|
5
|
+
import { isRtlLang } from 'rtl-detect';
|
|
5
6
|
|
|
6
7
|
import { getClientConfig } from '@/config/client';
|
|
7
8
|
import { DEFAULT_LANG, LOBE_LOCALE_COOKIE } from '@/const/locale';
|
|
@@ -23,7 +24,13 @@ export const createI18nNext = (lang?: string) => {
|
|
|
23
24
|
return import(`@/../locales/${normalizeLocale(lng)}/${ns}.json`);
|
|
24
25
|
}),
|
|
25
26
|
);
|
|
26
|
-
|
|
27
|
+
// Dynamically set HTML direction on language change
|
|
28
|
+
instance.on('languageChanged', (lng) => {
|
|
29
|
+
if (typeof window !== 'undefined') {
|
|
30
|
+
const direction = isRtlLang(lng) ? 'rtl' : 'ltr';
|
|
31
|
+
document.documentElement.dir = direction;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
27
34
|
return {
|
|
28
35
|
init: () =>
|
|
29
36
|
instance.init({
|
package/src/locales/resources.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import resources from './default';
|
|
2
2
|
|
|
3
3
|
export const locales = [
|
|
4
|
+
'ar',
|
|
4
5
|
'de-DE',
|
|
5
6
|
'en-US',
|
|
6
7
|
'es-ES',
|
|
@@ -41,6 +42,10 @@ type LocaleOptions = {
|
|
|
41
42
|
}[];
|
|
42
43
|
|
|
43
44
|
export const localeOptions: LocaleOptions = [
|
|
45
|
+
{
|
|
46
|
+
label: 'العربية',
|
|
47
|
+
value: 'ar',
|
|
48
|
+
},
|
|
44
49
|
{
|
|
45
50
|
label: '简体中文',
|
|
46
51
|
value: 'zh-CN',
|