diff --git a/app/frontend/src/i18n/config.ts b/app/frontend/src/i18n/config.ts index c17b074225..bb44276934 100644 --- a/app/frontend/src/i18n/config.ts +++ b/app/frontend/src/i18n/config.ts @@ -11,8 +11,10 @@ import jaTranslation from "../locales/ja/translation.json"; import nlTranslation from "../locales/nl/translation.json"; import ptBRTranslation from "../locales/ptBR/translation.json"; import trTranslation from "../locales/tr/translation.json"; +import arTranslation from "../locales/ar/translation.json"; import itTranslation from "../locales/it/translation.json"; + export const supportedLngs: { [key: string]: { name: string; locale: string } } = { da: { name: "Dansk", @@ -46,6 +48,10 @@ export const supportedLngs: { [key: string]: { name: string; locale: string } } name: "Türkçe", locale: "tr-TR" }, + ar: { + name: "العربية", + locale: "ar-AR" + }, it: { name: "Italiano", locale: "it-IT" @@ -68,6 +74,7 @@ i18next nl: { translation: nlTranslation }, ptBR: { translation: ptBRTranslation }, tr: { translation: trTranslation }, + ar: { translation: arTranslation }, it: { translation: itTranslation } }, fallbackLng: "en", diff --git a/app/frontend/src/locales/ar/translation.json b/app/frontend/src/locales/ar/translation.json new file mode 100644 index 0000000000..a81fbf025e --- /dev/null +++ b/app/frontend/src/locales/ar/translation.json @@ -0,0 +1,140 @@ +{ + "pageTitle": "أزور أوبن أي آي + بحث الذكاء الاصطناعي", + "headerTitle": "أزور أوبن أي آي + بحث الذكاء الاصطناعي", + "chat": "دردشة", + "qa": "اطرح سؤالاً", + "login": "تسجيل الدخول", + "logout": "تسجيل الخروج", + "clearChat": "مسح الدردشة", + "history": { + "chatHistory": "سجل الدردشة", + "openChatHistory": "فتح سجل الدردشة", + "noHistory": "لا يوجد سجل دردشة", + "deleteModalTitle": "حذف سجل الدردشة", + "deleteModalDescription": "لا يمكن التراجع عن هذا الإجراء. هل تريد حذف سجل الدردشة؟", + "deleteLabel": "حذف", + "cancelLabel": "إلغاء", + "today": "اليوم", + "yesterday": "أمس", + "last7days": "آخر 7 أيام", + "last30days": "آخر 30 يومًا" + }, + "upload": { + "fileLabel": "رفع ملف:", + "uploadedFilesLabel": "الملفات المرفوعة سابقاً:", + "noFilesUploaded": "لم يتم رفع أي ملفات بعد", + "loading": "جار التحميل...", + "manageFileUploads": "إدارة رفع الملفات", + "uploadingFiles": "جاري رفع الملفات...", + "uploadedFileError": "خطأ في رفع الملف - يرجى المحاولة مرة أخرى أو الاتصال بالمسؤول.", + "deleteFile": "حذف الملف", + "deletingFile": "جار حذف الملف...", + "errorDeleting": "خطأ في الحذف.", + "fileDeleted": "تم حذف الملف" + }, + "developerSettings": "إعدادات المطور", + "chatEmptyStateTitle": "دردش مع بياناتك", + "chatEmptyStateSubtitle": "اطرح أي سؤال أو جرب مثالاً", + "defaultExamples": { + "1": "ما الذي يتضمنه خطة Northwind Health Plus الخاصة بي والذي لا يتضمنه الخطة القياسية؟", + "2": "ماذا يحدث خلال تقييم الأداء؟", + "3": "ما الذي يقوم به مدير المنتج؟", + "placeholder": "اكتب سؤالاً جديداً (مثلاً: هل تغطي خطتي فحوصات العين السنوية؟)" + }, + "askTitle": "اطرح على بياناتك", + "gpt4vExamples": { + "1": "قارن بين تأثير أسعار الفائدة والناتج المحلي الإجمالي في الأسواق المالية.", + "2": "ما هو الاتجاه المتوقع لمؤشر S&P 500 خلال السنوات الخمس القادمة؟ قارن ذلك بالأداء السابق للمؤشر.", + "3": "هل يمكنك تحديد أي علاقة بين أسعار النفط واتجاهات سوق الأسهم؟", + "placeholder": "مثال: هل تغطي خطتي فحوصات العين السنوية؟" + }, + "generatingAnswer": "جاري توليد الإجابة", + "citationWithColon": "الاقتباس:", + "followupQuestions": "أسئلة متابعة:", + "tooltips": { + "submitQuestion": "إرسال السؤال", + "askWithVoice": "اطرح السؤال بالصوت", + "stopRecording": "إيقاف تسجيل السؤال", + "showThoughtProcess": "عرض مسار التفكير", + "showSupportingContent": "عرض المحتوى الداعم", + "speakAnswer": "نطق الإجابة", + "info": "معلومات", + "save": "حفظ", + "copy": "نسخ", + "copied": "تم النسخ!" + }, + "headerTexts": { + "thoughtProcess": "مسار التفكير", + "supportingContent": "المحتوى الداعم", + "citation": "الاقتباس" + }, + "labels": { + "toggleMenu": "تبديل القائمة", + "languagePicker": "اختر لغتك", + "headerText": "تكوين توليد الإجابة", + "closeButton": "إغلاق", + "promptTemplate": "تجاوز قالب التعليمات", + "temperature": "درجة الحرارة", + "seed": "البذرة", + "minimumSearchScore": "الحد الأدنى لنقاط البحث", + "minimumRerankerScore": "الحد الأدنى لنقاط إعادة الترتيب", + "retrieveCount": "استرجاع هذا العدد من نتائج البحث:", + "includeCategory": "تضمين الفئة", + "includeCategoryOptions": { + "all": "الكل" + }, + "excludeCategory": "استبعاد الفئة", + "useSemanticRanker": "استخدام مصنف دلالي للاسترجاع", + "useSemanticCaptions": "استخدام التسميات الدلالية", + "useSuggestFollowupQuestions": "اقتراح أسئلة متابعة", + "useGPT4V": "استخدام نموذج رؤية GPT", + "gpt4VInput": { + "label": "مدخلات نموذج رؤية GPT", + "options": { + "textAndImages": "صور ونصوص", + "images": "صور", + "texts": "نصوص" + } + }, + "retrievalMode": { + "label": "وضع الاسترجاع", + "options": { + "hybrid": "المتجهات + النص (هجين)", + "vectors": "المتجهات", + "texts": "النصوص" + } + }, + "vector": { + "label": "حقول المتجهات (بحث متعدد الاستعلامات)", + "options": { + "embedding": "تضمينات النص", + "imageEmbedding": "تضمينات الصور", + "both": "تضمينات النص والصورة" + } + }, + "useOidSecurityFilter": "استخدام مرشح أمان OID", + "useGroupsSecurityFilter": "استخدام مرشح أمان المجموعات", + "shouldStream": "بث استجابات إكمال الدردشة" + }, + "helpTexts": { + "promptTemplate": "يتجاوز القالب المستخدم لتوليد الإجابة استناداً إلى السؤال ونتائج البحث. لإضافة إلى القالب الحالي بدلاً من استبداله بالكامل، ابدأ نصك بـ '>>>'.", + "temperature": "يضبط درجة حرارة الطلب للنموذج اللغوي الذي يولد الإجابة. درجات الحرارة الأعلى تؤدي إلى إجابات أكثر إبداعاً، لكنها قد تكون أقل واقعية.", + "seed": "يضبط قيمة بذرة لتحسين قابلية تكرار استجابات النموذج. يمكن أن تكون البذرة أي رقم صحيح.", + "searchScore": "يضبط الحد الأدنى للنقاط لنتائج البحث القادمة من بحث Azure AI. يعتمد نطاق النقاط على ما إذا كنت تستخدم الوضع الهجين (افتراضي)، المتجهات فقط، أو النصوص فقط.", + "rerankerScore": "يضبط الحد الأدنى للنقاط لنتائج البحث القادمة من معيد الترتيب الدلالي. تتراوح النقاط دائماً بين 0-4. كلما ارتفعت النقاط، زادت الصلة الدلالية للنتيجة بالسؤال.", + "retrieveNumber": "يضبط عدد نتائج البحث التي سيتم استرجاعها من بحث Azure AI. قد تزيد النتائج الإضافية من احتمالية العثور على الإجابة الصحيحة، لكنها قد تؤدي إلى تشتت النموذج.", + "includeCategory": "يحدد فئة لتضمينها في نتائج البحث. لا توجد فئات مستخدمة في مجموعة البيانات الافتراضية.", + "excludeCategory": "يحدد فئة لاستبعادها من نتائج البحث. لا توجد فئات مستخدمة في مجموعة البيانات الافتراضية.", + "useSemanticReranker": "يُمكّن مصنف البحث الدلالي من Azure AI، وهو نموذج يعيد ترتيب نتائج البحث بناءً على التشابه الدلالي مع استعلام المستخدم.", + "useSemanticCaptions": "يرسل تسميات دلالية إلى النموذج اللغوي بدلاً من نتيجة البحث الكاملة. يتم استخراج التسمية الدلالية من نتيجة البحث أثناء عملية الترتيب الدلالي.", + "suggestFollowupQuestions": "يطلب من النموذج اللغوي اقتراح أسئلة متابعة بناءً على استعلام المستخدم.", + "useGPT4Vision": "يستخدم GPT-4-Turbo مع الرؤية لتوليد إجابات استناداً إلى الصور والنصوص من الفهرس.", + "vectorFields": "يحدد حقول التضمين التي سيتم البحث فيها في فهرس بحث Azure AI، سواء كانت تضمينات 'الصور والنصوص' أو 'الصور' فقط أو 'النصوص' فقط.", + "gpt4VisionInputs": "يضبط ما سيتم إرساله إلى نموذج الرؤية. 'الصور والنصوص' يرسل الصور والنصوص معاً إلى النموذج، 'الصور' يرسل الصور فقط، و 'النصوص' يرسل النصوص فقط.", + "retrievalMode": "يضبط وضع الاسترجاع لاستعلام بحث Azure AI. يستخدم 'المتجهات + النص (هجين)' مزيجاً من البحث بالمتجهات والبحث النصي الكامل، بينما يستخدم 'المتجهات' البحث بالمتجهات فقط، و'النص' يستخدم البحث النصي الكامل فقط. الوضع الهجين هو الأمثل عمومًا.", + "streamChat": "يبث الاستجابة بشكل مستمر إلى واجهة الدردشة أثناء توليدها.", + "useOidSecurityFilter": "تصفية نتائج البحث بناءً على معرف OID للمستخدم المصادق عليه.", + "useGroupsSecurityFilter": "تصفية نتائج البحث بناءً على مجموعات المستخدم المصادق عليه." + } + } + \ No newline at end of file diff --git a/docs/deploy_features.md b/docs/deploy_features.md index e6d1503d40..62ae71f400 100644 --- a/docs/deploy_features.md +++ b/docs/deploy_features.md @@ -201,7 +201,7 @@ When both the browser-stored and Cosmos DB options are enabled, Cosmos DB will t ## Enabling language picker -You can optionally enable the language picker to allow users to switch between different languages. Currently, it supports English, Spanish, French, and Japanese. +You can optionally enable the language picker to allow users to switch between different languages. Currently, it supports English, Spanish, French, Japanese and Arabic. To add support for additional languages, create new locale files and update `app/frontend/src/i18n/config.ts` accordingly. To enable language picker, run: