feat(i18n): Add Arabic localization support (#693)

This commit is contained in:
NourEldin Osama 2026-02-01 14:28:52 +02:00 committed by GitHub
parent 5ba5f77b45
commit 90bfa73377
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 462 additions and 0 deletions

View file

@ -24,4 +24,5 @@ export const LANGUAGE_METADATA: Record<
pt: { name: "Portuguese", nativeName: "Português", priority: 12 },
cs: { name: "Czech", nativeName: "Čeština", priority: 13 },
tr: { name: "Turkish", nativeName: "Türkçe", priority: 14 },
ar: { name: "Arabic", nativeName: "العربية", priority: 15 },
};

View file

@ -0,0 +1,461 @@
{
"tray": {
"settings": "...الإعدادات",
"checkUpdates": "...التحقق من وجود تحديثات",
"copyLastTranscript": "نسخ آخر نص تم تفريغه",
"quit": "إنهاء",
"cancel": "إلغاء"
},
"sidebar": {
"general": "عام",
"advanced": "متقدم",
"postProcessing": "معالجة لاحقة",
"history": "السجل",
"debug": "تصحيح الأخطاء",
"about": "حول"
},
"onboarding": {
"subtitle": "للبدء، اختر نموذج التفريغ الصوتي",
"recommended": "موصى به",
"download": "تنزيل",
"downloading": "...جاري التنزيل",
"modelCard": {
"accuracy": "الدقة",
"speed": "السرعة"
},
"models": {
"small": {
"name": "Whisper Small",
"description": ".سريع ودقيق إلى حد ما"
},
"medium": {
"name": "Whisper Medium",
"description": ".دقة جيدة، سرعة متوسطة"
},
"turbo": {
"name": "Whisper Turbo",
"description": ".توازن بين الدقة والسرعة"
},
"large": {
"name": "Whisper Large",
"description": ".دقة جيدة، لكنه بطيء"
},
"parakeet-tdt-0.6b-v2": {
"name": "Parakeet V2",
"description": ".الإنجليزية فقط. أفضل نموذج للمتحدثين بالإنجليزية"
},
"parakeet-tdt-0.6b-v3": {
"name": "Parakeet V3",
"description": ".سريع ودقيق"
},
"moonshine-base": {
"name": "Moonshine Base",
"description": ".سريع جداً، الإنجليزية فقط. يتعامل جيداً مع اللهجات"
}
},
"errors": {
"loadModels": "فشل تحميل النماذج المتاحة",
"downloadModel": "فشل تنزيل النموذج: {{error}}"
},
"permissions": {
"title": "الأذونات المطلوبة",
"description": ".يحتاج Handy إلى بعض الأذونات ليعمل بشكل صحيح",
"microphone": {
"title": "الوصول إلى الميكروفون",
"description": ".مطلوب لسماع صوتك من أجل التفريغ الصوتي"
},
"accessibility": {
"title": "إمكانية الوصول",
"description": ".مطلوب لكتابة النص المفرغ في تطبيقاتك"
},
"grant": "منح الإذن",
"granted": "تم المنح",
"waiting": "...في الانتظار",
"allGranted": "كل شيء جاهز!",
"errors": {
"checkFailed": "فشل التحقق من الأذونات. يرجير المحاولة مرة أخرى.",
"requestFailed": "فشل طلب الإذن. يرجى المحاولة مرة أخرى."
}
}
},
"modelSelector": {
"welcome": "مرحباً بك في Handy!",
"downloadPrompt": ".قم بتنزيل نموذج أدناه للبدء في التفريغ الصوتي",
"availableModels": "النماذج المتاحة",
"downloadModels": "تنزيل النماذج",
"chooseModel": "اختر نموذجاً",
"active": "نشط",
"download": "تنزيل",
"downloadSize": "حجم التنزيل",
"noModelsAvailable": "لا توجد نماذج متاحة",
"extracting": "...جاري استخراج {{modelName}}",
"extractingMultiple": "...جاري استخراج {{count}} من النماذج",
"extractingGeneric": "...جاري الاستخراج",
"downloading": "جاري التنزيل {{percentage}}%",
"downloadingMultiple": "جاري تنزيل {{count}} من النماذج...",
"modelReady": "النموذج جاهز",
"loading": "...جاري تحميل {{modelName}}",
"loadingGeneric": "...جاري التحميل",
"modelError": "خطأ في النموذج",
"modelUnloaded": "تم إلغاء تحميل النموذج",
"noModelDownloadRequired": "لا يوجد نموذج - التنزيل مطلوب",
"deleteModel": "حذف {{modelName}}"
},
"settings": {
"general": {
"title": "عام",
"shortcut": {
"title": "اختصارات Handy",
"description": "إعداد اختصارات لوحة المفاتيح لبدء تسجيل التفريغ الصوتي",
"loading": "...جاري تحميل الاختصارات",
"none": "لا توجد اختصارات مجهزة",
"notFound": "الاختصار غير موجود",
"pressKeys": "...اضغط على المفاتيح",
"bindings": {
"transcribe": {
"name": "اختصار التفريغ الصوتي",
"description": ".اختصار لوحة المفاتيح لتسجيل وتفريغ صوتك"
},
"cancel": {
"name": "اختصار الإلغاء",
"description": ".اختصار لوحة المفاتيح لإلغاء التسجيل الحالي"
}
},
"errors": {
"restore": "فشل استعادة الاختصار الأصلي",
"set": "فشل تعيين الاختصار: {{error}}",
"reset": "فشل إعادة تعيين الاختصار إلى قيمته الأصلية"
}
},
"language": {
"title": "اللغة",
"description": ".اختر لغة التعرف على الكلام. سيحدد 'تلقائي' اللغة تلقائياً، بينما يؤدي اختيار لغة معينة إلى تحسين الدقة لتلك اللغة",
"descriptionUnsupported": ".يكتشف نموذج Parakeet اللغة تلقائياً. لا يلزم الاختيار اليدوي",
"searchPlaceholder": "البحث عن اللغات...",
"noResults": "لم يتم العثور على لغات",
"auto": "تلقائي"
},
"pushToTalk": {
"label": "اضغط للتحدث",
"description": "استمر في الضغط للتسجيل، واترك للتوقف"
}
},
"sound": {
"title": "الصوت",
"microphone": {
"title": "الميكروفون",
"description": "اختر جهاز الميكروفون المفضل لديك",
"placeholder": "...اختر الميكروفون",
"loading": "...جاري التحميل"
},
"audioFeedback": {
"label": "تنبيهات صوتية",
"description": "تشغيل صوت عند بدء التسجيل وتوقفه"
},
"outputDevice": {
"title": "جهاز الإخراج",
"description": "اختر جهاز إخراج الصوت المفضل لتنبيهات الصوت",
"placeholder": "...اختر جهاز الإخراج",
"loading": "...جاري التحميل"
},
"volume": {
"title": "مستوى الصوت",
"description": "ضبط مستوى صوت تنبيهات الصوت"
}
},
"advanced": {
"title": "متقدم",
"groups": {
"app": "التطبيق",
"output": "الإخراج",
"transcription": "التفريغ الصوتي",
"history": "السجل",
"experimental": "تجريبي"
},
"experimentalToggle": {
"label": "الميزات التجريبية",
"description": ".تمكين الميزات التجريبية التي لا تزال قيد التطوير"
},
"startHidden": {
"label": "بدء مخفي",
"description": ".التشغيل في صينية النظام دون فتح النافذة"
},
"autostart": {
"label": "التشغيل عند بدء التشغيل",
"description": ".بدء تشغيل Handy تلقائياً عند تسجيل الدخول إلى جهاز الكمبيوتر الخاص بك"
},
"overlay": {
"title": "موقع التراكب",
"description": "عرض تراكب الملاحظات المرئية أثناء التسجيل والتفريغ. على نظام Linux يوصى بـ 'بلا'.",
"options": {
"none": "بلا",
"bottom": "أسفل",
"top": "أعلى"
}
},
"pasteMethod": {
"title": "طريقة اللصق",
"description": ".اختر كيفية إدراج النص. مباشر: يحاكي الكتابة عبر إدخال النظام. بلا: يتخطى اللصق، ويحدث السجل/الحافظة فقط",
"options": {
"clipboard": "الحافظة ({{modifier}}+V)",
"clipboardCtrlShiftV": "الحافظة (Ctrl+Shift+V)",
"clipboardShiftInsert": "الحافظة (Shift+Insert)",
"direct": "مباشر",
"none": "بلا"
}
},
"clipboardHandling": {
"title": "التعامل مع الحافظة",
"description": ".'عدم تعديل الحافظة' يحافظ على محتويات حافظتك الحالية بعد التفريغ. 'نسخ إلى الحافظة' يترك نتيجة التفريغ في حافظتك بعد اللصق",
"options": {
"dontModify": "عدم تعديل الحافظة",
"copyToClipboard": "نسخ إلى الحافظة"
}
},
"translateToEnglish": {
"label": "الترجمة إلى الإنجليزية",
"description": ".ترجمة الكلام من اللغات الأخرى تلقائياً إلى الإنجليزية أثناء التفريغ",
"descriptionUnsupported": ".الترجمة غير مدعومة من قبل نموذج {{model}}"
},
"modelUnload": {
"title": "إلغاء تحميل النموذج",
"description": "تحرير ذاكرة GPU/CPU تلقائياً عندما لا يتم استخدام النموذج للوقت المحدد",
"options": {
"never": "أبداً",
"immediately": "فوراً",
"min2": "بعد دقيقتين",
"min5": "بعد 5 دقائق",
"min10": "بعد 10 دقائق",
"min15": "بعد 15 دقيقة",
"hour1": "بعد ساعة واحدة",
"sec5": "بعد 5 ثوانٍ (تصحيح أخطاء)"
}
},
"customWords": {
"title": "كلمات مخصصة",
"description": ".أضف الكلمات التي غالباً ما يتم فهمها بشكل خاطئ أو كتابتها بشكل خاطئ أثناء التفريغ. سيقوم النظام تلقائياً بتصحيح الكلمات ذات الصوت المماثل لتطابق قائمتك",
"placeholder": "أضف كلمة",
"add": "إضافة",
"remove": "إزالة {{word}}"
}
},
"postProcessing": {
"title": "معالجة لاحقة",
"disabledNotice": "المعالجة اللاحقة معطلة حالياً. قم بتمكينها في إعدادات تصحيح الأخطاء للتكوين.",
"api": {
"title": "API (متوافق مع OpenAI)",
"provider": {
"title": "المزود",
"description": "اختر مزوداً متوافقاً مع OpenAI."
},
"appleIntelligence": {
"title": "Apple Intelligence",
"description": "يعمل بالكامل على الجهاز. لا يلزم وجود مفتاح API أو وصول إلى الشبكة.",
"requirements": "يتطلب جهاز Mac بمعالج Apple Silicon يعمل بنظام macOS Tahoe (26.0) أو أحدث. يجب تمكين Apple Intelligence في إعدادات النظام.",
"unavailable": "Apple Intelligence غير متاح على هذا الجهاز. يتطلب جهاز Mac بمعالج Apple Silicon يعمل بنظام macOS Tahoe (26.0) أو أحدث مع تمكين Apple Intelligence في إعدادات النظام."
},
"baseUrl": {
"title": "URL الأساسي",
"description": "URL الأساسي لـ API للمزود المختار. يمكن تعديل المزود المخصص فقط.",
"placeholder": "https://api.openai.com/v1"
},
"apiKey": {
"title": "مفتاح API",
"description": "مفتاح API للمزود المختار.",
"placeholder": "sk-..."
},
"model": {
"title": "النموذج",
"descriptionApple": "قدم حداً اختيارياً للرموز الرقمية أو احتفظ بالإعداد المسبق الافتراضي على الجهاز.",
"descriptionCustom": "قدم معرف النموذج المتوقع من قبل نقطة النهاية المخصصة الخاصة بك.",
"descriptionDefault": "اختر نموذجاً يعرضه المزود المختار.",
"placeholderApple": "Apple Intelligence",
"placeholderWithOptions": "ابحث عن نموذج أو اختره",
"placeholderNoOptions": "اكتب اسم النموذج",
"refreshModels": "تحديث النماذج"
}
},
"prompts": {
"title": "المطالبة",
"selectedPrompt": {
"title": "المطالبة المختارة",
"description": ".اختر قالباً لتحسين التفريغ الصوتي أو أنشئ قالباً جديداً. استخدم ${output} داخل نص المطالبة للإشارة إلى النص الملتقط"
},
"noPrompts": "لا توجد مطالبات متاحة",
"selectPrompt": "اختر مطالبة",
"createNew": "إنشاء مطالبة جديدة",
"promptLabel": "تسمية المطالبة",
"promptLabelPlaceholder": "أدخل اسم المطالبة",
"promptInstructions": "تعليمات المطالبة",
"promptInstructionsPlaceholder": ".اكتب التعليمات المراد تشغيلها بعد التفريغ الصوتي. مثال: قم بتحسين القواعد والوضوح للنص التالي: ${output}",
"promptTip": "تلميح: استخدم <code>${output}</code> لإدراج النص المفرغ في مطالبتك.",
"updatePrompt": "تحديث المطالبة",
"deletePrompt": "حذف المطالبة",
"createPrompt": "إنشاء مطالبة",
"cancel": "إلغاء",
"selectToEdit": ".اختر مطالبة أعلاه لعرض وتعديل تفاصيلها",
"createFirst": ".انقر على 'إنشاء مطالبة جديدة' أعلاه لإنشاء أول مطالبة معالجة لاحقة لك"
}
},
"history": {
"title": "السجل",
"openFolder": "فتح مجلد التسجيلات",
"loading": "...جاري تحميل السجل",
"empty": "!لا يوجد تفريغ صوتي بعد. ابدأ التسجيل لبناء سجلك",
"copyToClipboard": "نسخ التفريغ إلى الحافظة",
"save": "حفظ التفريغ",
"unsave": "إزالة من المحفوظات",
"delete": "حذف الإدخال",
"deleteError": ".فشل حذف الإدخال. يرجى المحاولة مرة أخرى"
},
"debug": {
"title": "تصحيح الأخطاء",
"logDirectory": {
"title": "مجلد السجلات",
"description": "الموقع الذي يتم فيه تخزين ملفات السجل"
},
"logLevel": {
"title": "مستوى السجل",
"description": "ضبط درجة تفصيل السجلات"
},
"updateChecks": {
"label": "التحقق من وجود تحديثات",
"description": "التحقق تلقائياً من وجود إصدارات جديدة من Handy"
},
"soundTheme": {
"label": "سمة الصوت",
"description": "اختر سمة صوت لتنبيهات بدء وتوقف التسجيل"
},
"wordCorrectionThreshold": {
"title": "عتبة تصحيح الكلمات",
"description": "حساسية تصحيح الكلمات المخصصة"
},
"historyLimit": {
"title": "حد السجل",
"description": "الحد الأقصى لعدد إدخالات السجل المراد الاحتفاظ بها",
"entries": "إدخالات"
},
"recordingRetention": {
"title": "حذف التسجيلات تلقائياً",
"description": "حذف التسجيلات القديمة تلقائياً لتوفير المساحة",
"never": "أبداً",
"preserveLimit": "الاحتفاظ بآخر {{count}}",
"days3": "بعد 3 أيام",
"weeks2": "بعد أسبوعين",
"months3": "بعد 3 أشهر",
"placeholder": "اختر فترة الاحتفاظ..."
},
"alwaysOnMicrophone": {
"label": "ميكروفون يعمل دائماً",
"description": "إبقاء الميكروفون نشطاً لاستجابة أسرع"
},
"clamshellMicrophone": {
"title": "ميكروفون وضع الإغلاق",
"description": "الميكروفون المراد استخدامه عندما يكون غطاء المحمول مغلقاً"
},
"postProcessingToggle": {
"label": "معالجة لاحقة",
"description": "تمكين تحسين النص المدعوم بالذكاء الاصطناعي بعد التفريغ الصوتي"
},
"muteWhileRecording": {
"label": "كتم الصوت أثناء التسجيل",
"description": "كتم صوت النظام أثناء التسجيل"
},
"appendTrailingSpace": {
"label": "إضافة مسافة تابعة",
"description": "إضافة مسافة بعد التفريغ الملصق"
},
"keyboardImplementation": {
"title": "تنفيذ لوحة المفاتيح",
"description": ".اختر الواجهة الخلفية لاختصارات لوحة المفاتيح",
"bindingsReset": "كانت اختصارات لوحة المفاتيح غير متوافقة وتمت إعادة تعيينها إلى القيم الافتراضية"
},
"paths": {
"appData": "بيانات التطبيق:",
"models": "النماذج:",
"settings": "الإعدادات:"
}
},
"about": {
"title": "حول",
"version": {
"title": "الإصدار",
"description": "الإصدار الحالي من Handy"
},
"appDataDirectory": {
"title": "مجلد بيانات التطبيق",
"description": "الموقع الذي يخزن فيه Handy بياناته"
},
"sourceCode": {
"title": "كود المصدر",
"description": "عرض كود المصدر والمساهمة",
"button": "عرض على GitHub"
},
"supportDevelopment": {
"title": "دعم التطوير",
"description": "ساعدنا في مواصلة بناء Handy",
"button": "تبرع"
},
"acknowledgments": {
"title": "شكر وتقدير",
"whisper": {
"title": "Whisper.cpp",
"description": "استنتاج عالي الأداء لنموذج التعرف التلقائي على الكلام Whisper من OpenAI",
"details": ".يستخدم Handy برنامج Whisper.cpp لمعالجة سريعة ومحلية لتحويل الكلام إلى نص. شكراً للعمل الرائع الذي قام به Georgi Gerganov والمساهمون"
}
}
}
},
"footer": {
"downloadingModel": "...جاري تنزيل {{model}}",
"checkingUpdates": "...جاري التحقق من وجود تحديثات",
"updateAvailable": "تحديث متاح: {{version}}",
"updateAvailableShort": "تحديث متاح",
"upToDate": "محدث",
"downloadUpdate": "تنزيل التحديث",
"restart": "إعادة تشغيل",
"updateCheckingDisabled": "تم تعطيل التحقق من التحديث",
"downloading": "...جاري التنزيل {{progress}}%",
"installing": "...جاري التثبيت",
"preparing": "...جاري التحضير",
"checkForUpdates": "التحقق من وجود تحديثات"
},
"common": {
"loading": "...جاري التحميل",
"save": "حفظ",
"cancel": "إلغاء",
"reset": "إعادة تعيين",
"add": "إضافة",
"remove": "إزالة",
"delete": "حذف",
"edit": "تعديل",
"create": "إنشاء",
"update": "تحديث",
"close": "إغلاق",
"open": "فتح",
"default": "افتراضي",
"enabled": "ممكن",
"disabled": "معطل",
"on": "تشغيل",
"off": "إيقاف",
"yes": "نعم",
"no": "لا",
"noOptionsFound": "لم يتم العثور على خيارات"
},
"accessibility": {
"permissionsRequired": "أذونات إمكانية الوصول مطلوبة",
"permissionsDescription": ".يحتاج Handy إلى أذونات إمكانية الوصول لكتابة النص المفرغ",
"openSettings": "فتح إعدادات النظام",
"dismiss": "تجاهل"
},
"errors": {
"loadDirectory": "خطأ في تحميل المجلد: {{error}}"
},
"appLanguage": {
"title": "لغة التطبيق",
"description": "تغيير لغة واجهة Handy"
},
"overlay": {
"transcribing": "...جاري التفريغ"
}
}