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
3.1 KiB
JSON
116 lines
3.1 KiB
JSON
{
|
|
"nav": {
|
|
"home": "Home",
|
|
"services": "Services",
|
|
"chat": "Chat",
|
|
"notifications": "Notifications",
|
|
"admin": "Admin Dashboard",
|
|
"logout": "Logout"
|
|
},
|
|
"auth": {
|
|
"login": "Login",
|
|
"register": "Register",
|
|
"username": "Username",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"loginButton": "Login",
|
|
"registerButton": "Register",
|
|
"welcomeBack": "Welcome Back",
|
|
"createAccount": "Create Account",
|
|
"displayNameAr": "Name (Arabic)",
|
|
"displayNameEn": "Name (English)"
|
|
},
|
|
"home": {
|
|
"myApps": "My Apps"
|
|
},
|
|
"services": {
|
|
"title": "Services",
|
|
"available": "Available",
|
|
"unavailable": "Unavailable",
|
|
"price": "Price",
|
|
"noServices": "No services available",
|
|
"category": "Category",
|
|
"free": "Free"
|
|
},
|
|
"chat": {
|
|
"title": "Chat",
|
|
"newMessage": "New Message",
|
|
"typeMessage": "Type a message...",
|
|
"send": "Send",
|
|
"noConversations": "No conversations",
|
|
"createConversation": "New Conversation",
|
|
"groupChat": "Group Chat",
|
|
"directMessage": "Direct Message",
|
|
"participants": "Participants",
|
|
"searchUsers": "Search users"
|
|
},
|
|
"notifications": {
|
|
"title": "Notifications",
|
|
"markAllRead": "Mark All Read",
|
|
"noNotifications": "No new notifications",
|
|
"unread": "Unread"
|
|
},
|
|
"admin": {
|
|
"title": "Admin Dashboard",
|
|
"manageApps": "Manage Apps",
|
|
"manageServices": "Manage Services",
|
|
"manageUsers": "Manage Users",
|
|
"addApp": "Add App",
|
|
"addService": "Add Service",
|
|
"addUser": "Add User",
|
|
"editApp": "Edit App",
|
|
"editService": "Edit Service",
|
|
"editUser": "Edit User",
|
|
"deleteConfirm": "Are you sure you want to delete?",
|
|
"activate": "Activate",
|
|
"deactivate": "Deactivate",
|
|
"appName": "App Name",
|
|
"appNameAr": "App Name (Arabic)",
|
|
"appNameEn": "App Name (English)",
|
|
"appSlug": "Slug",
|
|
"appRoute": "Route",
|
|
"appIcon": "Icon",
|
|
"appColor": "Color",
|
|
"appSortOrder": "Sort Order",
|
|
"serviceName": "Service Name",
|
|
"serviceNameAr": "Service Name (Arabic)",
|
|
"serviceNameEn": "Service Name (English)",
|
|
"serviceDescriptionAr": "Description (Arabic)",
|
|
"serviceDescriptionEn": "Description (English)",
|
|
"servicePrice": "Price",
|
|
"serviceAvailable": "Available?",
|
|
"serviceImageUrl": "Image URL",
|
|
"serviceImage": "Service Image",
|
|
"uploadImage": "Upload Image",
|
|
"replaceImage": "Replace Image",
|
|
"uploading": "Uploading...",
|
|
"uploadFailed": "Image upload failed",
|
|
"users": "Users",
|
|
"username": "Username",
|
|
"email": "Email",
|
|
"password": "Password",
|
|
"roles": "Roles",
|
|
"active": "Active",
|
|
"siteSettings": "Site Settings",
|
|
"siteNameAr": "Site Name (Arabic)",
|
|
"siteNameEn": "Site Name (English)"
|
|
},
|
|
"notFound": {
|
|
"title": "404 — Page Not Found",
|
|
"description": "The page you are looking for does not exist."
|
|
},
|
|
"common": {
|
|
"save": "Save",
|
|
"cancel": "Cancel",
|
|
"delete": "Delete",
|
|
"edit": "Edit",
|
|
"add": "Add",
|
|
"close": "Close",
|
|
"loading": "Loading...",
|
|
"error": "An error occurred",
|
|
"success": "Success",
|
|
"language": "العربية",
|
|
"appName": "TeaBoy OS"
|
|
}
|
|
}
|