397a384785
User asked to remove the hardcoded "TeaBoy" branding and let admins change the system name. Also completes the in-progress service image upload work via App Storage. Changes: - New app_settings table (single row id=1) with siteNameAr/siteNameEn - New /settings endpoints: GET (public) + PATCH (admin) - Atomic ensureSettingsRow via INSERT ... ON CONFLICT DO NOTHING to avoid race conditions - New SiteSettingsPanel tab in admin page (Arabic + English inputs) - New useAppName hook reads settings, updates document.title, falls back to defaults while loading - Login + register pages now display the dynamic site name - Service image upload (App Storage) wired via useUpload + presigned GCS URL flow; admin component ServiceImageUploader - Storage routes: /storage/uploads/request-url and /storage/objects/* now require auth (closes previously-open endpoints flagged by review) - Added AppSettings/UpdateAppSettingsBody + storage schemas to openapi.yaml; regenerated client and zod - Exposed UploadResponse from @workspace/object-storage-web; added composite:true so it can be referenced by teaboy-os tsconfig Validation: typechecks pass for api-server and teaboy-os; settings GET returns row; upload URL endpoint returns 401 without auth.
116 lines
4.0 KiB
JSON
116 lines
4.0 KiB
JSON
{
|
|
"nav": {
|
|
"home": "الرئيسية",
|
|
"services": "الخدمات",
|
|
"chat": "المحادثات",
|
|
"notifications": "الإشعارات",
|
|
"admin": "لوحة التحكم",
|
|
"logout": "تسجيل الخروج"
|
|
},
|
|
"auth": {
|
|
"login": "تسجيل الدخول",
|
|
"register": "إنشاء حساب",
|
|
"username": "اسم المستخدم",
|
|
"email": "البريد الإلكتروني",
|
|
"password": "كلمة المرور",
|
|
"loginButton": "دخول",
|
|
"registerButton": "تسجيل",
|
|
"welcomeBack": "مرحباً بعودتك",
|
|
"createAccount": "حساب جديد",
|
|
"displayNameAr": "الاسم (عربي)",
|
|
"displayNameEn": "الاسم (إنجليزي)"
|
|
},
|
|
"home": {
|
|
"myApps": "تطبيقاتي"
|
|
},
|
|
"services": {
|
|
"title": "الخدمات",
|
|
"available": "متاح",
|
|
"unavailable": "غير متاح",
|
|
"price": "السعر",
|
|
"noServices": "لا توجد خدمات متاحة",
|
|
"category": "التصنيف",
|
|
"free": "مجاني"
|
|
},
|
|
"chat": {
|
|
"title": "المحادثات",
|
|
"newMessage": "رسالة جديدة",
|
|
"typeMessage": "اكتب رسالتك...",
|
|
"send": "إرسال",
|
|
"noConversations": "لا توجد محادثات",
|
|
"createConversation": "محادثة جديدة",
|
|
"groupChat": "مجموعة",
|
|
"directMessage": "محادثة خاصة",
|
|
"participants": "المشاركون",
|
|
"searchUsers": "البحث عن مستخدمين"
|
|
},
|
|
"notifications": {
|
|
"title": "الإشعارات",
|
|
"markAllRead": "تحديد الكل كمقروء",
|
|
"noNotifications": "لا توجد إشعارات جديدة",
|
|
"unread": "غير مقروء"
|
|
},
|
|
"admin": {
|
|
"title": "لوحة التحكم",
|
|
"manageApps": "إدارة التطبيقات",
|
|
"manageServices": "إدارة الخدمات",
|
|
"manageUsers": "إدارة المستخدمين",
|
|
"addApp": "إضافة تطبيق",
|
|
"addService": "إضافة خدمة",
|
|
"addUser": "إضافة مستخدم",
|
|
"editApp": "تعديل التطبيق",
|
|
"editService": "تعديل الخدمة",
|
|
"editUser": "تعديل المستخدم",
|
|
"deleteConfirm": "هل أنت متأكد من الحذف؟",
|
|
"activate": "تفعيل",
|
|
"deactivate": "تعطيل",
|
|
"appName": "اسم التطبيق",
|
|
"appNameAr": "اسم التطبيق (عربي)",
|
|
"appNameEn": "اسم التطبيق (إنجليزي)",
|
|
"appSlug": "المعرف",
|
|
"appRoute": "المسار",
|
|
"appIcon": "الأيقونة",
|
|
"appColor": "اللون",
|
|
"appSortOrder": "الترتيب",
|
|
"serviceName": "اسم الخدمة",
|
|
"serviceNameAr": "اسم الخدمة (عربي)",
|
|
"serviceNameEn": "اسم الخدمة (إنجليزي)",
|
|
"serviceDescriptionAr": "الوصف (عربي)",
|
|
"serviceDescriptionEn": "الوصف (إنجليزي)",
|
|
"servicePrice": "السعر",
|
|
"serviceAvailable": "متاح؟",
|
|
"serviceImageUrl": "رابط الصورة",
|
|
"serviceImage": "صورة الخدمة",
|
|
"uploadImage": "رفع صورة",
|
|
"replaceImage": "استبدال الصورة",
|
|
"uploading": "جاري الرفع...",
|
|
"uploadFailed": "فشل رفع الصورة",
|
|
"users": "المستخدمين",
|
|
"username": "اسم المستخدم",
|
|
"email": "البريد الإلكتروني",
|
|
"password": "كلمة المرور",
|
|
"roles": "الصلاحيات",
|
|
"active": "نشط",
|
|
"siteSettings": "إعدادات الموقع",
|
|
"siteNameAr": "اسم الموقع (عربي)",
|
|
"siteNameEn": "اسم الموقع (إنجليزي)"
|
|
},
|
|
"notFound": {
|
|
"title": "404 — الصفحة غير موجودة",
|
|
"description": "الصفحة التي تبحث عنها غير موجودة."
|
|
},
|
|
"common": {
|
|
"save": "حفظ",
|
|
"cancel": "إلغاء",
|
|
"delete": "حذف",
|
|
"edit": "تعديل",
|
|
"add": "إضافة",
|
|
"close": "إغلاق",
|
|
"loading": "جاري التحميل...",
|
|
"error": "حدث خطأ",
|
|
"success": "تمت العملية بنجاح",
|
|
"language": "English",
|
|
"appName": "نظام TeaBoy"
|
|
}
|
|
}
|