mirror of
https://github.com/par274/sharpemu.git
synced 2026-08-19 16:01:30 +08:00
7521295ee1
* [Codec/Native] Real H.264 decode for sceVideodec2, fix TLS loader missing the main module sceVideodec2 was a capability-only stub: the game's video pipeline worked end-to-end but never produced a picture, so intro/cinematic videos stayed black even though playback "completed" without errors (confirmed on Ghost of Yotei's intro cinematic). - Videodec2Decoder: owns an FFmpeg H.264 session per decoder handle, running decode and presentation pacing on their own threads (never the guest thread) so a whole clip isn't decoded faster than it can be displayed. Converts to BGRA and submits straight to VulkanVideoPresenter, bypassing guest memory the same way the existing Bink2 path does. - Videodec2Exports: wires the real decoder into sceVideodec2CreateDecoder/Decode/Flush/Reset/DeleteDecoder, falling back to the original no-picture stub whenever FFmpeg is unavailable or a given decoder failed to open. - VulkanVideoPresenter: decoded frames were being dropped under a single "latest wins" slot the render loop didn't always poll in time before the next frame overwrote it. Queues pending video presentations the same way guest-image flips already are. - DirectExecutionBackend: the TLS load patcher's one-shot scan missed the main game module when the entry point resolves to a separate bootstrap allocation, and never re-scanned lazily-committed pages patched in afterward -- both left FS:[0] TLS loads unpatched, causing an early mutex-spin boot stall (reproduced on Demon's Souls: stuck at import #256). Now scans both the entry point's own allocation and the standard PS5/PS4 image base, and re-scans each newly committed executable range as it's touched. * [GUI] Add a toggle for SHARPEMU_FORCE_SUBMIT_ORPHAN_PREAMBLES This flag already existed as an AGC workaround (forces queued GPU command-buffer preambles through when their target queue never picks them up, unblocking titles stuck on a WAIT_REG_MEM that never signals) but was only reachable by setting the environment variable by hand. Expose it as a checkbox next to the other env toggles, in both the global Options panel and the per-game settings panel, so it can be turned on for a specific title without touching a shell. * [GUI] Add remaining language translations for the new env toggle The previous commit only added the new key to en.json/fr.json, relying on Localization's runtime fallback to English -- but LocalizationTests.EmbeddedLanguages_ContainEveryEnglishOptionsKey requires every Options.* key to exist in every embedded language file, which broke CI on all three build jobs. Fills in the remaining 13 languages.
209 lines
14 KiB
JSON
209 lines
14 KiB
JSON
{
|
|
"_languageName": "العربية",
|
|
|
|
"Page.Library": "المكتبة",
|
|
"Page.Options": "الخيارات",
|
|
"Page.GameCount.One": "لعبة واحدة",
|
|
"Page.GameCount.Other": "{0} لعبة",
|
|
|
|
"Library.SearchWatermark": "ابحث في المكتبة...",
|
|
"Library.AddFolder": "إضافة مجلد",
|
|
"Library.OpenFile": "فتح ملف...",
|
|
|
|
"Library.Context.Launch": "تشغيل",
|
|
"Library.Context.OpenFolder": "فتح مجلد اللعبة",
|
|
"Library.Context.CopyPath": "نسخ المسار",
|
|
"Library.Context.CopyTitleId": "نسخ معرف العنوان",
|
|
"Library.Context.Remove": "إزالة من المكتبة",
|
|
|
|
"Library.Empty.Title": "مكتبتك فارغة",
|
|
"Library.Empty.Hint": "أضف مجلداً يحتوي على ألعابك للبدء.",
|
|
"Library.Empty.SearchTitle": "لا توجد ألعاب تطابق بحثك",
|
|
"Library.Empty.SearchHint": "لا شيء في المكتبة يطابق “{0}”.",
|
|
"Library.Empty.AddFolder": "+ إضافة مجلد ألعاب",
|
|
|
|
"Library.Loading": "جارٍ تحميل المكتبة...",
|
|
"Library.Stat.Version": "الإصدار",
|
|
"Library.Stat.Installed": "المثبت",
|
|
"Library.Stat.TitleId": "معرّف اللعبة",
|
|
"Common.Back": "رجوع",
|
|
|
|
"Options.General": "عام",
|
|
"Options.Logging": "التسجيل",
|
|
"Options.Section.Emulation": "المحاكاة",
|
|
"Options.Section.Logging": "التسجيل",
|
|
"Options.Section.Launcher": "المُشغِّل",
|
|
|
|
"Options.CpuEngine.Label": "محرك المعالج",
|
|
"Options.CpuEngine.Desc": "محرك التنفيذ المستخدم لتشغيل كود اللعبة.",
|
|
"Options.CpuEngine.Native": "أصلي",
|
|
|
|
"Options.Strict.Label": "ربط صارم للمكتبات الديناميكية (dynlib)",
|
|
"Options.Strict.Desc": "إفشال التشغيل عندما يتعذر التعرف على رمز مستورد.",
|
|
|
|
"Options.LogLevel.Label": "مستوى التسجيل",
|
|
"Options.LogLevel.Desc": "مدى تفصيل مخرجات نافذة سجلات المحاكي.",
|
|
"Options.LogLevel.Trace": "تتبع",
|
|
"Options.LogLevel.Debug": "تصحيح الأخطاء",
|
|
"Options.LogLevel.Info": "معلومات",
|
|
"Options.LogLevel.Warning": "تحذير",
|
|
"Options.LogLevel.Error": "خطأ",
|
|
"Options.LogLevel.Critical": "حرج",
|
|
|
|
"Options.TraceImports.Label": "حد تتبع الاستيراد",
|
|
"Options.TraceImports.Desc": "تتبع أول N استيراد لكل وحدة (0 = إيقاف).",
|
|
|
|
"Options.LogToFile.Label": "التسجيل في ملف",
|
|
"Options.LogToFile.Desc": "نسخ مخرجات المحاكي إلى ملف سجل.",
|
|
|
|
"Options.LogFilePath.Label": "مسار ملف السجل",
|
|
"Options.LogFilePath.Default": "لا يوجد مسار مخصص — تُحفظ السجلات في user/logs بجوار المحاكي.",
|
|
"Options.LogFilePath.Select": "تحديد...",
|
|
|
|
"Options.OverrideLogFile.Label": "الكتابة فوق ملف السجل",
|
|
"Options.OverrideLogFile.Desc": "استخدام مسار الملف الدقيق بدلاً من إلحاق معرف العنوان والطابع الزمني.",
|
|
|
|
"Options.TitleMusic.Label": "موسيقى اللعبة",
|
|
"Options.TitleMusic.Desc": "تكرار موسيقى المعاينة للعبة المحددة في المكتبة.",
|
|
|
|
"Options.Discord.Label": "حالة دسكورد",
|
|
"Options.Discord.Desc": "إظهار اللعبة قيد التشغيل في ملفك الشخصي على دسكورد.",
|
|
|
|
"Options.Language.Label": "لغة المحاكي",
|
|
"Options.Language.Desc": "اللغة المستخدمة في جميع أنحاء المشغل. تُطبق فوراً.",
|
|
"Options.DefaultProfile.Label": "اسم الملف الشخصي الافتراضي",
|
|
"Options.DefaultProfile.Desc": "الاسم المستخدم عندما تطلب لعبة إدخال نص. القيمة الافتراضية هي Sharp.",
|
|
|
|
"Common.On": "تشغيل",
|
|
"Common.Off": "إيقاف",
|
|
|
|
"Console.Title": "نافذة السجلات",
|
|
"Console.SearchWatermark": "بحث...",
|
|
"Console.AutoScroll": "تمرير تلقائي",
|
|
"Console.Split": "تقسيم",
|
|
"Console.Copy": "نسخ",
|
|
"Console.Clear": "مسح",
|
|
"Console.WindowTitle": "نافذة سجلات SharpEmu",
|
|
|
|
"Launch.NoGameSelected": "لم تُحدد أي لعبة",
|
|
"Launch.NoGameHint": "اختر لعبة من المكتبة، أو افتح ملف eboot.bin مباشرة.",
|
|
"Launch.Idle": "خامل",
|
|
"Launch.Console": "≡ نافذة السجلات",
|
|
"Launch.Launch": "▶ تشغيل",
|
|
"Launch.Stop": "■ إيقاف",
|
|
"Launch.Running": "قيد التشغيل — {0}",
|
|
"Launch.Stopping": "جارٍ الإيقاف...",
|
|
"Launch.Exited": "انتهى برمز {0} ({1})",
|
|
"Launch.ExeNotFound": "لم يُعثر على الملف التنفيذي SharpEmu. ابنِ مشروع SharpEmu.CLI أولاً (dotnet build).",
|
|
"Launch.LogFile": "ملف السجل: {0}",
|
|
"Launch.Command": "$ SharpEmu {0}",
|
|
"Launch.StartFailed": "فشل بدء تشغيل المحاكي: {0}",
|
|
"Launch.ProcessExited": "انتهت العملية برمز {0} ({1}).",
|
|
|
|
"Exit.Ok": "موافق",
|
|
"Exit.InvalidArguments": "معطيات غير صالحة",
|
|
"Exit.EbootNotFound": "لم يُعثر على eboot",
|
|
"Exit.RuntimeException": "استثناء وقت التشغيل",
|
|
"Exit.EmulationError": "خطأ في المحاكاة",
|
|
"Exit.Unknown": "غير معروف",
|
|
|
|
"Status.EmulatorLocating": "المحاكي: جارٍ تحديد الموقع...",
|
|
"Status.EmulatorPath": "المحاكي: {0}",
|
|
"Status.EmulatorNotFound": "المحاكي: لم يُعثر على الملف التنفيذي SharpEmu — ابنِ SharpEmu.CLI أولاً.",
|
|
"Status.ScanningLibrary": "جارٍ فحص المكتبة...",
|
|
"Status.AddFolderPrompt": "أضف مجلد ألعاب لملء المكتبة.",
|
|
"Status.LibraryScanned": "فُحصت المكتبة: {0} لعبة في {1} مجلد.",
|
|
"Status.CouldNotOpenFolder": "تعذر فتح المجلد: {0}",
|
|
"Status.CopiedToClipboard": "نُسخ {0} إلى الحافظة.",
|
|
"Status.RemovedFromLibrary": "أُزيل “{0}” من المكتبة. أعد إضافة مجلده لاستعادته.",
|
|
"Status.Running": "جارٍ تشغيل {0}",
|
|
"Status.Stopping": "جارٍ الإيقاف...",
|
|
"Status.Idle": "خامل",
|
|
|
|
"Clipboard.Path": "المسار",
|
|
"Clipboard.TitleId": "معرف العنوان",
|
|
|
|
"Discord.Playing": "يلعب {0}",
|
|
"Discord.Browsing": "يتصفح المكتبة",
|
|
|
|
"Dialog.ChooseGameFolder": "اختر مجلداً يحتوي على ألعاب",
|
|
"Dialog.OpenExecutable": "افتح ملفاً تنفيذياً لتشغيله",
|
|
"Dialog.PsExecutables": "ملفات PS التنفيذية",
|
|
"Dialog.SaveLogFile": "حدد مكان حفظ ملف السجل",
|
|
"Dialog.PlainTextFiles": "ملفات نصية عادية",
|
|
"Dialog.LogFiles": "ملفات السجل",
|
|
|
|
"Library.Context.GameSettings": "إعدادات اللعبة…",
|
|
"Options.Env.Tab": "البيئة",
|
|
"Options.Section.Environment": "متغيرات البيئة",
|
|
"Options.Env.Desc": "خيارات تُمرر إلى المحاكي كمتغيرات بيئة عند التشغيل.",
|
|
"Options.Env.Bthid.Desc": "الإبلاغ عن أن Bluetooth HID غير متاح للألعاب التي تنتظر برمجيات عجلة القيادة/FFB فيها إلى ما لا نهاية.\nاتركه معطلاً عادةً. بعض الألعاب تتجمد عند فشل التهيئة.",
|
|
"Options.Env.LoopGuard.Desc": "عدم إجبار الألعاب التي تكرر النداء نفسه لفترة طويلة على الإغلاق.\nجرّب هذا عندما تُغلق لعبة نفسها أثناء التحميل.",
|
|
"Options.Env.WritableApp0.Desc": "السماح للألعاب بإنشاء الملفات والكتابة داخل مجلد التثبيت الخاص بها.\nمطلوب للنسخ غير المحزومة التي تكتب بيانات الحفظ أو الإعدادات تحت /app0.",
|
|
"Options.Env.VkValidation.Desc": "تفعيل طبقات التحقق في Vulkan لتصحيح أخطاء وحدة معالجة الرسوميات.\nبطيء. يتطلب تثبيت Vulkan SDK.",
|
|
"Options.Env.DumpSpirv.Desc": "تفريغ شيدرات AGC وترجماتها إلى SPIR-V في مجلد shader-dumps.\nاستخدمه عند الإبلاغ عن أخطاء الشيدرات أو العرض.",
|
|
"Options.Env.LogDirectMemory.Desc": "تسجيل تخصيصات الذاكرة المباشرة وإخفاقاتها في وحدة التحكم.\nاستخدمه عندما تنهار لعبة أو تُغلق أثناء الإقلاع.",
|
|
"Options.Env.LogIo.Desc": "تسجيل فتح الملفات وقراءتها وحلّ المسارات في وحدة التحكم.\nاستخدمه عندما لا تجد لعبة ملفات بياناتها أثناء الإقلاع.",
|
|
"Options.Env.LogNp.Desc": "تسجيل نداءات مكتبة NP (شبكة PlayStation) في وحدة التحكم.",
|
|
"Options.Env.Group.Debug": "تصحيح الأخطاء",
|
|
"Options.Env.Group.General": "عام",
|
|
"Options.Env.RenderDoc.Desc": "يحمّل واجهة RenderDoc داخل التطبيق حتى يمكن التقاط الإطارات من داخل المحاكي.\nاضغط F10 أثناء تشغيل اللعبة لالتقاط إطار واحد؛ تُحفظ اللقطات في user/logs/capture_logs/<TITLE_ID>.\nيتطلب تثبيت RenderDoc. يبطئ وحدة معالجة الرسوميات ويسبب تعليق بعض الألعاب، لذا اتركه معطلاً ما لم تكن تصحح الأخطاء.",
|
|
"Options.Env.GuestImageCpuSync.Desc": "إعادة رفع أسطح الضيف التي تعيد كتابتها شيفرة المعالج الخاصة باللعبة.\nاتركه مغلقًا عادة. شغّله للألعاب التي لا تصل أسطحها المرسومة بالمعالج إلى الشاشة.\nيكلّف أداءً ويسبب مشاكل في بعض الألعاب مثل GTA V.",
|
|
"Options.Env.ForceSubmitOrphanPreambles.Desc": "تسليم مقدّمات المخازن المؤقتة لأوامر GPU حتى عندما لا تلتقطها قائمة الانتظار المستهدفة أبدًا.\nاتركه مغلقًا عادة. شغّله للألعاب التي تتجمد أثناء انتظار حاجز GPU لا يُشار إليه أبدًا.",
|
|
"Common.Save": "حفظ",
|
|
"Common.Cancel": "إلغاء",
|
|
"Options.About": "حول",
|
|
"About.Github.Label": "GitHub",
|
|
"About.Github.Desc": "الكود المصدري والمشكلات وتطوير المشروع.",
|
|
"About.Github.LatestCommitLabel": "أحدث Commit",
|
|
"About.Github.LatestCommitDescription": "أحدث commit على الفرع main",
|
|
"About.Discord.Label": "دسكورد",
|
|
"About.Discord.Desc": "انضم إلى المجتمع واحصل على الدعم وتابع التطوير.",
|
|
"About.GithubButton": "ساهم على GitHub!",
|
|
"About.DiscordComingSoon": "قريبًا",
|
|
"Updater.Auto.Label": "التحقق من التحديثات عند بدء التشغيل",
|
|
"Updater.Auto.Desc": "يتحقق من GitHub دون تأخير بدء التشغيل.",
|
|
"Updater.Label": "التحديثات",
|
|
"Updater.Check": "التحقق من التحديثات",
|
|
"Updater.DownloadRestart": "تنزيل وإعادة التشغيل",
|
|
"Updater.Status.Ready": "الإصدار الحالي: {0}",
|
|
"Updater.Status.Checking": "جارٍ التحقق من التحديثات…",
|
|
"Updater.Status.Current": "أنت على أحدث إصدار ({0}).",
|
|
"Updater.Status.Available": "يتوفر إصدار جديد: {0}",
|
|
"Updater.Status.Downloading": "جارٍ تنزيل التحديث… {0}%",
|
|
"Updater.Status.Installing": "جارٍ تثبيت التحديث…",
|
|
"Updater.Status.Timeout": "انتهت مهلة التحقق من التحديثات بعد 10 ثوانٍ.",
|
|
"Updater.Status.Failed": "تعذر التحقق من التحديثات.",
|
|
"Updater.Status.ChecksumFailed": "فشل التحديث المنزَّل في اجتياز تحقق SHA-256.",
|
|
"Updater.Status.Unsupported": "يتطلب التحديث التلقائي إصدار x64 لنظام Windows أو Linux أو macOS.",
|
|
"Options.Graphics": "الرسومات",
|
|
"Options.Section.Rendering": "التصيير",
|
|
"Options.Section.Display": "العرض",
|
|
"Options.RenderResolution.Label": "الدقة الداخلية",
|
|
"Options.RenderResolution.Desc": "تصيير الأهداف خارج الشاشة بدقة أقل من الدقة الأصلية ثم رفع دقتها عند العرض. تمنح القيم الأقل مساحة أكبر لوحدة معالجة الرسوميات مقابل جودة الصورة؛ يُطبق عند التشغيل التالي.",
|
|
"Options.RenderResolution.Native": "100% (أصلية)",
|
|
"Options.WindowMode.Label": "وضع النافذة",
|
|
"Options.WindowMode.Desc": "نافذة عادية، أو سطح مكتب بلا حدود، أو ملء شاشة حصري.",
|
|
"Options.WindowMode.Windowed": "نافذة",
|
|
"Options.WindowMode.Borderless": "بلا حدود",
|
|
"Options.WindowMode.Exclusive": "حصري",
|
|
"Options.Resolution.Label": "الدقة",
|
|
"Options.Resolution.Desc": "حجم النافذة الأولي أو دقة ملء الشاشة الحصرية.",
|
|
"Options.Display.Label": "الشاشة",
|
|
"Options.Display.Desc": "الشاشة المستخدمة للتوسيط وملء الشاشة.",
|
|
"Options.RefreshRate.Label": "معدل التحديث",
|
|
"Options.RefreshRate.Desc": "معدل تحديث ملء الشاشة الحصري. يختار الوضع التلقائي أقرب نمط.",
|
|
"Options.RefreshRate.Automatic": "تلقائي",
|
|
"Options.Scaling.Label": "التحجيم",
|
|
"Options.Scaling.Desc": "تحجيم صورة النظام الضيف الأصلية دون تغيير دقتها الداخلية.",
|
|
"Options.Scaling.Fit": "ملاءمة",
|
|
"Options.Scaling.Cover": "تغطية",
|
|
"Options.Scaling.Stretch": "تمديد",
|
|
"Options.Scaling.Integer": "عدد صحيح",
|
|
"Options.VSync.Label": "VSync",
|
|
"Options.VSync.Desc": "استخدام عرض FIFO لإخراج خالٍ من تمزق الصورة.",
|
|
"Options.Hdr.Label": "إخراج HDR",
|
|
"Options.Hdr.Desc": "استخدام HDR عندما تدعمه الشاشة المحددة وواجهة الرسومات. يعود الوضع التلقائي إلى SDR.",
|
|
"Options.Hdr.Auto": "تلقائي"
|
|
}
|