mirror of
https://github.com/lobehub/lobehub.git
synced 2026-03-27 13:29:15 +07:00
* 🐛 fix: add unsaved changes guard to prevent data loss on navigation Migrate from BrowserRouter to createBrowserRouter (data router API) to enable route-level navigation blocking. Add UnsavedChangesGuard component that uses useBlocker to prevent leaving editor pages with unsaved changes, auto-saving before navigation. Remove legacy renderRoutes/RouteConfig dead code. Fixes LOBE-4973 * 🔧 chore: remove unused ESLint suppressions for welcome.ts Cleaned up eslint-suppressions.json by removing suppressions related to sort-keys-fix and typescript-sort-keys for welcome.ts, as they are no longer needed. Signed-off-by: Innei <tukon479@gmail.com> * ⚡ perf: skip JSON snapshot on selection-only Lexical updates Reintroduce dirtyElements/dirtyLeaves guard before editor.getDocument('json') and deep-equality check, avoiding O(document-size) work on caret/selection updates that do not mutate content. * 🔧 test: update UnsavedChangesGuard tests to use message.destroy instead of message.success Signed-off-by: Innei <tukon479@gmail.com> * fix: dayjs init - Moved dayjs plugin extensions (relativeTime, utc, isToday, isYesterday) to src/initialize.ts for centralized initialization. - Removed redundant extensions from individual components to prevent duplicate calls. - Updated locale loading logic in Locale.tsx to ensure correct dayjs locale handling. This change improves performance by ensuring dayjs plugins are only extended once during application initialization. Signed-off-by: Innei <tukon479@gmail.com> * refactor: update router configuration to use RouteObject type - Changed the type of desktopRoutes from RouteConfig[] to RouteObject[] for better compatibility with react-router-dom. - Removed the RouteConfig interface from the router utility file to streamline the codebase. This refactor enhances the router's integration with the latest routing library standards. Signed-off-by: Innei <tukon479@gmail.com> * feat: enhance Vite configuration and chunk management - Added a function to suppress Vite's default URL print in the server configuration. - Updated chunk file naming strategy in sharedRollupOutput to organize output files into specific directories based on chunk type (i18n, vendor, assets). - Removed redundant dayjs chunk handling logic to streamline the manualChunks function. These changes improve the clarity of the build output and enhance the server's configuration options. Signed-off-by: Innei <tukon479@gmail.com> * ✨ feat: add collapsible error stack with __CI__ default expand - Add Collapse + Highlighter for error stack in Error component - Define __CI__ in Vite (sharedRendererDefine) based on process.env.CI - Add __CI__ to global.d.ts - Add error.stack i18n to all 18 locales Made-with: Cursor * chore: update build:spa:copy script to handle multiple asset directories - Modified the build:spa:copy script in package.json to iterate over multiple directories (assets, i18n, vendor) for both desktop and mobile builds, improving the asset copying process. This change enhances the build process by ensuring all relevant directories are copied correctly. Signed-off-by: Innei <tukon479@gmail.com> * 🐛 fix: mark initialize.ts as sideEffects to prevent tree-shaking sideEffects: false caused Rollup to drop the side-effect-only import of initialize.ts, removing dayjs.extend(relativeTime) and enableMapSet() from the production bundle. --------- Signed-off-by: Innei <tukon479@gmail.com>
51 lines
3.0 KiB
JSON
51 lines
3.0 KiB
JSON
{
|
|
"chat.avatar": "الصورة الرمزية",
|
|
"chat.placeholder": "...",
|
|
"common.cancel": "إلغاء",
|
|
"common.confirm": "تأكيد",
|
|
"common.delete": "حذف",
|
|
"common.edit": "تعديل",
|
|
"editableMessage.addProps": "إضافة خصائص",
|
|
"editableMessage.delete": "حذف",
|
|
"editableMessage.input": "المدخلات",
|
|
"editableMessage.inputPlaceholder": "يرجى إدخال محتوى مدخلات تجريبي",
|
|
"editableMessage.output": "المخرجات",
|
|
"editableMessage.outputPlaceholder": "يرجى إدخال محتوى مخرجات تجريبي",
|
|
"editableMessage.system": "النظام",
|
|
"emojiPicker.delete": "حذف",
|
|
"emojiPicker.draggerDesc": "انقر أو اسحب الصورة إلى هذه المنطقة للتحميل",
|
|
"emojiPicker.emoji": "رموز تعبيرية",
|
|
"emojiPicker.fileTypeError": "يمكنك تحميل ملفات الصور فقط!",
|
|
"emojiPicker.upload": "تحميل",
|
|
"emojiPicker.uploadBtn": "قص وتحميل",
|
|
"form.reset": "إعادة تعيين",
|
|
"form.submit": "إرسال",
|
|
"form.unsavedChanges": "تغييرات غير محفوظة",
|
|
"form.unsavedWarning": "لديك تغييرات غير محفوظة. هل أنت متأكد أنك تريد المغادرة؟",
|
|
"hotkey.conflict": "هذا الاختصار يتعارض مع اختصار موجود.",
|
|
"hotkey.invalidCombination": "يجب أن يتضمن الاختصار مفتاح تعديل (Ctrl أو Alt أو Shift) ومفتاح عادي واحد فقط.",
|
|
"hotkey.placeholder": "اضغط على المفاتيح لتسجيل الاختصار",
|
|
"hotkey.reset": "إعادة التعيين إلى الوضع الافتراضي",
|
|
"messageModal.cancel": "إلغاء",
|
|
"messageModal.confirm": "تأكيد",
|
|
"messageModal.edit": "تعديل",
|
|
"sideNav.collapse": "طي الشريط الجانبي",
|
|
"sideNav.demoActiveLabel": "نشط",
|
|
"sideNav.demoFeatureAutoCollapseDesc": "اسحب أسفل العتبة للطي الذكي",
|
|
"sideNav.demoFeatureAutoCollapseTitle": "الطي التلقائي",
|
|
"sideNav.demoFeaturePerformanceDesc": "بدون رسوم متحركة لأداء أفضل",
|
|
"sideNav.demoFeaturePerformanceTitle": "الأداء",
|
|
"sideNav.demoFeatureResizeDesc": "اسحب لتعديل عرض اللوحة",
|
|
"sideNav.demoFeatureResizeTitle": "تعديل مرن",
|
|
"sideNav.demoFeatureSmartHandleDesc": "مرر لإظهار زر التبديل",
|
|
"sideNav.demoFeatureSmartHandleTitle": "مقبض ذكي",
|
|
"sideNav.demoFeaturesTitle": "الميزات",
|
|
"sideNav.demoHint": "جرّب سحب حافة اللوحة واستخدام زر التبديل ->",
|
|
"sideNav.demoSubtitle": "لوحة جانبية بأسلوب مساحة العمل مع إمكانية تغيير الحجم بالسحب",
|
|
"sideNav.demoTitle": "عرض توضيحي لـ DraggableSideNav",
|
|
"sideNav.expand": "توسيع الشريط الجانبي",
|
|
"tokenTag.overload": "زيادة التحميل",
|
|
"tokenTag.remained": "المتبقي",
|
|
"tokenTag.used": "المستخدم"
|
|
}
|