diff --git a/package-lock.json b/package-lock.json index 3d3fadfd..fc1a177f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "AGPL-3.0-or-later", "dependencies": { - "@openmouse/keyboard-protocol": "1.4.0", + "@openmouse/keyboard-protocol": "1.6.1", "@openmouse/protocol": "0.49.0", "lucide-react": "^1.43.0", "posthog-js": "^1.438.17", @@ -483,9 +483,9 @@ } }, "node_modules/@openmouse/keyboard-protocol": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@openmouse/keyboard-protocol/-/keyboard-protocol-1.4.0.tgz", - "integrity": "sha512-L+a7j9xi2DmI/EZaRLBWhC+mBboD7qIEMLqyMhjgoQlGd76HgN48yd6E67Bn7KnsI8RxbcVI41iwahyj2VCHyQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@openmouse/keyboard-protocol/-/keyboard-protocol-1.6.1.tgz", + "integrity": "sha512-qWCE4OPOWP82hzSSmyIDEVL9ccHsM/4lKADlN6dVxM1GXuEJu/WgykFFbclh4msx1Vn93FTJB6z6bBMg9Zpylw==", "license": "AGPL-3.0-or-later", "engines": { "node": ">=20" diff --git a/package.json b/package.json index d6e57b0f..a21baca9 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ "preview": "vite preview" }, "dependencies": { - "@openmouse/keyboard-protocol": "1.4.0", + "@openmouse/keyboard-protocol": "1.6.1", "@openmouse/protocol": "0.49.0", "lucide-react": "^1.43.0", "posthog-js": "^1.438.17", diff --git a/src/i18n/locales/ar.ts b/src/i18n/locales/ar.ts index 52e09b02..a2847cd6 100644 --- a/src/i18n/locales/ar.ts +++ b/src/i18n/locales/ar.ts @@ -44,8 +44,8 @@ export const ar: Record = { "bridge.connected": "متصل", "games.subtitle": "اختر إعدادًا جاهزًا أو أضف ألعابك وتطبيقاتك الخاصة لحفظها محليًا في Bridge.", "games.autoApply": "تلقائي", - "games.needsBridgeTitle": "ملفات الألعاب تحتاج إلى OpenMouse Bridge", - "games.needsBridgeBody": "يعمل Bridge بجانب متصفحك، ويلاحظ بدء اللعبة ويحوّل ماوسك إلى إعدادات تلك اللعبة. شغّل Bridge أو نزّله لإعداد ملف.", + "games.needsBridgeTitle": "بروفايلات الألعاب تتطلب OpenMouse Bridge", + "games.needsBridgeBody": "يعمل Bridge مع متصفحك، حيث يكتشف تشغيل اللعبة ويحوّل الماوس تلقائياً إلى إعداداتها. شغّل Bridge أو قم بتنزيله لضبط ملف التعريف (البروفايل).", "games.settings": "الإعدادات", "games.settingsHint": "تُحفظ فقط في ملف تعريف {name}. تُطبَّق هذه الإعدادات عندما يكون الملف نشطًا، وتعود إعداداتك السابقة عند إيقافه.", "games.changedCount": "إعدادات مخصّصة لهذه اللعبة: {n}", @@ -97,7 +97,7 @@ export const ar: Record = { "games.applyNow": "تطبيق الآن", "games.appliedNow": "تم التطبيق على الماوس", "games.appliedNowDetail": "ستعود إعداداتك السابقة عند مغادرة هذه الصفحة.", - "perf.bunnyHostNote": "يُطبَّق مباشرة أثناء وجود الماوس على ملف Host. لا يستطيع الماوس إعادة هذا الإعداد، لذا القيمة المعروضة هي آخر قيمة ضُبطت هنا.", + "perf.bunnyHostNote": "يُطبّق فوراً طالما الماوس على ملف التعريف الرئيسي (Host). الماوس لا يدعم قراءة هذا الإعداد، لذا فإن القيمة المعروضة هي آخر قيمة تم ضبطها هنا.", "bridge.profileEnabled": "تم تفعيل التطبيق التلقائي", "bridge.profileEnabledDetail": "سيدفع Bridge هذا الملف إلى ماوسك فور تشغيل {name}.", "bridge.profileUpdated": "تم تحديث الملف", @@ -126,14 +126,14 @@ export const ar: Record = { "ov.firmware": "البرنامج الثابت", "ov.fwSingle": "البرنامج الثابت المُبلَّغ من الماوس", "ov.fwNone": "غير مُبلَّغ", - "fw.title": "Firmware update", + "fw.title": "تحديث الـ Firmware", "fw.checking": "Checking\u2026", "fw.upToDate": "Up to date", "fw.available": "Update available", "fw.required": "Required update", "fw.unknown": "Unknown", "fw.unknownDetail": "No entry for this model yet.", - "fw.check": "Check", + "fw.check": "فحص التحديثات", "fw.retry": "Retry", "fw.later": "Later", "fw.download": "Download", @@ -144,7 +144,7 @@ export const ar: Record = { "fw.changelog": "Changelog", "fw.history": "Version history", "fw.dataFrom": "Update data from {date}", - "fw.sectionLabel": "Firmware update", + "fw.sectionLabel": "تحديث الـ Firmware", "fw.receiverIdentity": "لا يمكن لـ OpenMouse قراءة إصدار برنامج المستقبل الثابت، لذلك لا يُفحص بحثًا عن تحديثات.", "fw.receiverMcu": "مُحمّل إقلاع MCU {mcu} {value}", "ov.connection": "الاتصال", @@ -189,7 +189,7 @@ export const ar: Record = { "hw.transport": "النقل", "hw.driver": "التعريف", "hw.rates": "المعدلات المدعومة", - "hw.lod": "مسافة الرفع", + "hw.lod": "مسافة الرفع (LOD)", "hw.mode": "وضع الجهاز", "hw.receiver": "المستقبل", "hw.signal": "الإشارة", @@ -213,7 +213,7 @@ export const ar: Record = { "set.importKey": "استيراد رمز", "set.importPlaceholder": "الصق رمز ملف هنا…", "set.import": "استيراد", - "set.soundTitle": "الصوت", + "set.soundTitle": "التنبيهات الصوتية", "set.soundDescription": "تشغيل نغمة عند الاتصالات الجديدة والتنبيهات", "set.importNote": "تُدرج الإعدادات المستوردة كأي تعديل آخر — لا يُكتب شيء حتى تثبّتها.", "set.appearance": "المظهر", @@ -356,8 +356,8 @@ export const ar: Record = { "dpi.perProfile": "لكل ملف", "dpi.value": "قيمة DPI", "dpi.presets": "قيم DPI الشائعة", - "dpi.presetsInUse": "الإعدادات المسبقة المستخدمة", - "dpi.slotsInUse": "الفتحات المستخدمة", + "dpi.presetsInUse": "الإعدادات النشطة", + "dpi.slotsInUse": "الخانات المستخدمة", "dpi.slotsCount": "عدد فتحات DPI", "dpi.startingSlot": "فتحة البداية", "dpi.makeStarting": "اجعل هذه فتحة البداية", @@ -387,7 +387,7 @@ export const ar: Record = { "dpi.editorCountNote": "صف واحد لكل مرحلة DPI. حدّد صفًا لتضمينه في دورة DPI؛ أزل التحديد لتعطيله والاحتفاظ بالقيمة لاحقًا. انقر رقمًا لجعله مرحلة البداية.", "dpi.editorFixedNote": "صف واحد لكل مرحلة DPI، {total} ثابتة. عدّل القيمة أو المنزلق لتغييرها. انقر رقمًا لجعله المرحلة النشطة.", "dpi.stagesReadOnly": "تأتي مراحل DPI هذه من الماوس للقراءة فقط، ولا يمكن تعديلها هنا. غيّرها في برنامج الشركة المصنّعة.", - "dpi.editorGenericNote": "صف واحد لكل DPI مسبق. حدّد صفًا (أو انقر رقمه) لجعله DPI الحالي؛ تبقى الصفوف غير المحددة كاختيارات لاحقًا.", + "dpi.editorGenericNote": "صفّ لكل DPI. انقر على الصف أو رقمه لتفعيله؛ وتُترك البقية كخيارات جاهزة للتبديل لاحقاً.", "dpi.singleOverwritesNote": "Save writes this DPI to all {total} stages and overwrites their values. Your old stages are kept in this browser. Switch back to Stages to restore them.", "dpi.xAxis": "المحور X", "dpi.yAxis": "المحور Y", @@ -406,7 +406,7 @@ export const ar: Record = { "perf.wired": "سلكي", "perf.wireless": "لاسلكي", "perf.gamingSurface": "سطح الألعاب", - "perf.surfaceNote": "يضبط المستشعر لوسائد الماوس المخصصة للألعاب. «تلقائي» يدع الماوس يقرر؛ أوقفه إذا ساء التتبع على سطح غير مخصص للألعاب.", + "perf.surfaceNote": "يضبط المستشعر للماوس باد المخصصة للألعاب. خيار «تلقائي» يترك التعين للماوس؛ أوقفه إذا واجهت مشاكل في التتبع على سطوح أخرى.", "perf.scanningMode": "Sensor scanning mode", "perf.scanningNote": "HIGH is the default sensor frame rate. ACCEL pins the sensor to high performance and uses more battery.", "perf.dynSens": "DPI acceleration", @@ -423,7 +423,7 @@ export const ar: Record = { "perf.jump": "Jump", "perf.custom": "Custom", "perf.auto": "تلقائي", - "perf.liftOff": "مسافة الرفع", + "perf.liftOff": "مسافة الرفع (LOD)", "perf.liftOffMode": "وضع الرفع", "perf.single": "مفرد", "perf.asymmetric": "غير متماثل", @@ -433,15 +433,15 @@ export const ar: Record = { "perf.lodMedium": "متوسط", "perf.lodHigh": "مرتفع", "perf.lodNeedSurface": "فعّل سطح الألعاب أو اضبطه على «تلقائي» لضبط مسافة الرفع.", - "perf.lodNote": "يتحكم في مدى ارتفاعك للماوس قبل توقف التتبع. القيم الأعلى تُبقي التتبع أطول قليلًا.", - "perf.bunnyHop": "القفز المتكرر", + "perf.lodNote": "يحدد الارتفاع الذي يتوقف عنده تتبع الحركة عند رفع الماوس عن السطح. اختر مستويات أعلى لتغيير المسافة.", + "perf.bunnyHop": "Bunny hop", "perf.bunnyTime": "مدة القفز المتكرر بالمللي ثانية", "perf.bunnyReadonly": "لم تُتحقق صيغة هذا الملف على العتاد، لذا فهي للقراءة فقط.", "perf.bunnyNote": "يتجاهل أول خطوة لعجلة التمرير ما لم تتبعها خطوة ثانية خلال هذه النافذة، حتى لا تؤدي حركة عرضية إلى تنفيذ قفزة مُعيّنة على العجلة. لا يؤثر على النقرات. {min}–{max} مللي ثانية بخطوات {step}.", "perf.hybrid": "هجين", - "perf.opticalOnly": "بصري فقط", + "perf.opticalOnly": "ضوئي فقط", "perf.lightforceMode": "وضع مفتاح LightForce", - "perf.lightforceNote": "«هجين» يوفّر الطاقة باستخدام التلامس الميكانيكي ولا يوقظ المستشعر البصري إلا عند الحاجة. «بصري فقط» ثابت لكنه يستهلك بطارية أكثر.", + "perf.lightforceNote": "«هجين» يوفّر الطاقة باستخدام التلامس الميكانيكي ولا يوقظ المستشعر الضوئي إلا عند الحاجة. «ضوئي فقط» ثابت لكنه يستهلك بطارية أكثر.", "light.receiverTitle": "إضاءة المستقبل", "light.zoneTitle": "إضاءة {zone}", "light.writeOnly": "كتابة فقط", @@ -981,7 +981,7 @@ export const ar: Record = { "supp.stLikely": "يحتاج اختبارًا", "supp.stDriver": "يحتاج تعريفًا", "supp.stUnknown": "غير معروف", - "supp.stBridge": "يحتاج Bridge", + "supp.stBridge": "يتطلب Bridge", "supp.stPending": "مطلوب", "supp.tabAll": "الكل", "supp.legSupported": "مؤكَّد عمله مع تعريف مسجَّل", @@ -1377,7 +1377,7 @@ export const ar: Record = { "home.next": "الجهاز التالي", "home.subtitle": "الأجهزة التي يستطيع هذا المتصفح فتحها. اختر جهازًا لتغيير إعداداته.", "bridge.statusOn": "Bridge متصل", - "bridge.statusOff": "Bridge لا يعمل", + "bridge.statusOff": "Bridge غير متصل", "bridge.body": "تطبيق مكتبي صغير ينقل تقارير الجهاز إلى هذه الصفحة. يصل إلى فئران Razer التي يحظرها Chrome الآن، ويضيف ملفات تعريف لكل لعبة وتنبيهات انخفاض البطارية.", "bridge.download": "تنزيل Bridge", "bridge.statusLabel": "الحالة",