diff --git a/public/locales/ar/common.json b/public/locales/ar/common.json index 080179a..60b1e2c 100644 --- a/public/locales/ar/common.json +++ b/public/locales/ar/common.json @@ -14,5 +14,20 @@ "copied": "تم النسخ!", "settings": "الإعدادات", "yes": "نعم", - "no": "لا" + "no": "لا", + "back": "رجوع", + "backToCalendar": "العودة إلى التقويم", + "logout": "تسجيل الخروج", + "version": "النسخة", + "navigation": { + "allTasks": "جميع المهام", + "archived": "المؤرشفة", + "things": "الأشياء", + "labels": "التسميات", + "projects": "المشاريع", + "filters": "الفلاتر", + "activities": "الأنشطة", + "points": "النقاط", + "settings": "الإعدادات" + } } diff --git a/public/locales/en/chores.json b/public/locales/en/chores.json index 0f74f22..7695cee 100644 --- a/public/locales/en/chores.json +++ b/public/locales/en/chores.json @@ -5,10 +5,51 @@ "addChore": "Add Chore", "editChore": "Edit Chore", "deleteChore": "Delete Chore", - "completeChore": "Complete Chore", + "completeChore": "Complete Task", "dueDate": "Due Date", "assignedTo": "Assigned To", "priority": "Priority", "status": "Status", - "description": "Description" + "description": "Description", + "choreView": { + "assignment": "Assignment", + "assigned": "Assigned", + "last": "Last", + "schedule": "Schedule", + "due": "Due", + "statistics": "Statistics", + "completed": "Completed", + "times": "times", + "details": "Details", + "createdBy": "Created By", + "na": "N/A", + "taskCompleted": "Task Completed", + "undoSuccessful": "Undo Successful", + "undoFailed": "Undo Failed", + "resetTimer": "Reset Timer", + "clearAllTimeRecords": "Clear All Time Records", + "descriptionTitle": "Description", + "previousNote": "Previous Note", + "skipTask": "Skip Task", + "markComplete": "Mark Complete", + "edit": "Edit", + "archive": "Archive", + "unarchive": "Unarchive", + "viewHistory": "View History", + "startTimer": "Start Timer", + "pauseTimer": "Pause Timer", + "approve": "Approve", + "reject": "Reject", + "undo": "Undo", + "skip": "Skip", + "addNote": "Add a note...", + "subtasks": "Subtasks", + "noDescription": "No description available", + "timer": { + "active": "Timer Active", + "paused": "Timer Paused", + "reset": "Reset Timer", + "delete": "Delete Session" + } + } } diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 31ee53c..fa493cf 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -14,5 +14,20 @@ "copied": "Copied!", "settings": "Settings", "yes": "Yes", - "no": "No" + "no": "No", + "back": "Back", + "backToCalendar": "Back to Calendar", + "logout": "Logout", + "version": "Version", + "navigation": { + "allTasks": "All Tasks", + "archived": "Archived", + "things": "Things", + "labels": "Labels", + "projects": "Projects", + "filters": "Filters", + "activities": "Activities", + "points": "Points", + "settings": "Settings" + } } diff --git a/public/locales/en/settings.json b/public/locales/en/settings.json index 158a55f..14d10db 100644 --- a/public/locales/en/settings.json +++ b/public/locales/en/settings.json @@ -81,5 +81,74 @@ "settingsSaved": "Settings saved successfully", "settingsSaveFailed": "Failed to save settings", "invalidWebhook": "Invalid webhook URL" + }, + "overview": { + "title": "Settings", + "subtitle": "Customize your experience and manage your account preferences", + "upgrade": { + "title": "Upgrade to Plus", + "description": "Unlock powerful features to enhance your productivity", + "button": "Upgrade Now", + "features": { + "richText": "Rich text descriptions", + "notifications": "Task notifications", + "apiIntegrations": "API integrations", + "advancedAutomation": "Advanced automation" + } + }, + "sections": { + "profile": { + "title": "Profile Settings", + "description": "Update your profile information, photo, display name, and timezone preferences." + }, + "circle": { + "title": "Circle Settings", + "description": "Manage your circle, invite members, and handle join requests." + }, + "account": { + "title": "Account Settings", + "description": "Manage your subscription, change password, and account deletion options." + }, + "subaccounts": { + "title": "Managed Accounts", + "description": "Create and manage sub accounts to log in and complete assigned tasks." + }, + "notifications": { + "title": "Notifications", + "description": "Configure push notifications, email alerts, and notification targets for tasks." + }, + "mfa": { + "title": "Multi-Factor Authentication", + "description": "Add an extra layer of security with MFA using authenticator apps." + }, + "apitokens": { + "title": "API Tokens", + "description": "Generate and manage access tokens for third-party integrations and API access." + }, + "storage": { + "title": "Storage Settings", + "description": "Backup and restore your data, manage local storage and sync preferences." + }, + "sidepanel": { + "title": "Sidepanel Customization", + "description": "Customize the layout and visibility of cards in the sidepanel interface." + }, + "theme": { + "title": "Theme Preferences", + "description": "Choose your preferred theme and configure dark/light mode settings." + }, + "localization": { + "title": "Localization", + "description": "Customize language, date format, time format, and regional preferences." + }, + "advanced": { + "title": "Advanced Settings", + "description": "Configure webhooks, real-time updates, and other advanced features for enhanced productivity." + }, + "developer": { + "title": "Developer Settings", + "description": "View technical information about authentication tokens, SSE connections, and debug data." + } + } } } diff --git a/public/locales/es/common.json b/public/locales/es/common.json index 9e8dbcc..dbcf944 100644 --- a/public/locales/es/common.json +++ b/public/locales/es/common.json @@ -14,5 +14,20 @@ "copied": "¡Copiado!", "settings": "Configuración", "yes": "Sí", - "no": "No" + "no": "No", + "back": "Atrás", + "backToCalendar": "Volver al Calendario", + "logout": "Cerrar Sesión", + "version": "Versión", + "navigation": { + "allTasks": "Todas las Tareas", + "archived": "Archivadas", + "things": "Cosas", + "labels": "Etiquetas", + "projects": "Proyectos", + "filters": "Filtros", + "activities": "Actividades", + "points": "Puntos", + "settings": "Configuración" + } } diff --git a/src/index.css b/src/index.css index 8c4cbe3..73381b7 100644 --- a/src/index.css +++ b/src/index.css @@ -86,3 +86,29 @@ html { [dir='rtl'] .rounded-r-none { border-radius: 0.375rem 0 0 0.375rem; } + +/* Fix flex alignment for RTL */ +[dir='rtl'] .flex { + direction: rtl; +} + +/* Ensure cards and containers align properly in RTL */ +[dir='rtl'] .MuiCard-root, +[dir='rtl'] .MuiBox-root, +[dir='rtl'] .MuiStack-root { + text-align: right; +} + +/* Fix list item alignment in RTL */ +[dir='rtl'] .MuiListItem-root, +[dir='rtl'] .MuiListItemButton-root { + flex-direction: row-reverse; +} + +/* Fix gap alignment in RTL */ +[dir='rtl'] .gap-1, +[dir='rtl'] .gap-2, +[dir='rtl'] .gap-3, +[dir='rtl'] .gap-4 { + direction: rtl; +} diff --git a/src/views/Settings/SettingsOverview.jsx b/src/views/Settings/SettingsOverview.jsx index c83d08a..cc313c2 100644 --- a/src/views/Settings/SettingsOverview.jsx +++ b/src/views/Settings/SettingsOverview.jsx @@ -30,105 +30,94 @@ import { Stack, Typography, } from '@mui/joy' +import { useTranslation } from 'react-i18next' import { useNavigate } from 'react-router-dom' import { useUserProfile } from '../../queries/UserQueries' import { isPlusAccount } from '../../utils/Helpers' import { isParentUser } from '../../utils/UserHelpers' const SettingsOverview = () => { + const { t } = useTranslation('settings') const navigate = useNavigate() const { data: userProfile } = useUserProfile() const settingsCards = [ { id: 'profile', - title: 'Profile Settings', - description: - 'Update your profile information, photo, display name, and timezone preferences.', + title: t('overview.sections.profile.title'), + description: t('overview.sections.profile.description'), icon: , }, { id: 'circle', - title: 'Circle Settings', - description: - 'Manage your circle, invite members, and handle join requests.', + title: t('overview.sections.circle.title'), + description: t('overview.sections.circle.description'), icon: , }, { id: 'account', - title: 'Account Settings', - description: - 'Manage your subscription, change password, and account deletion options.', + title: t('overview.sections.account.title'), + description: t('overview.sections.account.description'), icon: , }, { id: 'subaccounts', - title: 'Managed Accounts', - description: - 'Create and manage sub accounts to log in and complete assigned tasks.', + title: t('overview.sections.subaccounts.title'), + description: t('overview.sections.subaccounts.description'), icon: , }, { id: 'notifications', - title: 'Notifications', - description: - 'Configure push notifications, email alerts, and notification targets for tasks.', + title: t('overview.sections.notifications.title'), + description: t('overview.sections.notifications.description'), icon: , }, { id: 'mfa', - title: 'Multi-Factor Authentication', - description: - 'Add an extra layer of security with MFA using authenticator apps.', + title: t('overview.sections.mfa.title'), + description: t('overview.sections.mfa.description'), icon: , }, { id: 'apitokens', - title: 'API Tokens', - description: - 'Generate and manage access tokens for third-party integrations and API access.', + title: t('overview.sections.apitokens.title'), + description: t('overview.sections.apitokens.description'), icon: , }, { id: 'storage', - title: 'Storage Settings', - description: - 'Backup and restore your data, manage local storage and sync preferences.', + title: t('overview.sections.storage.title'), + description: t('overview.sections.storage.description'), icon: , }, { id: 'sidepanel', - title: 'Sidepanel Customization', - description: - 'Customize the layout and visibility of cards in the sidepanel interface.', + title: t('overview.sections.sidepanel.title'), + description: t('overview.sections.sidepanel.description'), icon: , }, { id: 'theme', - title: 'Theme Preferences', - description: - 'Choose your preferred theme and configure dark/light mode settings.', + title: t('overview.sections.theme.title'), + description: t('overview.sections.theme.description'), icon: , }, { id: 'localization', - title: 'Localization', - description: - 'Customize language, date format, time format, and regional preferences.', + title: t('overview.sections.localization.title'), + description: t('overview.sections.localization.description'), icon: , }, { id: 'advanced', - title: 'Advanced Settings', - description: - 'Configure webhooks, real-time updates, and other advanced features for enhanced productivity.', + title: t('overview.sections.advanced.title'), + description: t('overview.sections.advanced.description'), icon: , }, { id: 'developer', - title: 'Developer Settings', - description: - 'View technical information about authentication tokens, SSE connections, and debug data.', + title: t('overview.sections.developer.title'), + description: t('overview.sections.developer.description'), icon: , }, ] @@ -167,10 +156,10 @@ const SettingsOverview = () => { level='h3' sx={{ fontWeight: 'lg', color: 'text.primary' }} > - Settings + {t('overview.title')} - Customize your experience and manage your account preferences + {t('overview.subtitle')} @@ -234,7 +223,7 @@ const SettingsOverview = () => { fontSize: { xs: '0.95rem', md: '1.25rem' }, }} > - Upgrade to Plus + {t('overview.upgrade.title')} { lineHeight: { xs: 1.3, md: 1.5 }, }} > - Unlock powerful features to enhance your productivity + {t('overview.upgrade.description')} { color: 'rgba(255, 255, 255, 0.8)', }} > - • Rich text descriptions - • Task notifications - • API integrations - • Advanced automation + • {t('overview.upgrade.features.richText')} + • {t('overview.upgrade.features.notifications')} + • {t('overview.upgrade.features.apiIntegrations')} + • {t('overview.upgrade.features.advancedAutomation')} @@ -287,7 +276,7 @@ const SettingsOverview = () => { navigate('/settings/account') }} > - Upgrade Now + {t('overview.upgrade.button')} diff --git a/src/views/components/NavBar.jsx b/src/views/components/NavBar.jsx index 653d418..de77c9f 100644 --- a/src/views/components/NavBar.jsx +++ b/src/views/components/NavBar.jsx @@ -25,78 +25,11 @@ import { } from '@mui/joy' import { useEffect, useState } from 'react' +import { useTranslation } from 'react-i18next' import { useLocation, useNavigate, useSearchParams } from 'react-router-dom' import { version } from '../../../package.json' import UserProfileAvatar from '../../components/UserProfileAvatar' import NavBarLink from './NavBarLink' -const links = [ - { - to: '/chores', - label: 'All Tasks', - icon: , - }, - { - to: '/archived', - label: 'Archived', - icon: , - }, - - // { - // to: '/chores', - // label: 'Desktop View', - // icon: , - // }, - { - to: '/things', - label: 'Things', - icon: , - }, - { - to: 'labels', - label: 'Labels', - icon: , - }, - { - to: 'projects', - label: 'Projects', - icon: , - }, - { - to: 'filters', - label: 'Filters', - icon: , - }, - { - to: 'activities', - label: 'Activities', - icon: , - }, - { - to: 'points', - label: 'Points', - icon: , - }, - // { - // to: '/settings#sharing', - // label: 'Sharing', - // icon: , - // }, - // { - // to: '/settings#notifications', - // label: 'Notifications', - // icon: , - // }, - // { - // to: '/settings#account', - // label: 'Account', - // icon: , - // }, - { - to: '/settings', - label: 'Settings', - icon: , - }, -] import { SafeArea } from 'capacitor-plugin-safe-area' import Z_INDEX from '../../constants/zIndex' @@ -105,10 +38,59 @@ import { apiClient } from '../../utils/ApiClient' const publicPages = ['/landing', '/privacy', '/terms'] const NavBar = () => { + const { t } = useTranslation('common') const { data: resource } = useResource() const navigate = useNavigate() const [drawerOpen, setDrawerOpen] = useState(false) + + const links = [ + { + to: '/chores', + label: t('navigation.allTasks'), + icon: , + }, + { + to: '/archived', + label: t('navigation.archived'), + icon: , + }, + { + to: '/things', + label: t('navigation.things'), + icon: , + }, + { + to: 'labels', + label: t('navigation.labels'), + icon: , + }, + { + to: 'projects', + label: t('navigation.projects'), + icon: , + }, + { + to: 'filters', + label: t('navigation.filters'), + icon: , + }, + { + to: 'activities', + label: t('navigation.activities'), + icon: , + }, + { + to: 'points', + label: t('navigation.points'), + icon: , + }, + { + to: '/settings', + label: t('navigation.settings'), + icon: , + }, + ] const [openDrawer, closeDrawer] = [ () => setDrawerOpen(true), () => setDrawerOpen(false), @@ -157,7 +139,7 @@ const NavBar = () => { } }} title={ - searchParams.get('from') === 'calendar' ? 'Back to Calendar' : 'Back' + searchParams.get('from') === 'calendar' ? t('backToCalendar') : t('back') } > @@ -296,7 +278,7 @@ const NavBar = () => { - Logout + {t('logout')}