diff --git a/Dockerfile b/Dockerfile index fc5009f..f20963d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,21 +24,20 @@ RUN NODE_ENV=production npm run frontend:build # Run backend tests RUN DOCKER_BUILD=1 npm run backend:test + # Cleanup RUN npm cache clean --force && \ rm -rf ~/.npm /tmp/* && \ apk del .build-deps + #################### # Production stage # #################### FROM node:20-alpine AS production -# Set build-time and runtime UID/GID (default 1001) -ARG APP_UID=1001 -ARG APP_GID=1001 -ENV APP_UID=${APP_UID} -ENV APP_GID=${APP_GID} +ENV APP_UID=1001 +ENV APP_GID=1001 RUN addgroup -g ${APP_GID} -S app && \ adduser -S app -u ${APP_UID} -G app @@ -47,7 +46,9 @@ RUN apk add --no-cache --virtual .runtime-deps \ sqlite \ openssl \ curl \ - dumb-init && \ + procps-ng \ + dumb-init \ + su-exec && \ rm -rf /var/cache/apk/* /tmp/* && \ rm -rf /usr/share/man /usr/share/doc /usr/share/info @@ -58,13 +59,15 @@ WORKDIR /app COPY ./backend/ /app/backend/ RUN chmod +x /app/backend/cmd/start.sh +COPY ./scripts/docker-entrypoint.sh /app/scripts/docker-entrypoint.sh +RUN chmod +x /app/scripts/docker-entrypoint.sh + # Copy frontend RUN rm -rf /app/backend/dist COPY --from=builder --chown=app:app /app/dist ./backend/dist COPY --from=builder --chown=app:app /app/public/locales ./backend/dist/locales - -# Copy all dependencies (now in root) COPY --from=builder --chown=app:app /app/node_modules ./node_modules +COPY --from=builder --chown=app:app /app/package.json /app/ # Create necessary directories RUN mkdir -p /app/backend/db /app/backend/certs && \ @@ -72,14 +75,12 @@ RUN mkdir -p /app/backend/db /app/backend/certs && \ # Cleanup RUN apk del --no-cache .runtime-deps sqlite openssl curl && \ - apk add --no-cache sqlite-libs openssl curl dumb-init && \ + apk add --no-cache sqlite-libs openssl curl dumb-init su-exec && \ rm -rf /usr/local/lib/node_modules/npm/docs /usr/local/lib/node_modules/npm/man && \ rm -rf /root/.npm /tmp/* /var/tmp/* /var/cache/apk/* VOLUME ["/app/backend/db"] -USER app - EXPOSE 3002 ENV NODE_ENV=production \ @@ -92,11 +93,8 @@ ENV NODE_ENV=production \ DISABLE_TELEGRAM=false \ DISABLE_SCHEDULER=false -# Docker healthcheck HEALTHCHECK --interval=60s --timeout=3s --start-period=10s --retries=2 \ CMD curl -sf http://localhost:3002/api/health || exit 1 -# Use dumb-init for proper signal handling -ENTRYPOINT ["dumb-init", "--"] WORKDIR /app/backend -CMD ["/app/backend/cmd/start.sh"] \ No newline at end of file +ENTRYPOINT ["/app/scripts/docker-entrypoint.sh"] diff --git a/README.md b/README.md index 69bf043..f4468b2 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,7 @@ smart recurring tasks, and seamless Telegram integration. Get focused, stay prod ![Light Mode Screenshot](screenshots/all-light.png) -![Dark Mode Screenshot](screenshots/all-dark.png) - -![Light Mobile Screenshot](screenshots/mobile-all-light.png) - -![Dark Mobile Screenshot](screenshots/mobile-all-dark.png) +More screenshots [here](#screenshots). ## 🚀 How It Works @@ -104,6 +100,7 @@ The following environment variables are used to configure tududi: - `TUDUDI_SESSION_SECRET` - Session encryption key (generate with `openssl rand -hex 64`) #### Optional Variables: +- `PUID`, `GUID` - Run with specified user and group ID (instead of defaults 1001/1001) - `TUDUDI_INTERNAL_SSL_ENABLED` - Set to 'true' if using HTTPS internally (default: false) - `TUDUDI_ALLOWED_ORIGINS` - Controls CORS access for different deployment scenarios: - Not set: Only allows localhost origins @@ -139,6 +136,8 @@ docker run \ -e TUDUDI_SESSION_SECRET=$(openssl rand -hex 64) \ -e TUDUDI_INTERNAL_SSL_ENABLED=false \ -e TUDUDI_ALLOWED_ORIGINS=https://tududi,http://tududi:3002 \ + -e PUID=1001 \ + -e GUID=1001 \ -v ~/tududi_db:/app/backend/db \ -v ~/tududi_uploads:/app/backend/uploads \ -p 3002:3002 \ @@ -443,6 +442,15 @@ Join the tududi community: - **[BreachHarbor](https://breachharbor.com)** - Cybersecurity suite for digital asset protection - **[Hevetra](https://hevetra.com)** - Digital tracking for child health milestones +# Screenshots + +![Light Mode Screenshot](screenshots/all-light.png) + +![Dark Mode Screenshot](screenshots/all-dark.png) + +![Light Mobile Screenshot](screenshots/mobile-all-light.png) + +![Dark Mobile Screenshot](screenshots/mobile-all-dark.png) --- README created by [Chris Veleris](https://github.com/chrisvel) for `tududi`. diff --git a/backend/cmd/start.sh b/backend/cmd/start.sh index d3a6bce..2561906 100755 --- a/backend/cmd/start.sh +++ b/backend/cmd/start.sh @@ -1,47 +1,24 @@ #!/bin/sh set -eu -# Check and create directories with proper permissions -if [ ! -d "db" ]; then - mkdir -p db -fi - -if [ ! -w "db" ]; then - if [ "$(id -u)" = "0" ]; then - echo "âš ī¸ Attempting to fix permissions for /app/backend/db as root..." - chown -R "$APP_UID":"$APP_GID" db || true - chmod -R 770 db || true - if [ ! -w "db" ]; then - echo "❌ ERROR: Database directory /app/backend/db is not writable by user $APP_UID:$APP_GID after chown/chmod" - exit 1 - fi - else - echo "❌ ERROR: Database directory /app/backend/db is not writable by user $(id -u):$(id -g)" - echo "â„šī¸ If using Docker volumes, ensure the host directory has proper ownership or run the container as root for automatic fix." - exit 1 - fi -fi - -mkdir -p certs - DB_FILE="db/production.sqlite3" [ "$NODE_ENV" = "development" ] && DB_FILE="db/development.sqlite3" # Check if database exists and create/authenticate if [ ! -f "$DB_FILE" ]; then - echo "🔧 Creating new database..." + echo "Creating new database..." node -e "require(\"./models\").sequelize.sync({force:true}).then(()=>{console.log(\"✅ DB ready\");process.exit(0)}).catch(e=>{console.error(\"❌\",e.message);process.exit(1)})" else - echo "🔍 Checking database connection..." + echo "Checking database connection..." node -e "require(\"./models\").sequelize.authenticate().then(()=>{console.log(\"✅ DB OK\");process.exit(0)}).catch(e=>{console.error(\"❌\",e.message);process.exit(1)})" fi # Run database migrations automatically -echo "🔄 Running database migrations..." +echo "Running database migrations..." if npx sequelize-cli db:migrate --config config/database.js; then - echo "✅ Migrations completed successfully" + echo "Migrations completed successfully" else - echo "âš ī¸ Migration failed, but continuing startup (may be expected for new installations)" + echo "Migration failed, but continuing startup (may be expected for new installations)" fi if [ -n "${TUDUDI_USER_EMAIL:-}" ] && [ -n "${TUDUDI_USER_PASSWORD:-}" ]; then diff --git a/docker-compose.yml b/docker-compose.yml index f823171..2242aa9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,13 +8,11 @@ services: - TUDUDI_SESSION_SECRET=changeme-please-use-openssl - TUDUDI_INTERNAL_SSL_ENABLED=false - TUDUDI_ALLOWED_ORIGINS=http://localhost:3002 - # Optionally set APP_UID and APP_GID to match your host user/group - # - APP_UID=1001 - # - APP_GID=1001 + # Runtime UID/GID configuration - set these to match your host user/group + - PUID=1001 + - PGID=1001 volumes: - ./tududi_db:/app/backend/db ports: - "3002:3002" restart: unless-stopped - # Uncomment to run as root for automatic permission fix (not recommended for production) - # user: "0:0" diff --git a/package.json b/package.json index 85f8d18..7ebb470 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,10 @@ "start": "npm run backend:start", "dev": "npm run frontend:dev", "build": "npm run frontend:build", - "test": "npm run frontend:test && npm run backend:test", + "test": "npm run backend:test", "test:watch": "npm run frontend:test:watch", "test:coverage": "npm run frontend:test:coverage && npm run backend:test:coverage", - + "frontend:dev": "webpack serve --config webpack.config.js --hot", "frontend:start": "tsc --noEmit && webpack serve --config webpack.config.js", "frontend:build": "npm run clean && tsc --noEmit && webpack --config webpack.config.js", @@ -23,7 +23,7 @@ "frontend:lint": "eslint 'frontend/**/*.{js,jsx,ts,tsx}'", "frontend:lint-fix": "eslint --fix 'frontend/**/*.{js,jsx,ts,tsx}'", "frontend:format": "prettier --write 'frontend/**/*.{js,jsx,ts,tsx}'", - + "backend:start": "cd backend && ./cmd/start.sh", "backend:dev": "cd backend && nodemon app.js", "backend:test": "cd backend && cross-env NODE_ENV=test jest", @@ -34,27 +34,27 @@ "backend:lint": "cd backend && eslint .", "backend:lint-fix": "cd backend && eslint . --fix", "backend:format": "cd backend && prettier --write .", - + "db:init": "cd backend && node scripts/db-init.js", "db:sync": "cd backend && node scripts/db-sync.js", "db:migrate": "cd backend && node scripts/db-migrate.js", "db:reset": "cd backend && node scripts/db-reset.js", "db:status": "cd backend && node scripts/db-status.js", "db:seed": "cd backend && node scripts/seed-dev-data.js", - + "user:create": "cd backend && node scripts/user-create.js", "migration:create": "cd backend && node scripts/migration-create.js", "migration:run": "cd backend && npx sequelize-cli db:migrate", "migration:undo": "cd backend && npx sequelize-cli db:migrate:undo", "migration:undo:all": "cd backend && npx sequelize-cli db:migrate:undo:all", "migration:status": "cd backend && npx sequelize-cli db:migrate:status", - + "translations:sync": "cd scripts && ./sync-translations.js", "translations:sync-all": "cd scripts && ./sync-translations.js --all", "translations:dry-run": "cd scripts && ./sync-translations.js --all --dry-run", "translations:check": "cd scripts && ./sync-translations.js --all --dry-run --verbose", "translations:export": "cd scripts && ./sync-translations.js --all --dry-run --output missing-translations.json", - + "clean": "rimraf dist", "lint": "npm run frontend:lint && npm run backend:lint", "lint-fix": "npm run frontend:lint-fix && npm run backend:lint-fix", diff --git a/scripts/docker-entrypoint.sh b/scripts/docker-entrypoint.sh new file mode 100644 index 0000000..87512ca --- /dev/null +++ b/scripts/docker-entrypoint.sh @@ -0,0 +1,56 @@ +#!/bin/sh +set -eu + +# Runtime UID/GID Configuration +# This script allows setting the user ID and group ID at runtime using PUID and PGID environment variables +# This solves the issue where hardcoded UID/GID (1001:1001) conflicts with host system users + +# Get runtime UID/GID from environment variables, fallback to build-time defaults +PUID=${PUID:-${APP_UID:-1001}} +PGID=${PGID:-${APP_GID:-1001}} + +# Get current app user/group info +CURRENT_UID=$(id -u app) +CURRENT_GID=$(id -g app) + +echo "Runtime UID/GID Configuration" +echo "Current: $CURRENT_UID:$CURRENT_GID" +echo "Target: $PUID:$PGID" + +# Only modify user/group if different from current +if [ "$CURRENT_UID" != "$PUID" ] || [ "$CURRENT_GID" != "$PGID" ]; then + echo "Configuring user permissions..." + + deluser app 2>/dev/null || true + delgroup app 2>/dev/null || true + + if getent group "$PGID" >/dev/null 2>&1; then + TARGET_GROUP=$(getent group "$PGID" | cut -d: -f1) + echo "Using existing group: $TARGET_GROUP ($PGID)" + else + addgroup -g "$PGID" -S app + TARGET_GROUP="app" + echo "Created app group with GID: $PGID" + fi + + if getent passwd "$PUID" >/dev/null 2>&1; then + echo "Using existing user with UID $PUID" + else + adduser -S app -u "$PUID" -G "$TARGET_GROUP" + echo "Created user with UID: $PUID, GID: $PGID" + fi + + echo "Fixing ownership of application directories..." + chown -R app:$TARGET_GROUP /app + mkdir -p /app/backend/db /app/backend/certs + chown -R app:$TARGET_GROUP /app/backend/db /app/backend/certs + chmod 770 /app/backend/db /app/backend/certs + + echo "User configuration completed" +else + echo "No user configuration needed" +fi + +# Drop privileges and execute the original start script +echo "🚀 Starting application as user $(id -u app):$(id -g app)" +exec su-exec app dumb-init -- /app/backend/cmd/start.sh diff --git a/scripts/example-usage.sh b/scripts/example-usage.sh deleted file mode 100755 index 688bd8f..0000000 --- a/scripts/example-usage.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/bash - -echo "🌍 Translation Sync Script Examples" -echo "==================================" -echo "" - -echo "📋 Prerequisites:" -echo "1. Set your OpenAI API key: export OPENAI_API_KEY=\"your-key-here\"" -echo "2. Install dependencies: cd scripts && npm install" -echo "" - -echo "📖 Basic Usage Examples:" -echo "" - -echo "# Check what would be updated (dry run):" -echo "npm run translations:dry-run" -echo "" - -echo "# Update all languages:" -echo "npm run translations:sync-all" -echo "" - -echo "# Update specific languages:" -echo "npm run translations:sync -- --lang=jp,de" -echo "" - -echo "# Check specific language:" -echo "npm run translations:sync -- --lang=es --dry-run" -echo "" - -echo "🔧 Direct Script Usage:" -echo "" - -echo "# From scripts directory:" -echo "cd scripts" -echo "./sync-translations.js --all" -echo "./sync-translations.js --lang=jp,el,de" -echo "./sync-translations.js --lang=it --dry-run" -echo "" - -echo "📊 Current Status:" -if [ -z "$OPENAI_API_KEY" ]; then - echo "❌ OPENAI_API_KEY not set" -else - echo "✅ OPENAI_API_KEY is configured" -fi - -echo "" -echo "đŸ—‚ī¸ Available Languages:" -echo "- de (German)" -echo "- es (Spanish)" -echo "- el (Greek)" -echo "- it (Italian)" -echo "- jp (Japanese)" -echo "- ua (Ukrainian)" \ No newline at end of file diff --git a/scripts/missing-translations.json b/scripts/missing-translations.json deleted file mode 100644 index 5974192..0000000 --- a/scripts/missing-translations.json +++ /dev/null @@ -1,4391 +0,0 @@ -{ - "generatedAt": "2025-07-13T09:28:19.688Z", - "baseLanguage": "en", - "languages": { - "de": { - "languageName": "German", - "missingCount": 213, - "missing": [ - { - "path": "common.back", - "englishValue": "Back", - "isNested": false - }, - { - "path": "common.next", - "englishValue": "Next", - "isNested": false - }, - { - "path": "common.appLoading", - "englishValue": "Loading application... Please wait.", - "isNested": false - }, - { - "path": "common.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "common.error", - "englishValue": "Error", - "isNested": false - }, - { - "path": "common.success", - "englishValue": "Success", - "isNested": false - }, - { - "path": "common.area", - "englishValue": "Area", - "isNested": false - }, - { - "path": "common.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "common.saving", - "englishValue": "Saving...", - "isNested": false - }, - { - "path": "common.settings", - "englishValue": "Settings", - "isNested": false - }, - { - "path": "common.none", - "englishValue": "None", - "isNested": false - }, - { - "path": "sidebar.addAreaAriaLabel", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addAreaTitle", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addTagAriaLabel", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "sidebar.addTagTitle", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "dashboard.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "dashboard.showMetrics", - "englishValue": "Show Metrics", - "isNested": false - }, - { - "path": "dashboard.hideMetrics", - "englishValue": "Hide Metrics", - "isNested": false - }, - { - "path": "dashboard.insights", - "englishValue": "Insights", - "isNested": false - }, - { - "path": "dashboard.showInsights", - "englishValue": "Show Insights", - "isNested": false - }, - { - "path": "dashboard.hideInsights", - "englishValue": "Hide Insights", - "isNested": false - }, - { - "path": "dashboard.intelligence", - "englishValue": "Intelligence", - "isNested": false - }, - { - "path": "dashboard.showIntelligence", - "englishValue": "Show Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.hideIntelligence", - "englishValue": "Hide Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "dashboard.showCompleted", - "englishValue": "Show Completed Tasks", - "isNested": false - }, - { - "path": "dashboard.hideCompleted", - "englishValue": "Hide Completed Tasks", - "isNested": false - }, - { - "path": "tasks.today", - "englishValue": "Today", - "isNested": false - }, - { - "path": "tasks.stale", - "englishValue": "Stale", - "isNested": false - }, - { - "path": "tasks.suggested", - "englishValue": "Suggested", - "isNested": false - }, - { - "path": "tasks.weeklyCompletions", - "englishValue": "Weekly Progress", - "isNested": false - }, - { - "path": "tasks.taskCompleted", - "englishValue": "task completed", - "isNested": false - }, - { - "path": "tasks.tasksCompleted", - "englishValue": "tasks completed", - "isNested": false - }, - { - "path": "tasks.noTasksAvailable", - "englishValue": "No tasks available.", - "isNested": false - }, - { - "path": "tasks.searchPlaceholder", - "englishValue": "Search tasks...", - "isNested": false - }, - { - "path": "tasks.addNewTask", - "englishValue": "Add New Task", - "isNested": false - }, - { - "path": "tasks.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "tasks.setInProgress", - "englishValue": "Set in progress", - "isNested": false - }, - { - "path": "tasks.setNotStarted", - "englishValue": "Set to not started", - "isNested": false - }, - { - "path": "profile.settings", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.theme", - "englishValue": "Theme", - "isNested": false - }, - { - "path": "profile.notifications", - "englishValue": "Notifications", - "isNested": false - }, - { - "path": "profile.lightMode", - "englishValue": "Light Mode", - "isNested": false - }, - { - "path": "profile.darkMode", - "englishValue": "Dark Mode", - "isNested": false - }, - { - "path": "profile.light", - "englishValue": "Light", - "isNested": false - }, - { - "path": "profile.dark", - "englishValue": "Dark", - "isNested": false - }, - { - "path": "profile.saveChanges", - "englishValue": "Save Changes", - "isNested": false - }, - { - "path": "profile.languageChangedNote", - "englishValue": "Language changes are applied immediately", - "isNested": false - }, - { - "path": "profile.languageChanging", - "englishValue": "Changing language...", - "isNested": false - }, - { - "path": "profile.languagePreference", - "englishValue": "Language Preference", - "isNested": false - }, - { - "path": "profile.personalInfo", - "englishValue": "Personal Information", - "isNested": false - }, - { - "path": "profile.errorMessage", - "englishValue": "Failed to update profile", - "isNested": false - }, - { - "path": "profile.telegramIntegration", - "englishValue": "Telegram Integration", - "isNested": false - }, - { - "path": "profile.telegramDescription", - "englishValue": "Connect your tududi account to a Telegram bot to add items to your inbox via Telegram messages.", - "isNested": false - }, - { - "path": "profile.telegramBotToken", - "englishValue": "Telegram Bot Token", - "isNested": false - }, - { - "path": "profile.telegramTokenDescription", - "englishValue": "Create a bot with @BotFather on Telegram and paste the token here.", - "isNested": false - }, - { - "path": "profile.telegramConnected", - "englishValue": "Your Telegram account is connected! Send messages to your bot to add items to your tududi inbox.", - "isNested": false - }, - { - "path": "profile.settingUp", - "englishValue": "Setting up...", - "isNested": false - }, - { - "path": "profile.telegramSetupSuccess", - "englishValue": "Telegram bot \"{{botName}}\" configured successfully!", - "isNested": false - }, - { - "path": "profile.telegramSetupFailed", - "englishValue": "Failed to set up Telegram bot.", - "isNested": false - }, - { - "path": "profile.invalidTelegramToken", - "englishValue": "Invalid Telegram bot token format.", - "isNested": false - }, - { - "path": "profile.telegramInstructions", - "englishValue": "Go to https://t.me/{{botUsername}} and start chatting with your bot to connect it to your tududi account.", - "isNested": false - }, - { - "path": "profile.botConfigured", - "englishValue": "Bot configured successfully!", - "isNested": false - }, - { - "path": "profile.botUsername", - "englishValue": "Bot Username:", - "isNested": false - }, - { - "path": "profile.pollingStatus", - "englishValue": "Polling Status:", - "isNested": false - }, - { - "path": "profile.pollingActive", - "englishValue": "Active - Receiving messages", - "isNested": false - }, - { - "path": "profile.pollingInactive", - "englishValue": "Inactive - Not receiving messages", - "isNested": false - }, - { - "path": "profile.pollingStarted", - "englishValue": "Telegram polling started", - "isNested": false - }, - { - "path": "profile.pollingStopped", - "englishValue": "Telegram polling stopped", - "isNested": false - }, - { - "path": "profile.pollingError", - "englishValue": "Error managing Telegram polling", - "isNested": false - }, - { - "path": "profile.startPollingFailed", - "englishValue": "Failed to start polling", - "isNested": false - }, - { - "path": "profile.stopPollingFailed", - "englishValue": "Failed to stop polling", - "isNested": false - }, - { - "path": "profile.testTelegramMessage", - "englishValue": "Test Telegram", - "isNested": false - }, - { - "path": "profile.testMessageSent", - "englishValue": "Test message sent successfully!", - "isNested": false - }, - { - "path": "profile.testMessageFailed", - "englishValue": "Failed to send test message.", - "isNested": false - }, - { - "path": "profile.testMessageError", - "englishValue": "Error sending test message.", - "isNested": false - }, - { - "path": "profile.taskSummaryNotifications", - "englishValue": "Task Summary Notifications", - "isNested": false - }, - { - "path": "profile.taskSummaryDescription", - "englishValue": "Receive regular summaries of your tasks via Telegram. This feature requires Telegram integration to be set up.", - "isNested": false - }, - { - "path": "profile.enableTaskSummaries", - "englishValue": "Enable Task Summaries", - "isNested": false - }, - { - "path": "profile.summaryFrequency", - "englishValue": "Summary frequency", - "isNested": false - }, - { - "path": "profile.summaryFrequencyDescription", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "profile.sendTestSummary", - "englishValue": "Send test summary", - "isNested": false - }, - { - "path": "profile.frequency", - "englishValue": { - "1h": "1 hour", - "2h": "2 hours", - "4h": "4 hours", - "8h": "8 hours", - "12h": "12 hours", - "daily": "1 day", - "weekly": "1 week" - }, - "isNested": true - }, - { - "path": "profile.frequencyHelp", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "productivity", - "englishValue": { - "stalledProjects": "Stalled Projects", - "stalledProjectsDesc": "These projects have no tasks or actions", - "needsNextAction": "Projects Need Next Action", - "needsNextActionDesc": "These projects have completed tasks but no next action", - "tasksAreProjects": "Tasks That Look Like Projects", - "tasksAreProjectsDesc": "These tasks might need to be broken down", - "vagueTasks": "Tasks Without Clear Action", - "vagueTasksDesc": "These tasks need clearer action verbs", - "staleTasks": "Stale Tasks", - "staleTasksDesc": "Tasks not updated in {{days}} days", - "stuckProjects": "Stuck Projects", - "stuckProjectsDesc": "Projects not updated recently", - "issuesFound": "Found {{count}} productivity issue(s) that need attention", - "reviewItems": "Click to review and improve your workflow", - "suggestion": "Click on any item above to open it and make improvements." - }, - "isNested": true - }, - { - "path": "modals.confirmDelete", - "englishValue": "Are you sure you want to delete?", - "isNested": false - }, - { - "path": "modals.taskCreation", - "englishValue": "Create New Task", - "isNested": false - }, - { - "path": "modals.taskEdit", - "englishValue": "Edit Task", - "isNested": false - }, - { - "path": "modals.deleteTask", - "englishValue": { - "title": "Delete Task", - "confirmation": "Are you sure you want to delete this task? This action cannot be undone." - }, - "isNested": true - }, - { - "path": "modals.areaCreation", - "englishValue": "Create New Area", - "isNested": false - }, - { - "path": "modals.areaEdit", - "englishValue": "Edit Area", - "isNested": false - }, - { - "path": "modals.updateArea", - "englishValue": "Update Area", - "isNested": false - }, - { - "path": "modals.createArea", - "englishValue": "Create Area", - "isNested": false - }, - { - "path": "modals.updateTag", - "englishValue": "Update Tag", - "isNested": false - }, - { - "path": "modals.createTag", - "englishValue": "Create Tag", - "isNested": false - }, - { - "path": "modals.deleteTag", - "englishValue": { - "title": "Delete Tag", - "message": "Are you sure you want to delete the tag \"{{tagName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteArea", - "englishValue": { - "title": "Delete Area", - "message": "Are you sure you want to delete the area \"{{areaName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteNote", - "englishValue": { - "title": "Delete Note", - "message": "Are you sure you want to delete the note \"{{noteTitle}}\"?" - }, - "isNested": true - }, - { - "path": "forms.dueDate", - "englishValue": "Due Date", - "isNested": false - }, - { - "path": "forms.priority", - "englishValue": "Priority", - "isNested": false - }, - { - "path": "forms.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "forms.assignedTo", - "englishValue": "Assigned To", - "isNested": false - }, - { - "path": "forms.category", - "englishValue": "Category", - "isNested": false - }, - { - "path": "forms.task.namePlaceholder", - "englishValue": "Add Task Name", - "isNested": false - }, - { - "path": "forms.task.labels.tags", - "englishValue": "Tags", - "isNested": false - }, - { - "path": "forms.task.labels.project", - "englishValue": "Project", - "isNested": false - }, - { - "path": "forms.task.labels.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "forms.task.labels.priority", - "englishValue": "Priority", - "isNested": false - }, - { - "path": "forms.task.labels.dueDate", - "englishValue": "Due Date", - "isNested": false - }, - { - "path": "forms.task.labels.note", - "englishValue": "Note", - "isNested": false - }, - { - "path": "forms.task.projectSearchPlaceholder", - "englishValue": "Search or create a project...", - "isNested": false - }, - { - "path": "forms.task.noMatchingProjects", - "englishValue": "No matching projects", - "isNested": false - }, - { - "path": "forms.task.creatingProject", - "englishValue": "Creating...", - "isNested": false - }, - { - "path": "forms.task.createProject", - "englishValue": "+ Create", - "isNested": false - }, - { - "path": "forms.task.dueDatePlaceholder", - "englishValue": "Select due date", - "isNested": false - }, - { - "path": "forms.task.endDatePlaceholder", - "englishValue": "Select end date", - "isNested": false - }, - { - "path": "forms.task.nameHelper", - "englishValue": { - "title": "Make it more descriptive!", - "suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\"", - "short": "Make it more descriptive!", - "noVerb": "Add an action verb!", - "vague": "Be more specific!" - }, - "isNested": true - }, - { - "path": "forms.task.suggestions", - "englishValue": { - "short": "Try to be more specific about what needs to be done", - "noVerb": "What specific action do you need to take? Try starting with a verb.", - "vague": "Try starting with an action verb like \"Call\", \"Write\", \"Schedule\", or \"Research\"" - }, - "isNested": true - }, - { - "path": "forms.areaName", - "englishValue": "Area Name", - "isNested": false - }, - { - "path": "forms.areaDescription", - "englishValue": "Area Description", - "isNested": false - }, - { - "path": "forms.areaNamePlaceholder", - "englishValue": "Enter area name", - "isNested": false - }, - { - "path": "forms.areaDescriptionPlaceholder", - "englishValue": "Enter area description", - "isNested": false - }, - { - "path": "forms.tagName", - "englishValue": "Tag Name", - "isNested": false - }, - { - "path": "forms.tagNamePlaceholder", - "englishValue": "Enter tag name", - "isNested": false - }, - { - "path": "forms.tagInputPlaceholder", - "englishValue": "Type to add a tag", - "isNested": false - }, - { - "path": "forms.createTagOption", - "englishValue": "+ Create \"{{tagName}}\"", - "isNested": false - }, - { - "path": "forms.removeTagAriaLabel", - "englishValue": "Remove tag {{tagName}}", - "isNested": false - }, - { - "path": "auth", - "englishValue": { - "login": "Login", - "register": "Register", - "forgotPassword": "Forgot Password", - "email": "Email", - "password": "Password", - "confirmPassword": "Confirm Password", - "username": "Username", - "signup": "Sign Up", - "signin": "Sign In", - "signout": "Sign Out", - "resetPassword": "Reset Password", - "newPassword": "New Password", - "rememberMe": "Remember Me", - "loginSuccess": "Login Successful", - "loginFailed": "Login Failed", - "logoutSuccess": "Logout Successful" - }, - "isNested": true - }, - { - "path": "dropdown", - "englishValue": { - "createNew": "Create New", - "task": "Task", - "project": "Project", - "note": "Note", - "area": "Area" - }, - "isNested": true - }, - { - "path": "sort", - "englishValue": { - "due_date": "Due Date", - "name": "Name", - "priority": "Priority", - "status": "Status", - "created_at": "Created At" - }, - "isNested": true - }, - { - "path": "priority", - "englishValue": { - "low": "Low", - "medium": "Medium", - "high": "High" - }, - "isNested": true - }, - { - "path": "status", - "englishValue": { - "notStarted": "Not Started", - "inProgress": "In Progress", - "done": "Done", - "archived": "Archived", - "unknown": "Unknown" - }, - "isNested": true - }, - { - "path": "project.name", - "englishValue": "Project Name", - "isNested": false - }, - { - "path": "project.noNotes", - "englishValue": "No notes for this project.", - "isNested": false - }, - { - "path": "project.deleteProject", - "englishValue": "Delete Project", - "isNested": false - }, - { - "path": "project.createSuccess", - "englishValue": "Project created successfully!", - "isNested": false - }, - { - "path": "errors.required", - "englishValue": "This field is required", - "isNested": false - }, - { - "path": "errors.invalidEmail", - "englishValue": "Invalid email address", - "isNested": false - }, - { - "path": "errors.passwordMismatch", - "englishValue": "Passwords do not match", - "isNested": false - }, - { - "path": "errors.minLength", - "englishValue": "Minimum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.maxLength", - "englishValue": "Maximum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.serverError", - "englishValue": "Server error, please try again later", - "isNested": false - }, - { - "path": "errors.networkError", - "englishValue": "Network error, please check your connection", - "isNested": false - }, - { - "path": "errors.somethingWentWrong", - "englishValue": "Something went wrong, please try again", - "isNested": false - }, - { - "path": "errors.taskFetch", - "englishValue": "Failed to fetch tasks.", - "isNested": false - }, - { - "path": "errors.projectFetch", - "englishValue": "Failed to fetch projects.", - "isNested": false - }, - { - "path": "errors.taskCreate", - "englishValue": "Failed to create task.", - "isNested": false - }, - { - "path": "errors.taskUpdate", - "englishValue": "Failed to update task.", - "isNested": false - }, - { - "path": "errors.taskDelete", - "englishValue": "Failed to delete task.", - "isNested": false - }, - { - "path": "errors.areaNameRequired", - "englishValue": "Area name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveArea", - "englishValue": "Failed to save area.", - "isNested": false - }, - { - "path": "errors.tagNameRequired", - "englishValue": "Tag name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveTag", - "englishValue": "Failed to save tag.", - "isNested": false - }, - { - "path": "inbox.captureThought", - "englishValue": "Capture your thought...", - "isNested": false - }, - { - "path": "inbox.saveToInbox", - "englishValue": "Save to Inbox", - "isNested": false - }, - { - "path": "inbox.itemAdded", - "englishValue": "Item added to inbox", - "isNested": false - }, - { - "path": "inbox.itemProcessed", - "englishValue": "Item processed", - "isNested": false - }, - { - "path": "inbox.itemDeleted", - "englishValue": "Item deleted", - "isNested": false - }, - { - "path": "inbox.itemUpdated", - "englishValue": "Item updated", - "isNested": false - }, - { - "path": "inbox.newTelegramItem", - "englishValue": "New item from Telegram: {{content}}", - "isNested": false - }, - { - "path": "inbox.newItem", - "englishValue": "New inbox item added: {{content}}", - "isNested": false - }, - { - "path": "inbox.multipleNewItems", - "englishValue": "{{count}} more new items added", - "isNested": false - }, - { - "path": "inbox.loadError", - "englishValue": "Failed to load inbox items", - "isNested": false - }, - { - "path": "inbox.addError", - "englishValue": "Failed to add inbox item", - "isNested": false - }, - { - "path": "inbox.processError", - "englishValue": "Failed to process inbox item", - "isNested": false - }, - { - "path": "inbox.deleteError", - "englishValue": "Failed to delete inbox item", - "isNested": false - }, - { - "path": "inbox.updateError", - "englishValue": "Failed to update inbox item", - "isNested": false - }, - { - "path": "inbox.contentRequired", - "englishValue": "Content cannot be empty", - "isNested": false - }, - { - "path": "inbox.createTask", - "englishValue": "Create task", - "isNested": false - }, - { - "path": "inbox.createProject", - "englishValue": "Create project", - "isNested": false - }, - { - "path": "inbox.createNote", - "englishValue": "Create note", - "isNested": false - }, - { - "path": "inbox.convertTo", - "englishValue": "Convert to", - "isNested": false - }, - { - "path": "inbox.unprocessedItems", - "englishValue": "You have {{count}} item(s) in your inbox", - "isNested": false - }, - { - "path": "inbox.processNow", - "englishValue": "Process now", - "isNested": false - }, - { - "path": "inbox.deleteConfirmTitle", - "englishValue": "Delete Item", - "isNested": false - }, - { - "path": "inbox.deleteConfirmMessage", - "englishValue": "Are you sure you want to delete this item from your inbox? This action cannot be undone.", - "isNested": false - }, - { - "path": "dateIndicators", - "englishValue": { - "today": "TODAY", - "tomorrow": "TOMORROW", - "yesterday": "YESTERDAY" - }, - "isNested": true - }, - { - "path": "taskViews", - "englishValue": { - "project": { - "withName": "You are currently viewing all tasks associated with the \"{{projectName}}\" project. You can organize tasks within this project, set their priority, and track their completion. Use this space to focus on the tasks that belong specifically to this project.", - "noName": "You are viewing tasks for a specific project. Use this space to manage and track tasks associated with this project." - }, - "today": "These are the tasks that are due today or tasks you've scheduled for immediate attention. Use this view to focus on what needs to be completed today. Mark tasks as completed, update their status, or adjust their due dates if needed.", - "inbox": "The inbox is where all uncategorized tasks live. Tasks that haven't been assigned to a project or given a due date will show up here. This is your \"brain dump\" area where you can quickly jot down tasks and organize them later.", - "next": "This view shows all the tasks that are actionable in the near future. These tasks are ready to be worked on next and don't have long-term deadlines. It's a good place to focus when you're looking to make quick progress on tasks.", - "upcoming": "This view highlights tasks that are scheduled for the upcoming week. It helps you prepare and stay ahead of deadlines by giving you an overview of the work you need to tackle in the near future. Tasks with due dates within the next 7 days will appear here.", - "someday": "The \"Someday\" view is for tasks that aren't urgent and don't have a specific due date. These are tasks you may want to get to at some point, but they aren't a priority right now. Use this section to keep track of ideas or long-term goals.", - "completed": "Here you can see all the tasks you've completed. It's a great way to review your accomplishments and reflect on the work you've finished. You can also find tasks that may need to be unarchived or referenced in the future.", - "allTasks": "You are viewing all tasks. This includes tasks from different projects, tasks without specific due dates, and tasks with varying levels of priority. Use this view for an overall look at everything on your to-do list." - }, - "isNested": true - }, - { - "path": "success.areaUpdated", - "englishValue": "Area updated successfully!", - "isNested": false - }, - { - "path": "success.areaCreated", - "englishValue": "Area created successfully!", - "isNested": false - }, - { - "path": "success.tagUpdated", - "englishValue": "Tag updated successfully!", - "isNested": false - }, - { - "path": "success.tagCreated", - "englishValue": "Tag created successfully!", - "isNested": false - }, - { - "path": "success.taskCreated", - "englishValue": "Task created successfully!", - "isNested": false - }, - { - "path": "success.taskUpdated", - "englishValue": "Task updated successfully!", - "isNested": false - }, - { - "path": "success.taskDeleted", - "englishValue": "Task deleted successfully!", - "isNested": false - }, - { - "path": "note", - "englishValue": { - "title": "Title", - "content": "Content", - "titlePlaceholder": "Enter note title", - "contentPlaceholder": "Enter note content", - "project": "Related Project (Optional)", - "createSuccess": "Note created successfully", - "createError": "Failed to create note" - }, - "isNested": true - }, - { - "path": "task.labels", - "englishValue": { - "tags": "Tags", - "project": "Project", - "status": "Status", - "priority": "Priority", - "dueDate": "Due Date", - "note": "Note" - }, - "isNested": true - }, - { - "path": "task.create", - "englishValue": "Create", - "isNested": false - }, - { - "path": "task.addTaskName", - "englishValue": "Add task name", - "isNested": false - }, - { - "path": "task.createSuccess", - "englishValue": "Task created successfully", - "isNested": false - }, - { - "path": "task.createError", - "englishValue": "Failed to create task", - "isNested": false - }, - { - "path": "task.saveAsTask", - "englishValue": "Save as Task", - "isNested": false - }, - { - "path": "task.updateSuccess", - "englishValue": "Task updated successfully", - "isNested": false - }, - { - "path": "task.updateError", - "englishValue": "Failed to update task", - "isNested": false - }, - { - "path": "task.deleteSuccess", - "englishValue": "Task deleted successfully", - "isNested": false - }, - { - "path": "task.deleteError", - "englishValue": "Failed to delete task", - "isNested": false - }, - { - "path": "task.startedSuccessfully", - "englishValue": "Task started successfully!", - "isNested": false - }, - { - "path": "task.created", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.createdSuccessfully", - "englishValue": "created successfully!", - "isNested": false - }, - { - "path": "task.updated", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.updatedSuccessfully", - "englishValue": "updated successfully!", - "isNested": false - }, - { - "path": "task.deleted", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.deletedSuccessfully", - "englishValue": "deleted successfully!", - "isNested": false - }, - { - "path": "projects", - "englishValue": { - "loading": "Loading projects...", - "error": "Error loading projects", - "searchPlaceholder": "Search projects...", - "title": "Projects", - "noProjectsFound": "No projects found", - "cardViewAriaLabel": "Card View", - "listViewAriaLabel": "List View", - "active": "Active", - "inactive": "Inactive", - "metrics": "Projects", - "filters": { - "active": "Active", - "inactive": "Inactive", - "all": "All", - "allAreas": "All Areas" - } - }, - "isNested": true - }, - { - "path": "projectItem", - "englishValue": { - "edit": "Edit", - "delete": "Delete", - "completion": "Completion", - "completionPercentage": "{{percentage}}% complete", - "toggleDropdownMenu": "Toggle dropdown menu", - "projectInitials": "Project initials" - }, - "isNested": true - }, - { - "path": "areas", - "englishValue": { - "title": "Areas", - "noAreasFound": "No areas found", - "editAreaAriaLabel": "Edit area {{name}}", - "editAreaTitle": "Edit area {{name}}", - "deleteAreaAriaLabel": "Delete area {{name}}", - "deleteAreaTitle": "Delete area {{name}}", - "addArea": "Add Area", - "loading": "Loading area details...", - "error": "Error loading area details.", - "notFound": "Area not found.", - "details": "Area Details", - "viewProjects": "View Projects in {{name}}" - }, - "isNested": true - }, - { - "path": "notes.deleteNoteAriaLabel", - "englishValue": "Delete note {{noteTitle}}", - "isNested": false - }, - { - "path": "notes.deleteNoteTitle", - "englishValue": "Delete note {{noteTitle}}", - "isNested": false - }, - { - "path": "notes.editNoteAriaLabel", - "englishValue": "Edit note {{noteTitle}}", - "isNested": false - }, - { - "path": "notes.editNoteTitle", - "englishValue": "Edit note {{noteTitle}}", - "isNested": false - }, - { - "path": "tags", - "englishValue": { - "loading": "Loading tags...", - "searchPlaceholder": "Search tags...", - "title": "Tags", - "noTagsFound": "No tags found", - "editTagAriaLabel": "Edit tag {{tagName}}", - "editTagTitle": "Edit tag {{tagName}}", - "deleteTagAriaLabel": "Delete tag {{tagName}}", - "deleteTagTitle": "Delete tag {{tagName}}", - "error": "Error fetching tag.", - "notFound": "Tag not found.", - "details": "Tag Details", - "name": "Name", - "status": "Status", - "active": "Active", - "inactive": "Inactive", - "viewTasksWithTag": "View tasks with this tag", - "typeToAdd": "Type to add a tag", - "noItemsWithTag": "No items found with this tag" - }, - "isNested": true - }, - { - "path": "recurrence.days", - "englishValue": "days", - "isNested": false - }, - { - "path": "pomodoro", - "englishValue": { - "play": "Play", - "pause": "Pause", - "reset": "Reset", - "close": "Close", - "complete": "Pomodoro Complete!", - "completeMessage": "Great work! Time for a break.", - "done": "Done" - }, - "isNested": true - } - ] - }, - "el": { - "languageName": "Greek", - "missingCount": 68, - "missing": [ - { - "path": "common.settings", - "englishValue": "Settings", - "isNested": false - }, - { - "path": "dashboard.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "dashboard.showMetrics", - "englishValue": "Show Metrics", - "isNested": false - }, - { - "path": "dashboard.hideMetrics", - "englishValue": "Hide Metrics", - "isNested": false - }, - { - "path": "dashboard.insights", - "englishValue": "Insights", - "isNested": false - }, - { - "path": "dashboard.showInsights", - "englishValue": "Show Insights", - "isNested": false - }, - { - "path": "dashboard.hideInsights", - "englishValue": "Hide Insights", - "isNested": false - }, - { - "path": "dashboard.intelligence", - "englishValue": "Intelligence", - "isNested": false - }, - { - "path": "dashboard.showIntelligence", - "englishValue": "Show Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.hideIntelligence", - "englishValue": "Hide Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "dashboard.showCompleted", - "englishValue": "Show Completed Tasks", - "isNested": false - }, - { - "path": "dashboard.hideCompleted", - "englishValue": "Hide Completed Tasks", - "isNested": false - }, - { - "path": "tasks.setInProgress", - "englishValue": "Set in progress", - "isNested": false - }, - { - "path": "tasks.setNotStarted", - "englishValue": "Set to not started", - "isNested": false - }, - { - "path": "profile.settings", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.light", - "englishValue": "Light", - "isNested": false - }, - { - "path": "profile.dark", - "englishValue": "Dark", - "isNested": false - }, - { - "path": "profile.settingUp", - "englishValue": "Setting up...", - "isNested": false - }, - { - "path": "profile.telegramSetupSuccess", - "englishValue": "Telegram bot \"{{botName}}\" configured successfully!", - "isNested": false - }, - { - "path": "profile.telegramSetupFailed", - "englishValue": "Failed to set up Telegram bot.", - "isNested": false - }, - { - "path": "profile.invalidTelegramToken", - "englishValue": "Invalid Telegram bot token format.", - "isNested": false - }, - { - "path": "profile.telegramInstructions", - "englishValue": "Go to https://t.me/{{botUsername}} and start chatting with your bot to connect it to your tududi account.", - "isNested": false - }, - { - "path": "profile.botConfigured", - "englishValue": "Bot configured successfully!", - "isNested": false - }, - { - "path": "profile.botUsername", - "englishValue": "Bot Username:", - "isNested": false - }, - { - "path": "profile.pollingStatus", - "englishValue": "Polling Status:", - "isNested": false - }, - { - "path": "profile.pollingActive", - "englishValue": "Active - Receiving messages", - "isNested": false - }, - { - "path": "profile.pollingInactive", - "englishValue": "Inactive - Not receiving messages", - "isNested": false - }, - { - "path": "profile.pollingStarted", - "englishValue": "Telegram polling started", - "isNested": false - }, - { - "path": "profile.pollingStopped", - "englishValue": "Telegram polling stopped", - "isNested": false - }, - { - "path": "profile.pollingError", - "englishValue": "Error managing Telegram polling", - "isNested": false - }, - { - "path": "profile.startPollingFailed", - "englishValue": "Failed to start polling", - "isNested": false - }, - { - "path": "profile.stopPollingFailed", - "englishValue": "Failed to stop polling", - "isNested": false - }, - { - "path": "profile.testTelegramMessage", - "englishValue": "Test Telegram", - "isNested": false - }, - { - "path": "profile.testMessageSent", - "englishValue": "Test message sent successfully!", - "isNested": false - }, - { - "path": "profile.testMessageFailed", - "englishValue": "Failed to send test message.", - "isNested": false - }, - { - "path": "profile.testMessageError", - "englishValue": "Error sending test message.", - "isNested": false - }, - { - "path": "forms.task.dueDatePlaceholder", - "englishValue": "Select due date", - "isNested": false - }, - { - "path": "forms.task.endDatePlaceholder", - "englishValue": "Select end date", - "isNested": false - }, - { - "path": "forms.task.nameHelper", - "englishValue": { - "title": "Make it more descriptive!", - "suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\"", - "short": "Make it more descriptive!", - "noVerb": "Add an action verb!", - "vague": "Be more specific!" - }, - "isNested": true - }, - { - "path": "forms.task.suggestions", - "englishValue": { - "short": "Try to be more specific about what needs to be done", - "noVerb": "What specific action do you need to take? Try starting with a verb.", - "vague": "Try starting with an action verb like \"Call\", \"Write\", \"Schedule\", or \"Research\"" - }, - "isNested": true - }, - { - "path": "errors.minLength", - "englishValue": "Minimum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.maxLength", - "englishValue": "Maximum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.serverError", - "englishValue": "Server error, please try again later", - "isNested": false - }, - { - "path": "errors.networkError", - "englishValue": "Network error, please check your connection", - "isNested": false - }, - { - "path": "inbox.saveToInbox", - "englishValue": "Save to Inbox", - "isNested": false - }, - { - "path": "inbox.itemProcessed", - "englishValue": "Item processed", - "isNested": false - }, - { - "path": "inbox.itemDeleted", - "englishValue": "Item deleted", - "isNested": false - }, - { - "path": "inbox.itemUpdated", - "englishValue": "Item updated", - "isNested": false - }, - { - "path": "inbox.newTelegramItem", - "englishValue": "New item from Telegram: {{content}}", - "isNested": false - }, - { - "path": "inbox.newItem", - "englishValue": "New inbox item added: {{content}}", - "isNested": false - }, - { - "path": "inbox.multipleNewItems", - "englishValue": "{{count}} more new items added", - "isNested": false - }, - { - "path": "inbox.loadError", - "englishValue": "Failed to load inbox items", - "isNested": false - }, - { - "path": "inbox.processError", - "englishValue": "Failed to process inbox item", - "isNested": false - }, - { - "path": "inbox.deleteError", - "englishValue": "Failed to delete inbox item", - "isNested": false - }, - { - "path": "inbox.contentRequired", - "englishValue": "Content cannot be empty", - "isNested": false - }, - { - "path": "task.updateSuccess", - "englishValue": "Task updated successfully", - "isNested": false - }, - { - "path": "task.updateError", - "englishValue": "Failed to update task", - "isNested": false - }, - { - "path": "task.deleteSuccess", - "englishValue": "Task deleted successfully", - "isNested": false - }, - { - "path": "task.deleteError", - "englishValue": "Failed to delete task", - "isNested": false - }, - { - "path": "task.startedSuccessfully", - "englishValue": "Task started successfully!", - "isNested": false - }, - { - "path": "task.created", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.createdSuccessfully", - "englishValue": "created successfully!", - "isNested": false - }, - { - "path": "task.updated", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.updatedSuccessfully", - "englishValue": "updated successfully!", - "isNested": false - }, - { - "path": "task.deleted", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.deletedSuccessfully", - "englishValue": "deleted successfully!", - "isNested": false - }, - { - "path": "recurrence.days", - "englishValue": "days", - "isNested": false - } - ] - }, - "es": { - "languageName": "Spanish", - "missingCount": 93, - "missing": [ - { - "path": "common.settings", - "englishValue": "Settings", - "isNested": false - }, - { - "path": "dashboard.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "dashboard.showMetrics", - "englishValue": "Show Metrics", - "isNested": false - }, - { - "path": "dashboard.hideMetrics", - "englishValue": "Hide Metrics", - "isNested": false - }, - { - "path": "dashboard.insights", - "englishValue": "Insights", - "isNested": false - }, - { - "path": "dashboard.showInsights", - "englishValue": "Show Insights", - "isNested": false - }, - { - "path": "dashboard.hideInsights", - "englishValue": "Hide Insights", - "isNested": false - }, - { - "path": "dashboard.intelligence", - "englishValue": "Intelligence", - "isNested": false - }, - { - "path": "dashboard.showIntelligence", - "englishValue": "Show Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.hideIntelligence", - "englishValue": "Hide Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "dashboard.showCompleted", - "englishValue": "Show Completed Tasks", - "isNested": false - }, - { - "path": "dashboard.hideCompleted", - "englishValue": "Hide Completed Tasks", - "isNested": false - }, - { - "path": "tasks.weeklyCompletions", - "englishValue": "Weekly Progress", - "isNested": false - }, - { - "path": "tasks.taskCompleted", - "englishValue": "task completed", - "isNested": false - }, - { - "path": "tasks.tasksCompleted", - "englishValue": "tasks completed", - "isNested": false - }, - { - "path": "tasks.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "tasks.setInProgress", - "englishValue": "Set in progress", - "isNested": false - }, - { - "path": "tasks.setNotStarted", - "englishValue": "Set to not started", - "isNested": false - }, - { - "path": "profile.settings", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.lightMode", - "englishValue": "Light Mode", - "isNested": false - }, - { - "path": "profile.darkMode", - "englishValue": "Dark Mode", - "isNested": false - }, - { - "path": "profile.light", - "englishValue": "Light", - "isNested": false - }, - { - "path": "profile.dark", - "englishValue": "Dark", - "isNested": false - }, - { - "path": "profile.languageChangedNote", - "englishValue": "Language changes are applied immediately", - "isNested": false - }, - { - "path": "profile.languageChanging", - "englishValue": "Changing language...", - "isNested": false - }, - { - "path": "profile.telegramIntegration", - "englishValue": "Telegram Integration", - "isNested": false - }, - { - "path": "profile.telegramDescription", - "englishValue": "Connect your tududi account to a Telegram bot to add items to your inbox via Telegram messages.", - "isNested": false - }, - { - "path": "profile.telegramBotToken", - "englishValue": "Telegram Bot Token", - "isNested": false - }, - { - "path": "profile.telegramTokenDescription", - "englishValue": "Create a bot with @BotFather on Telegram and paste the token here.", - "isNested": false - }, - { - "path": "profile.telegramConnected", - "englishValue": "Your Telegram account is connected! Send messages to your bot to add items to your tududi inbox.", - "isNested": false - }, - { - "path": "profile.settingUp", - "englishValue": "Setting up...", - "isNested": false - }, - { - "path": "profile.telegramSetupSuccess", - "englishValue": "Telegram bot \"{{botName}}\" configured successfully!", - "isNested": false - }, - { - "path": "profile.telegramSetupFailed", - "englishValue": "Failed to set up Telegram bot.", - "isNested": false - }, - { - "path": "profile.invalidTelegramToken", - "englishValue": "Invalid Telegram bot token format.", - "isNested": false - }, - { - "path": "profile.telegramInstructions", - "englishValue": "Go to https://t.me/{{botUsername}} and start chatting with your bot to connect it to your tududi account.", - "isNested": false - }, - { - "path": "profile.botConfigured", - "englishValue": "Bot configured successfully!", - "isNested": false - }, - { - "path": "profile.botUsername", - "englishValue": "Bot Username:", - "isNested": false - }, - { - "path": "profile.pollingStatus", - "englishValue": "Polling Status:", - "isNested": false - }, - { - "path": "profile.pollingActive", - "englishValue": "Active - Receiving messages", - "isNested": false - }, - { - "path": "profile.pollingInactive", - "englishValue": "Inactive - Not receiving messages", - "isNested": false - }, - { - "path": "profile.pollingStarted", - "englishValue": "Telegram polling started", - "isNested": false - }, - { - "path": "profile.pollingStopped", - "englishValue": "Telegram polling stopped", - "isNested": false - }, - { - "path": "profile.pollingError", - "englishValue": "Error managing Telegram polling", - "isNested": false - }, - { - "path": "profile.startPollingFailed", - "englishValue": "Failed to start polling", - "isNested": false - }, - { - "path": "profile.stopPollingFailed", - "englishValue": "Failed to stop polling", - "isNested": false - }, - { - "path": "profile.testTelegramMessage", - "englishValue": "Test Telegram", - "isNested": false - }, - { - "path": "profile.testMessageSent", - "englishValue": "Test message sent successfully!", - "isNested": false - }, - { - "path": "profile.testMessageFailed", - "englishValue": "Failed to send test message.", - "isNested": false - }, - { - "path": "profile.testMessageError", - "englishValue": "Error sending test message.", - "isNested": false - }, - { - "path": "profile.taskSummaryNotifications", - "englishValue": "Task Summary Notifications", - "isNested": false - }, - { - "path": "profile.taskSummaryDescription", - "englishValue": "Receive regular summaries of your tasks via Telegram. This feature requires Telegram integration to be set up.", - "isNested": false - }, - { - "path": "profile.enableTaskSummaries", - "englishValue": "Enable Task Summaries", - "isNested": false - }, - { - "path": "profile.summaryFrequency", - "englishValue": "Summary frequency", - "isNested": false - }, - { - "path": "profile.summaryFrequencyDescription", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "profile.sendTestSummary", - "englishValue": "Send test summary", - "isNested": false - }, - { - "path": "profile.frequency", - "englishValue": { - "1h": "1 hour", - "2h": "2 hours", - "4h": "4 hours", - "8h": "8 hours", - "12h": "12 hours", - "daily": "1 day", - "weekly": "1 week" - }, - "isNested": true - }, - { - "path": "profile.frequencyHelp", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "productivity", - "englishValue": { - "stalledProjects": "Stalled Projects", - "stalledProjectsDesc": "These projects have no tasks or actions", - "needsNextAction": "Projects Need Next Action", - "needsNextActionDesc": "These projects have completed tasks but no next action", - "tasksAreProjects": "Tasks That Look Like Projects", - "tasksAreProjectsDesc": "These tasks might need to be broken down", - "vagueTasks": "Tasks Without Clear Action", - "vagueTasksDesc": "These tasks need clearer action verbs", - "staleTasks": "Stale Tasks", - "staleTasksDesc": "Tasks not updated in {{days}} days", - "stuckProjects": "Stuck Projects", - "stuckProjectsDesc": "Projects not updated recently", - "issuesFound": "Found {{count}} productivity issue(s) that need attention", - "reviewItems": "Click to review and improve your workflow", - "suggestion": "Click on any item above to open it and make improvements." - }, - "isNested": true - }, - { - "path": "modals.deleteTask", - "englishValue": { - "title": "Delete Task", - "confirmation": "Are you sure you want to delete this task? This action cannot be undone." - }, - "isNested": true - }, - { - "path": "modals.areaCreation", - "englishValue": "Create New Area", - "isNested": false - }, - { - "path": "modals.areaEdit", - "englishValue": "Edit Area", - "isNested": false - }, - { - "path": "modals.updateArea", - "englishValue": "Update Area", - "isNested": false - }, - { - "path": "modals.createArea", - "englishValue": "Create Area", - "isNested": false - }, - { - "path": "modals.updateTag", - "englishValue": "Update Tag", - "isNested": false - }, - { - "path": "modals.createTag", - "englishValue": "Create Tag", - "isNested": false - }, - { - "path": "modals.deleteTag", - "englishValue": { - "title": "Delete Tag", - "message": "Are you sure you want to delete the tag \"{{tagName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteArea", - "englishValue": { - "title": "Delete Area", - "message": "Are you sure you want to delete the area \"{{areaName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteNote", - "englishValue": { - "title": "Delete Note", - "message": "Are you sure you want to delete the note \"{{noteTitle}}\"?" - }, - "isNested": true - }, - { - "path": "forms.task.dueDatePlaceholder", - "englishValue": "Select due date", - "isNested": false - }, - { - "path": "forms.task.endDatePlaceholder", - "englishValue": "Select end date", - "isNested": false - }, - { - "path": "forms.task.nameHelper", - "englishValue": { - "title": "Make it more descriptive!", - "suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\"", - "short": "Make it more descriptive!", - "noVerb": "Add an action verb!", - "vague": "Be more specific!" - }, - "isNested": true - }, - { - "path": "forms.task.suggestions", - "englishValue": { - "short": "Try to be more specific about what needs to be done", - "noVerb": "What specific action do you need to take? Try starting with a verb.", - "vague": "Try starting with an action verb like \"Call\", \"Write\", \"Schedule\", or \"Research\"" - }, - "isNested": true - }, - { - "path": "errors.minLength", - "englishValue": "Minimum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.maxLength", - "englishValue": "Maximum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.serverError", - "englishValue": "Server error, please try again later", - "isNested": false - }, - { - "path": "errors.networkError", - "englishValue": "Network error, please check your connection", - "isNested": false - }, - { - "path": "errors.areaNameRequired", - "englishValue": "Area name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveArea", - "englishValue": "Failed to save area.", - "isNested": false - }, - { - "path": "errors.tagNameRequired", - "englishValue": "Tag name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveTag", - "englishValue": "Failed to save tag.", - "isNested": false - }, - { - "path": "task.updateSuccess", - "englishValue": "Task updated successfully", - "isNested": false - }, - { - "path": "task.updateError", - "englishValue": "Failed to update task", - "isNested": false - }, - { - "path": "task.deleteSuccess", - "englishValue": "Task deleted successfully", - "isNested": false - }, - { - "path": "task.deleteError", - "englishValue": "Failed to delete task", - "isNested": false - }, - { - "path": "task.startedSuccessfully", - "englishValue": "Task started successfully!", - "isNested": false - }, - { - "path": "task.created", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.createdSuccessfully", - "englishValue": "created successfully!", - "isNested": false - }, - { - "path": "task.updated", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.updatedSuccessfully", - "englishValue": "updated successfully!", - "isNested": false - }, - { - "path": "task.deleted", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.deletedSuccessfully", - "englishValue": "deleted successfully!", - "isNested": false - }, - { - "path": "recurrence.days", - "englishValue": "days", - "isNested": false - } - ] - }, - "jp": { - "languageName": "Japanese", - "missingCount": 201, - "missing": [ - { - "path": "common.appLoading", - "englishValue": "Loading application... Please wait.", - "isNested": false - }, - { - "path": "common.area", - "englishValue": "Area", - "isNested": false - }, - { - "path": "common.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "common.saving", - "englishValue": "Saving...", - "isNested": false - }, - { - "path": "common.settings", - "englishValue": "Settings", - "isNested": false - }, - { - "path": "common.none", - "englishValue": "None", - "isNested": false - }, - { - "path": "sidebar.addAreaAriaLabel", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addAreaTitle", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addTagAriaLabel", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "sidebar.addTagTitle", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "dashboard.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "dashboard.showMetrics", - "englishValue": "Show Metrics", - "isNested": false - }, - { - "path": "dashboard.hideMetrics", - "englishValue": "Hide Metrics", - "isNested": false - }, - { - "path": "dashboard.insights", - "englishValue": "Insights", - "isNested": false - }, - { - "path": "dashboard.showInsights", - "englishValue": "Show Insights", - "isNested": false - }, - { - "path": "dashboard.hideInsights", - "englishValue": "Hide Insights", - "isNested": false - }, - { - "path": "dashboard.intelligence", - "englishValue": "Intelligence", - "isNested": false - }, - { - "path": "dashboard.showIntelligence", - "englishValue": "Show Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.hideIntelligence", - "englishValue": "Hide Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "dashboard.showCompleted", - "englishValue": "Show Completed Tasks", - "isNested": false - }, - { - "path": "dashboard.hideCompleted", - "englishValue": "Hide Completed Tasks", - "isNested": false - }, - { - "path": "tasks.weeklyCompletions", - "englishValue": "Weekly Progress", - "isNested": false - }, - { - "path": "tasks.taskCompleted", - "englishValue": "task completed", - "isNested": false - }, - { - "path": "tasks.tasksCompleted", - "englishValue": "tasks completed", - "isNested": false - }, - { - "path": "tasks.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "tasks.setInProgress", - "englishValue": "Set in progress", - "isNested": false - }, - { - "path": "tasks.setNotStarted", - "englishValue": "Set to not started", - "isNested": false - }, - { - "path": "profile.settings", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.language", - "englishValue": "Language", - "isNested": false - }, - { - "path": "profile.theme", - "englishValue": "Theme", - "isNested": false - }, - { - "path": "profile.notifications", - "englishValue": "Notifications", - "isNested": false - }, - { - "path": "profile.english", - "englishValue": "English", - "isNested": false - }, - { - "path": "profile.spanish", - "englishValue": "Spanish", - "isNested": false - }, - { - "path": "profile.greek", - "englishValue": "Greek", - "isNested": false - }, - { - "path": "profile.japanese", - "englishValue": "Japanese", - "isNested": false - }, - { - "path": "profile.ukrainian", - "englishValue": "Ukrainian", - "isNested": false - }, - { - "path": "profile.deutsch", - "englishValue": "German", - "isNested": false - }, - { - "path": "profile.italian", - "englishValue": "Italian", - "isNested": false - }, - { - "path": "profile.title", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.appearance", - "englishValue": "Appearance", - "isNested": false - }, - { - "path": "profile.lightMode", - "englishValue": "Light Mode", - "isNested": false - }, - { - "path": "profile.darkMode", - "englishValue": "Dark Mode", - "isNested": false - }, - { - "path": "profile.light", - "englishValue": "Light", - "isNested": false - }, - { - "path": "profile.dark", - "englishValue": "Dark", - "isNested": false - }, - { - "path": "profile.timezone", - "englishValue": "Timezone", - "isNested": false - }, - { - "path": "profile.saveChanges", - "englishValue": "Save Changes", - "isNested": false - }, - { - "path": "profile.languageChangedNote", - "englishValue": "Language changes are applied immediately", - "isNested": false - }, - { - "path": "profile.languageChanging", - "englishValue": "Changing language...", - "isNested": false - }, - { - "path": "profile.languagePreference", - "englishValue": "Language Preference", - "isNested": false - }, - { - "path": "profile.personalInfo", - "englishValue": "Personal Information", - "isNested": false - }, - { - "path": "profile.errorMessage", - "englishValue": "Failed to update profile", - "isNested": false - }, - { - "path": "profile.telegramIntegration", - "englishValue": "Telegram Integration", - "isNested": false - }, - { - "path": "profile.telegramDescription", - "englishValue": "Connect your tududi account to a Telegram bot to add items to your inbox via Telegram messages.", - "isNested": false - }, - { - "path": "profile.telegramBotToken", - "englishValue": "Telegram Bot Token", - "isNested": false - }, - { - "path": "profile.telegramTokenDescription", - "englishValue": "Create a bot with @BotFather on Telegram and paste the token here.", - "isNested": false - }, - { - "path": "profile.telegramConnected", - "englishValue": "Your Telegram account is connected! Send messages to your bot to add items to your tududi inbox.", - "isNested": false - }, - { - "path": "profile.setupTelegram", - "englishValue": "Setup Telegram", - "isNested": false - }, - { - "path": "profile.setupTelegramLower", - "englishValue": "setup telegram", - "isNested": false - }, - { - "path": "profile.settingUp", - "englishValue": "Setting up...", - "isNested": false - }, - { - "path": "profile.telegramSetupSuccess", - "englishValue": "Telegram bot \"{{botName}}\" configured successfully!", - "isNested": false - }, - { - "path": "profile.telegramSetupFailed", - "englishValue": "Failed to set up Telegram bot.", - "isNested": false - }, - { - "path": "profile.invalidTelegramToken", - "englishValue": "Invalid Telegram bot token format.", - "isNested": false - }, - { - "path": "profile.telegramInstructions", - "englishValue": "Go to https://t.me/{{botUsername}} and start chatting with your bot to connect it to your tududi account.", - "isNested": false - }, - { - "path": "profile.botConfigured", - "englishValue": "Bot configured successfully!", - "isNested": false - }, - { - "path": "profile.botUsername", - "englishValue": "Bot Username:", - "isNested": false - }, - { - "path": "profile.pollingStatus", - "englishValue": "Polling Status:", - "isNested": false - }, - { - "path": "profile.pollingActive", - "englishValue": "Active - Receiving messages", - "isNested": false - }, - { - "path": "profile.pollingInactive", - "englishValue": "Inactive - Not receiving messages", - "isNested": false - }, - { - "path": "profile.pollingNote", - "englishValue": "Polling periodically checks for new messages from Telegram and adds them to your inbox.", - "isNested": false - }, - { - "path": "profile.pollingDescription", - "englishValue": "Polling periodically checks for new messages from Telegram and adds them to your inbox.", - "isNested": false - }, - { - "path": "profile.startPolling", - "englishValue": "Start Polling", - "isNested": false - }, - { - "path": "profile.stopPolling", - "englishValue": "Stop Polling", - "isNested": false - }, - { - "path": "profile.startPollingLower", - "englishValue": "start polling", - "isNested": false - }, - { - "path": "profile.stopPollingLower", - "englishValue": "stop polling", - "isNested": false - }, - { - "path": "profile.pollingStarted", - "englishValue": "Telegram polling started", - "isNested": false - }, - { - "path": "profile.pollingStopped", - "englishValue": "Telegram polling stopped", - "isNested": false - }, - { - "path": "profile.pollingError", - "englishValue": "Error managing Telegram polling", - "isNested": false - }, - { - "path": "profile.startPollingFailed", - "englishValue": "Failed to start polling", - "isNested": false - }, - { - "path": "profile.stopPollingFailed", - "englishValue": "Failed to stop polling", - "isNested": false - }, - { - "path": "profile.openTelegram", - "englishValue": "Open in Telegram", - "isNested": false - }, - { - "path": "profile.openInTelegram", - "englishValue": "open in telegram", - "isNested": false - }, - { - "path": "profile.testTelegramMessage", - "englishValue": "Test Telegram", - "isNested": false - }, - { - "path": "profile.testMessageSent", - "englishValue": "Test message sent successfully!", - "isNested": false - }, - { - "path": "profile.testMessageFailed", - "englishValue": "Failed to send test message.", - "isNested": false - }, - { - "path": "profile.testMessageError", - "englishValue": "Error sending test message.", - "isNested": false - }, - { - "path": "profile.taskSummaryNotifications", - "englishValue": "Task Summary Notifications", - "isNested": false - }, - { - "path": "profile.taskSummaryDescription", - "englishValue": "Receive regular summaries of your tasks via Telegram. This feature requires Telegram integration to be set up.", - "isNested": false - }, - { - "path": "profile.enableTaskSummaries", - "englishValue": "Enable Task Summaries", - "isNested": false - }, - { - "path": "profile.summaryFrequency", - "englishValue": "Summary frequency", - "isNested": false - }, - { - "path": "profile.summaryFrequencyDescription", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "profile.sendTestSummary", - "englishValue": "Send test summary", - "isNested": false - }, - { - "path": "profile.frequency", - "englishValue": { - "1h": "1 hour", - "2h": "2 hours", - "4h": "4 hours", - "8h": "8 hours", - "12h": "12 hours", - "daily": "1 day", - "weekly": "1 week" - }, - "isNested": true - }, - { - "path": "profile.frequencyHelp", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "profile.passwordChangeNote", - "englishValue": "Password changes will be saved when you click \"Save Changes\" at the bottom of the form.", - "isNested": false - }, - { - "path": "profile.passwordChangeOptional", - "englishValue": "Leave password fields empty to update other settings without changing your password.", - "isNested": false - }, - { - "path": "productivity", - "englishValue": { - "stalledProjects": "Stalled Projects", - "stalledProjectsDesc": "These projects have no tasks or actions", - "needsNextAction": "Projects Need Next Action", - "needsNextActionDesc": "These projects have completed tasks but no next action", - "tasksAreProjects": "Tasks That Look Like Projects", - "tasksAreProjectsDesc": "These tasks might need to be broken down", - "vagueTasks": "Tasks Without Clear Action", - "vagueTasksDesc": "These tasks need clearer action verbs", - "staleTasks": "Stale Tasks", - "staleTasksDesc": "Tasks not updated in {{days}} days", - "stuckProjects": "Stuck Projects", - "stuckProjectsDesc": "Projects not updated recently", - "issuesFound": "Found {{count}} productivity issue(s) that need attention", - "reviewItems": "Click to review and improve your workflow", - "suggestion": "Click on any item above to open it and make improvements." - }, - "isNested": true - }, - { - "path": "modals.deleteTask", - "englishValue": { - "title": "Delete Task", - "confirmation": "Are you sure you want to delete this task? This action cannot be undone." - }, - "isNested": true - }, - { - "path": "modals.areaCreation", - "englishValue": "Create New Area", - "isNested": false - }, - { - "path": "modals.areaEdit", - "englishValue": "Edit Area", - "isNested": false - }, - { - "path": "modals.updateArea", - "englishValue": "Update Area", - "isNested": false - }, - { - "path": "modals.createArea", - "englishValue": "Create Area", - "isNested": false - }, - { - "path": "modals.updateTag", - "englishValue": "Update Tag", - "isNested": false - }, - { - "path": "modals.createTag", - "englishValue": "Create Tag", - "isNested": false - }, - { - "path": "forms.task.namePlaceholder", - "englishValue": "Add Task Name", - "isNested": false - }, - { - "path": "forms.task.labels.tags", - "englishValue": "Tags", - "isNested": false - }, - { - "path": "forms.task.labels.project", - "englishValue": "Project", - "isNested": false - }, - { - "path": "forms.task.labels.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "forms.task.labels.priority", - "englishValue": "Priority", - "isNested": false - }, - { - "path": "forms.task.labels.dueDate", - "englishValue": "Due Date", - "isNested": false - }, - { - "path": "forms.task.labels.note", - "englishValue": "Note", - "isNested": false - }, - { - "path": "forms.task.projectSearchPlaceholder", - "englishValue": "Search or create a project...", - "isNested": false - }, - { - "path": "forms.task.noMatchingProjects", - "englishValue": "No matching projects", - "isNested": false - }, - { - "path": "forms.task.creatingProject", - "englishValue": "Creating...", - "isNested": false - }, - { - "path": "forms.task.createProject", - "englishValue": "+ Create", - "isNested": false - }, - { - "path": "forms.task.dueDatePlaceholder", - "englishValue": "Select due date", - "isNested": false - }, - { - "path": "forms.task.endDatePlaceholder", - "englishValue": "Select end date", - "isNested": false - }, - { - "path": "forms.task.nameHelper", - "englishValue": { - "title": "Make it more descriptive!", - "suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\"", - "short": "Make it more descriptive!", - "noVerb": "Add an action verb!", - "vague": "Be more specific!" - }, - "isNested": true - }, - { - "path": "forms.task.suggestions", - "englishValue": { - "short": "Try to be more specific about what needs to be done", - "noVerb": "What specific action do you need to take? Try starting with a verb.", - "vague": "Try starting with an action verb like \"Call\", \"Write\", \"Schedule\", or \"Research\"" - }, - "isNested": true - }, - { - "path": "forms.areaName", - "englishValue": "Area Name", - "isNested": false - }, - { - "path": "forms.areaDescription", - "englishValue": "Area Description", - "isNested": false - }, - { - "path": "forms.areaNamePlaceholder", - "englishValue": "Enter area name", - "isNested": false - }, - { - "path": "forms.areaDescriptionPlaceholder", - "englishValue": "Enter area description", - "isNested": false - }, - { - "path": "forms.tagName", - "englishValue": "Tag Name", - "isNested": false - }, - { - "path": "forms.tagNamePlaceholder", - "englishValue": "Enter tag name", - "isNested": false - }, - { - "path": "forms.tagInputPlaceholder", - "englishValue": "Type to add a tag", - "isNested": false - }, - { - "path": "forms.createTagOption", - "englishValue": "+ Create \"{{tagName}}\"", - "isNested": false - }, - { - "path": "forms.removeTagAriaLabel", - "englishValue": "Remove tag {{tagName}}", - "isNested": false - }, - { - "path": "priority", - "englishValue": { - "low": "Low", - "medium": "Medium", - "high": "High" - }, - "isNested": true - }, - { - "path": "status", - "englishValue": { - "notStarted": "Not Started", - "inProgress": "In Progress", - "done": "Done", - "archived": "Archived", - "unknown": "Unknown" - }, - "isNested": true - }, - { - "path": "project.name", - "englishValue": "Project Name", - "isNested": false - }, - { - "path": "project.noNotes", - "englishValue": "No notes for this project.", - "isNested": false - }, - { - "path": "project.deleteProject", - "englishValue": "Delete Project", - "isNested": false - }, - { - "path": "project.createSuccess", - "englishValue": "Project created successfully!", - "isNested": false - }, - { - "path": "errors.areaNameRequired", - "englishValue": "Area name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveArea", - "englishValue": "Failed to save area.", - "isNested": false - }, - { - "path": "errors.tagNameRequired", - "englishValue": "Tag name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveTag", - "englishValue": "Failed to save tag.", - "isNested": false - }, - { - "path": "inbox.captureThought", - "englishValue": "Capture your thought...", - "isNested": false - }, - { - "path": "inbox.saveToInbox", - "englishValue": "Save to Inbox", - "isNested": false - }, - { - "path": "inbox.itemAdded", - "englishValue": "Item added to inbox", - "isNested": false - }, - { - "path": "inbox.itemProcessed", - "englishValue": "Item processed", - "isNested": false - }, - { - "path": "inbox.itemDeleted", - "englishValue": "Item deleted", - "isNested": false - }, - { - "path": "inbox.itemUpdated", - "englishValue": "Item updated", - "isNested": false - }, - { - "path": "inbox.newTelegramItem", - "englishValue": "New item from Telegram: {{content}}", - "isNested": false - }, - { - "path": "inbox.newItem", - "englishValue": "New inbox item added: {{content}}", - "isNested": false - }, - { - "path": "inbox.multipleNewItems", - "englishValue": "{{count}} more new items added", - "isNested": false - }, - { - "path": "inbox.loadError", - "englishValue": "Failed to load inbox items", - "isNested": false - }, - { - "path": "inbox.addError", - "englishValue": "Failed to add inbox item", - "isNested": false - }, - { - "path": "inbox.processError", - "englishValue": "Failed to process inbox item", - "isNested": false - }, - { - "path": "inbox.deleteError", - "englishValue": "Failed to delete inbox item", - "isNested": false - }, - { - "path": "inbox.updateError", - "englishValue": "Failed to update inbox item", - "isNested": false - }, - { - "path": "inbox.contentRequired", - "englishValue": "Content cannot be empty", - "isNested": false - }, - { - "path": "inbox.createTask", - "englishValue": "Create task", - "isNested": false - }, - { - "path": "inbox.createProject", - "englishValue": "Create project", - "isNested": false - }, - { - "path": "inbox.createNote", - "englishValue": "Create note", - "isNested": false - }, - { - "path": "inbox.convertTo", - "englishValue": "Convert to", - "isNested": false - }, - { - "path": "inbox.unprocessedItems", - "englishValue": "You have {{count}} item(s) in your inbox", - "isNested": false - }, - { - "path": "inbox.processNow", - "englishValue": "Process now", - "isNested": false - }, - { - "path": "inbox.deleteConfirmTitle", - "englishValue": "Delete Item", - "isNested": false - }, - { - "path": "inbox.deleteConfirmMessage", - "englishValue": "Are you sure you want to delete this item from your inbox? This action cannot be undone.", - "isNested": false - }, - { - "path": "dateIndicators", - "englishValue": { - "today": "TODAY", - "tomorrow": "TOMORROW", - "yesterday": "YESTERDAY" - }, - "isNested": true - }, - { - "path": "success.areaUpdated", - "englishValue": "Area updated successfully!", - "isNested": false - }, - { - "path": "success.areaCreated", - "englishValue": "Area created successfully!", - "isNested": false - }, - { - "path": "success.tagUpdated", - "englishValue": "Tag updated successfully!", - "isNested": false - }, - { - "path": "success.tagCreated", - "englishValue": "Tag created successfully!", - "isNested": false - }, - { - "path": "success.projectCreated", - "englishValue": "Project created successfully!", - "isNested": false - }, - { - "path": "success.taskCreated", - "englishValue": "Task created successfully!", - "isNested": false - }, - { - "path": "success.taskUpdated", - "englishValue": "Task updated successfully!", - "isNested": false - }, - { - "path": "success.taskDeleted", - "englishValue": "Task deleted successfully!", - "isNested": false - }, - { - "path": "note", - "englishValue": { - "title": "Title", - "content": "Content", - "titlePlaceholder": "Enter note title", - "contentPlaceholder": "Enter note content", - "project": "Related Project (Optional)", - "createSuccess": "Note created successfully", - "createError": "Failed to create note" - }, - "isNested": true - }, - { - "path": "task.labels", - "englishValue": { - "tags": "Tags", - "project": "Project", - "status": "Status", - "priority": "Priority", - "dueDate": "Due Date", - "note": "Note" - }, - "isNested": true - }, - { - "path": "task.create", - "englishValue": "Create", - "isNested": false - }, - { - "path": "task.addTaskName", - "englishValue": "Add task name", - "isNested": false - }, - { - "path": "task.createSuccess", - "englishValue": "Task created successfully", - "isNested": false - }, - { - "path": "task.createError", - "englishValue": "Failed to create task", - "isNested": false - }, - { - "path": "task.saveAsTask", - "englishValue": "Save as Task", - "isNested": false - }, - { - "path": "task.updateSuccess", - "englishValue": "Task updated successfully", - "isNested": false - }, - { - "path": "task.updateError", - "englishValue": "Failed to update task", - "isNested": false - }, - { - "path": "task.deleteSuccess", - "englishValue": "Task deleted successfully", - "isNested": false - }, - { - "path": "task.deleteError", - "englishValue": "Failed to delete task", - "isNested": false - }, - { - "path": "task.startedSuccessfully", - "englishValue": "Task started successfully!", - "isNested": false - }, - { - "path": "task.created", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.createdSuccessfully", - "englishValue": "created successfully!", - "isNested": false - }, - { - "path": "task.updated", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.updatedSuccessfully", - "englishValue": "updated successfully!", - "isNested": false - }, - { - "path": "task.deleted", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.deletedSuccessfully", - "englishValue": "deleted successfully!", - "isNested": false - }, - { - "path": "projects.active", - "englishValue": "Active", - "isNested": false - }, - { - "path": "projects.inactive", - "englishValue": "Inactive", - "isNested": false - }, - { - "path": "projects.metrics", - "englishValue": "Projects", - "isNested": false - }, - { - "path": "areas.addArea", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "areas.loading", - "englishValue": "Loading area details...", - "isNested": false - }, - { - "path": "areas.error", - "englishValue": "Error loading area details.", - "isNested": false - }, - { - "path": "areas.notFound", - "englishValue": "Area not found.", - "isNested": false - }, - { - "path": "areas.details", - "englishValue": "Area Details", - "isNested": false - }, - { - "path": "areas.viewProjects", - "englishValue": "View Projects in {{name}}", - "isNested": false - }, - { - "path": "notes.error", - "englishValue": "Error loading notes", - "isNested": false - }, - { - "path": "notes.searchPlaceholder", - "englishValue": "Search notes...", - "isNested": false - }, - { - "path": "recurrence.days", - "englishValue": "days", - "isNested": false - }, - { - "path": "pomodoro", - "englishValue": { - "play": "Play", - "pause": "Pause", - "reset": "Reset", - "close": "Close", - "complete": "Pomodoro Complete!", - "completeMessage": "Great work! Time for a break.", - "done": "Done" - }, - "isNested": true - } - ] - }, - "ua": { - "languageName": "Ukrainian", - "missingCount": 202, - "missing": [ - { - "path": "common.appLoading", - "englishValue": "Loading application... Please wait.", - "isNested": false - }, - { - "path": "common.area", - "englishValue": "Area", - "isNested": false - }, - { - "path": "common.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "common.saving", - "englishValue": "Saving...", - "isNested": false - }, - { - "path": "common.settings", - "englishValue": "Settings", - "isNested": false - }, - { - "path": "common.none", - "englishValue": "None", - "isNested": false - }, - { - "path": "sidebar.addAreaAriaLabel", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addAreaTitle", - "englishValue": "Add Area", - "isNested": false - }, - { - "path": "sidebar.addTagAriaLabel", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "sidebar.addTagTitle", - "englishValue": "Add Tag", - "isNested": false - }, - { - "path": "dashboard.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "dashboard.showMetrics", - "englishValue": "Show Metrics", - "isNested": false - }, - { - "path": "dashboard.hideMetrics", - "englishValue": "Hide Metrics", - "isNested": false - }, - { - "path": "dashboard.insights", - "englishValue": "Insights", - "isNested": false - }, - { - "path": "dashboard.showInsights", - "englishValue": "Show Insights", - "isNested": false - }, - { - "path": "dashboard.hideInsights", - "englishValue": "Hide Insights", - "isNested": false - }, - { - "path": "dashboard.intelligence", - "englishValue": "Intelligence", - "isNested": false - }, - { - "path": "dashboard.showIntelligence", - "englishValue": "Show Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.hideIntelligence", - "englishValue": "Hide Intelligence Suggestions", - "isNested": false - }, - { - "path": "dashboard.completed", - "englishValue": "Completed", - "isNested": false - }, - { - "path": "dashboard.showCompleted", - "englishValue": "Show Completed Tasks", - "isNested": false - }, - { - "path": "dashboard.hideCompleted", - "englishValue": "Hide Completed Tasks", - "isNested": false - }, - { - "path": "tasks.weeklyCompletions", - "englishValue": "Weekly Progress", - "isNested": false - }, - { - "path": "tasks.taskCompleted", - "englishValue": "task completed", - "isNested": false - }, - { - "path": "tasks.tasksCompleted", - "englishValue": "tasks completed", - "isNested": false - }, - { - "path": "tasks.metrics", - "englishValue": "Metrics", - "isNested": false - }, - { - "path": "tasks.setInProgress", - "englishValue": "Set in progress", - "isNested": false - }, - { - "path": "tasks.setNotStarted", - "englishValue": "Set to not started", - "isNested": false - }, - { - "path": "profile.settings", - "englishValue": "Profile Settings", - "isNested": false - }, - { - "path": "profile.theme", - "englishValue": "Theme", - "isNested": false - }, - { - "path": "profile.notifications", - "englishValue": "Notifications", - "isNested": false - }, - { - "path": "profile.lightMode", - "englishValue": "Light Mode", - "isNested": false - }, - { - "path": "profile.darkMode", - "englishValue": "Dark Mode", - "isNested": false - }, - { - "path": "profile.light", - "englishValue": "Light", - "isNested": false - }, - { - "path": "profile.dark", - "englishValue": "Dark", - "isNested": false - }, - { - "path": "profile.saveChanges", - "englishValue": "Save Changes", - "isNested": false - }, - { - "path": "profile.languageChangedNote", - "englishValue": "Language changes are applied immediately", - "isNested": false - }, - { - "path": "profile.languageChanging", - "englishValue": "Changing language...", - "isNested": false - }, - { - "path": "profile.languagePreference", - "englishValue": "Language Preference", - "isNested": false - }, - { - "path": "profile.personalInfo", - "englishValue": "Personal Information", - "isNested": false - }, - { - "path": "profile.errorMessage", - "englishValue": "Failed to update profile", - "isNested": false - }, - { - "path": "profile.telegramIntegration", - "englishValue": "Telegram Integration", - "isNested": false - }, - { - "path": "profile.telegramDescription", - "englishValue": "Connect your tududi account to a Telegram bot to add items to your inbox via Telegram messages.", - "isNested": false - }, - { - "path": "profile.telegramBotToken", - "englishValue": "Telegram Bot Token", - "isNested": false - }, - { - "path": "profile.telegramTokenDescription", - "englishValue": "Create a bot with @BotFather on Telegram and paste the token here.", - "isNested": false - }, - { - "path": "profile.telegramConnected", - "englishValue": "Your Telegram account is connected! Send messages to your bot to add items to your tududi inbox.", - "isNested": false - }, - { - "path": "profile.settingUp", - "englishValue": "Setting up...", - "isNested": false - }, - { - "path": "profile.telegramSetupSuccess", - "englishValue": "Telegram bot \"{{botName}}\" configured successfully!", - "isNested": false - }, - { - "path": "profile.telegramSetupFailed", - "englishValue": "Failed to set up Telegram bot.", - "isNested": false - }, - { - "path": "profile.invalidTelegramToken", - "englishValue": "Invalid Telegram bot token format.", - "isNested": false - }, - { - "path": "profile.telegramInstructions", - "englishValue": "Go to https://t.me/{{botUsername}} and start chatting with your bot to connect it to your tududi account.", - "isNested": false - }, - { - "path": "profile.botConfigured", - "englishValue": "Bot configured successfully!", - "isNested": false - }, - { - "path": "profile.botUsername", - "englishValue": "Bot Username:", - "isNested": false - }, - { - "path": "profile.pollingStatus", - "englishValue": "Polling Status:", - "isNested": false - }, - { - "path": "profile.pollingActive", - "englishValue": "Active - Receiving messages", - "isNested": false - }, - { - "path": "profile.pollingInactive", - "englishValue": "Inactive - Not receiving messages", - "isNested": false - }, - { - "path": "profile.pollingStarted", - "englishValue": "Telegram polling started", - "isNested": false - }, - { - "path": "profile.pollingStopped", - "englishValue": "Telegram polling stopped", - "isNested": false - }, - { - "path": "profile.pollingError", - "englishValue": "Error managing Telegram polling", - "isNested": false - }, - { - "path": "profile.startPollingFailed", - "englishValue": "Failed to start polling", - "isNested": false - }, - { - "path": "profile.stopPollingFailed", - "englishValue": "Failed to stop polling", - "isNested": false - }, - { - "path": "profile.testTelegramMessage", - "englishValue": "Test Telegram", - "isNested": false - }, - { - "path": "profile.testMessageSent", - "englishValue": "Test message sent successfully!", - "isNested": false - }, - { - "path": "profile.testMessageFailed", - "englishValue": "Failed to send test message.", - "isNested": false - }, - { - "path": "profile.testMessageError", - "englishValue": "Error sending test message.", - "isNested": false - }, - { - "path": "profile.taskSummaryNotifications", - "englishValue": "Task Summary Notifications", - "isNested": false - }, - { - "path": "profile.taskSummaryDescription", - "englishValue": "Receive regular summaries of your tasks via Telegram. This feature requires Telegram integration to be set up.", - "isNested": false - }, - { - "path": "profile.enableTaskSummaries", - "englishValue": "Enable Task Summaries", - "isNested": false - }, - { - "path": "profile.summaryFrequency", - "englishValue": "Summary frequency", - "isNested": false - }, - { - "path": "profile.summaryFrequencyDescription", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "profile.sendTestSummary", - "englishValue": "Send test summary", - "isNested": false - }, - { - "path": "profile.frequency", - "englishValue": { - "1h": "1 hour", - "2h": "2 hours", - "4h": "4 hours", - "8h": "8 hours", - "12h": "12 hours", - "daily": "1 day", - "weekly": "1 week" - }, - "isNested": true - }, - { - "path": "profile.frequencyHelp", - "englishValue": "Choose how often you want to receive task summaries", - "isNested": false - }, - { - "path": "productivity", - "englishValue": { - "stalledProjects": "Stalled Projects", - "stalledProjectsDesc": "These projects have no tasks or actions", - "needsNextAction": "Projects Need Next Action", - "needsNextActionDesc": "These projects have completed tasks but no next action", - "tasksAreProjects": "Tasks That Look Like Projects", - "tasksAreProjectsDesc": "These tasks might need to be broken down", - "vagueTasks": "Tasks Without Clear Action", - "vagueTasksDesc": "These tasks need clearer action verbs", - "staleTasks": "Stale Tasks", - "staleTasksDesc": "Tasks not updated in {{days}} days", - "stuckProjects": "Stuck Projects", - "stuckProjectsDesc": "Projects not updated recently", - "issuesFound": "Found {{count}} productivity issue(s) that need attention", - "reviewItems": "Click to review and improve your workflow", - "suggestion": "Click on any item above to open it and make improvements." - }, - "isNested": true - }, - { - "path": "modals.confirmDelete", - "englishValue": "Are you sure you want to delete?", - "isNested": false - }, - { - "path": "modals.taskCreation", - "englishValue": "Create New Task", - "isNested": false - }, - { - "path": "modals.taskEdit", - "englishValue": "Edit Task", - "isNested": false - }, - { - "path": "modals.deleteTask", - "englishValue": { - "title": "Delete Task", - "confirmation": "Are you sure you want to delete this task? This action cannot be undone." - }, - "isNested": true - }, - { - "path": "modals.areaCreation", - "englishValue": "Create New Area", - "isNested": false - }, - { - "path": "modals.areaEdit", - "englishValue": "Edit Area", - "isNested": false - }, - { - "path": "modals.updateArea", - "englishValue": "Update Area", - "isNested": false - }, - { - "path": "modals.createArea", - "englishValue": "Create Area", - "isNested": false - }, - { - "path": "modals.updateTag", - "englishValue": "Update Tag", - "isNested": false - }, - { - "path": "modals.createTag", - "englishValue": "Create Tag", - "isNested": false - }, - { - "path": "modals.deleteTag", - "englishValue": { - "title": "Delete Tag", - "message": "Are you sure you want to delete the tag \"{{tagName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteArea", - "englishValue": { - "title": "Delete Area", - "message": "Are you sure you want to delete the area \"{{areaName}}\"?" - }, - "isNested": true - }, - { - "path": "modals.deleteNote", - "englishValue": { - "title": "Delete Note", - "message": "Are you sure you want to delete the note \"{{noteTitle}}\"?" - }, - "isNested": true - }, - { - "path": "forms.title", - "englishValue": "Title", - "isNested": false - }, - { - "path": "forms.description", - "englishValue": "Description", - "isNested": false - }, - { - "path": "forms.dueDate", - "englishValue": "Due Date", - "isNested": false - }, - { - "path": "forms.priority", - "englishValue": "Priority", - "isNested": false - }, - { - "path": "forms.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "forms.assignedTo", - "englishValue": "Assigned To", - "isNested": false - }, - { - "path": "forms.category", - "englishValue": "Category", - "isNested": false - }, - { - "path": "forms.task.namePlaceholder", - "englishValue": "Add Task Name", - "isNested": false - }, - { - "path": "forms.task.labels.tags", - "englishValue": "Tags", - "isNested": false - }, - { - "path": "forms.task.labels.project", - "englishValue": "Project", - "isNested": false - }, - { - "path": "forms.task.labels.status", - "englishValue": "Status", - "isNested": false - }, - { - "path": "forms.task.labels.priority", - "englishValue": "Priority", - "isNested": false - }, - { - "path": "forms.task.labels.dueDate", - "englishValue": "Due Date", - "isNested": false - }, - { - "path": "forms.task.labels.note", - "englishValue": "Note", - "isNested": false - }, - { - "path": "forms.task.projectSearchPlaceholder", - "englishValue": "Search or create a project...", - "isNested": false - }, - { - "path": "forms.task.noMatchingProjects", - "englishValue": "No matching projects", - "isNested": false - }, - { - "path": "forms.task.creatingProject", - "englishValue": "Creating...", - "isNested": false - }, - { - "path": "forms.task.createProject", - "englishValue": "+ Create", - "isNested": false - }, - { - "path": "forms.task.dueDatePlaceholder", - "englishValue": "Select due date", - "isNested": false - }, - { - "path": "forms.task.endDatePlaceholder", - "englishValue": "Select end date", - "isNested": false - }, - { - "path": "forms.task.nameHelper", - "englishValue": { - "title": "Make it more descriptive!", - "suggestion": "Try adding more details like \"Call dentist to schedule cleaning appointment\" instead of just \"Call dentist\"", - "short": "Make it more descriptive!", - "noVerb": "Add an action verb!", - "vague": "Be more specific!" - }, - "isNested": true - }, - { - "path": "forms.task.suggestions", - "englishValue": { - "short": "Try to be more specific about what needs to be done", - "noVerb": "What specific action do you need to take? Try starting with a verb.", - "vague": "Try starting with an action verb like \"Call\", \"Write\", \"Schedule\", or \"Research\"" - }, - "isNested": true - }, - { - "path": "forms.areaName", - "englishValue": "Area Name", - "isNested": false - }, - { - "path": "forms.areaDescription", - "englishValue": "Area Description", - "isNested": false - }, - { - "path": "forms.areaNamePlaceholder", - "englishValue": "Enter area name", - "isNested": false - }, - { - "path": "forms.areaDescriptionPlaceholder", - "englishValue": "Enter area description", - "isNested": false - }, - { - "path": "forms.tagName", - "englishValue": "Tag Name", - "isNested": false - }, - { - "path": "forms.tagNamePlaceholder", - "englishValue": "Enter tag name", - "isNested": false - }, - { - "path": "forms.tagInputPlaceholder", - "englishValue": "Type to add a tag", - "isNested": false - }, - { - "path": "forms.createTagOption", - "englishValue": "+ Create \"{{tagName}}\"", - "isNested": false - }, - { - "path": "forms.removeTagAriaLabel", - "englishValue": "Remove tag {{tagName}}", - "isNested": false - }, - { - "path": "auth", - "englishValue": { - "login": "Login", - "register": "Register", - "forgotPassword": "Forgot Password", - "email": "Email", - "password": "Password", - "confirmPassword": "Confirm Password", - "username": "Username", - "signup": "Sign Up", - "signin": "Sign In", - "signout": "Sign Out", - "resetPassword": "Reset Password", - "newPassword": "New Password", - "rememberMe": "Remember Me", - "loginSuccess": "Login Successful", - "loginFailed": "Login Failed", - "logoutSuccess": "Logout Successful" - }, - "isNested": true - }, - { - "path": "dropdown", - "englishValue": { - "createNew": "Create New", - "task": "Task", - "project": "Project", - "note": "Note", - "area": "Area" - }, - "isNested": true - }, - { - "path": "sort", - "englishValue": { - "due_date": "Due Date", - "name": "Name", - "priority": "Priority", - "status": "Status", - "created_at": "Created At" - }, - "isNested": true - }, - { - "path": "priority", - "englishValue": { - "low": "Low", - "medium": "Medium", - "high": "High" - }, - "isNested": true - }, - { - "path": "status", - "englishValue": { - "notStarted": "Not Started", - "inProgress": "In Progress", - "done": "Done", - "archived": "Archived", - "unknown": "Unknown" - }, - "isNested": true - }, - { - "path": "project.name", - "englishValue": "Project Name", - "isNested": false - }, - { - "path": "project.noNotes", - "englishValue": "No notes for this project.", - "isNested": false - }, - { - "path": "project.deleteProject", - "englishValue": "Delete Project", - "isNested": false - }, - { - "path": "project.createSuccess", - "englishValue": "Project created successfully!", - "isNested": false - }, - { - "path": "errors.required", - "englishValue": "This field is required", - "isNested": false - }, - { - "path": "errors.invalidEmail", - "englishValue": "Invalid email address", - "isNested": false - }, - { - "path": "errors.passwordMismatch", - "englishValue": "Passwords do not match", - "isNested": false - }, - { - "path": "errors.minLength", - "englishValue": "Minimum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.maxLength", - "englishValue": "Maximum length is {{length}} characters", - "isNested": false - }, - { - "path": "errors.serverError", - "englishValue": "Server error, please try again later", - "isNested": false - }, - { - "path": "errors.networkError", - "englishValue": "Network error, please check your connection", - "isNested": false - }, - { - "path": "errors.somethingWentWrong", - "englishValue": "Something went wrong, please try again", - "isNested": false - }, - { - "path": "errors.taskFetch", - "englishValue": "Failed to fetch tasks.", - "isNested": false - }, - { - "path": "errors.projectFetch", - "englishValue": "Failed to fetch projects.", - "isNested": false - }, - { - "path": "errors.taskCreate", - "englishValue": "Failed to create task.", - "isNested": false - }, - { - "path": "errors.taskUpdate", - "englishValue": "Failed to update task.", - "isNested": false - }, - { - "path": "errors.taskDelete", - "englishValue": "Failed to delete task.", - "isNested": false - }, - { - "path": "errors.areaNameRequired", - "englishValue": "Area name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveArea", - "englishValue": "Failed to save area.", - "isNested": false - }, - { - "path": "errors.tagNameRequired", - "englishValue": "Tag name is required.", - "isNested": false - }, - { - "path": "errors.failedToSaveTag", - "englishValue": "Failed to save tag.", - "isNested": false - }, - { - "path": "inbox.captureThought", - "englishValue": "Capture your thought...", - "isNested": false - }, - { - "path": "inbox.saveToInbox", - "englishValue": "Save to Inbox", - "isNested": false - }, - { - "path": "inbox.itemAdded", - "englishValue": "Item added to inbox", - "isNested": false - }, - { - "path": "inbox.itemProcessed", - "englishValue": "Item processed", - "isNested": false - }, - { - "path": "inbox.itemDeleted", - "englishValue": "Item deleted", - "isNested": false - }, - { - "path": "inbox.itemUpdated", - "englishValue": "Item updated", - "isNested": false - }, - { - "path": "inbox.newTelegramItem", - "englishValue": "New item from Telegram: {{content}}", - "isNested": false - }, - { - "path": "inbox.newItem", - "englishValue": "New inbox item added: {{content}}", - "isNested": false - }, - { - "path": "inbox.multipleNewItems", - "englishValue": "{{count}} more new items added", - "isNested": false - }, - { - "path": "inbox.loadError", - "englishValue": "Failed to load inbox items", - "isNested": false - }, - { - "path": "inbox.addError", - "englishValue": "Failed to add inbox item", - "isNested": false - }, - { - "path": "inbox.processError", - "englishValue": "Failed to process inbox item", - "isNested": false - }, - { - "path": "inbox.deleteError", - "englishValue": "Failed to delete inbox item", - "isNested": false - }, - { - "path": "inbox.updateError", - "englishValue": "Failed to update inbox item", - "isNested": false - }, - { - "path": "inbox.contentRequired", - "englishValue": "Content cannot be empty", - "isNested": false - }, - { - "path": "inbox.createTask", - "englishValue": "Create task", - "isNested": false - }, - { - "path": "inbox.createProject", - "englishValue": "Create project", - "isNested": false - }, - { - "path": "inbox.createNote", - "englishValue": "Create note", - "isNested": false - }, - { - "path": "inbox.convertTo", - "englishValue": "Convert to", - "isNested": false - }, - { - "path": "inbox.unprocessedItems", - "englishValue": "You have {{count}} item(s) in your inbox", - "isNested": false - }, - { - "path": "inbox.processNow", - "englishValue": "Process now", - "isNested": false - }, - { - "path": "inbox.deleteConfirmTitle", - "englishValue": "Delete Item", - "isNested": false - }, - { - "path": "inbox.deleteConfirmMessage", - "englishValue": "Are you sure you want to delete this item from your inbox? This action cannot be undone.", - "isNested": false - }, - { - "path": "dateIndicators", - "englishValue": { - "today": "TODAY", - "tomorrow": "TOMORROW", - "yesterday": "YESTERDAY" - }, - "isNested": true - }, - { - "path": "taskViews", - "englishValue": { - "project": { - "withName": "You are currently viewing all tasks associated with the \"{{projectName}}\" project. You can organize tasks within this project, set their priority, and track their completion. Use this space to focus on the tasks that belong specifically to this project.", - "noName": "You are viewing tasks for a specific project. Use this space to manage and track tasks associated with this project." - }, - "today": "These are the tasks that are due today or tasks you've scheduled for immediate attention. Use this view to focus on what needs to be completed today. Mark tasks as completed, update their status, or adjust their due dates if needed.", - "inbox": "The inbox is where all uncategorized tasks live. Tasks that haven't been assigned to a project or given a due date will show up here. This is your \"brain dump\" area where you can quickly jot down tasks and organize them later.", - "next": "This view shows all the tasks that are actionable in the near future. These tasks are ready to be worked on next and don't have long-term deadlines. It's a good place to focus when you're looking to make quick progress on tasks.", - "upcoming": "This view highlights tasks that are scheduled for the upcoming week. It helps you prepare and stay ahead of deadlines by giving you an overview of the work you need to tackle in the near future. Tasks with due dates within the next 7 days will appear here.", - "someday": "The \"Someday\" view is for tasks that aren't urgent and don't have a specific due date. These are tasks you may want to get to at some point, but they aren't a priority right now. Use this section to keep track of ideas or long-term goals.", - "completed": "Here you can see all the tasks you've completed. It's a great way to review your accomplishments and reflect on the work you've finished. You can also find tasks that may need to be unarchived or referenced in the future.", - "allTasks": "You are viewing all tasks. This includes tasks from different projects, tasks without specific due dates, and tasks with varying levels of priority. Use this view for an overall look at everything on your to-do list." - }, - "isNested": true - }, - { - "path": "success.areaUpdated", - "englishValue": "Area updated successfully!", - "isNested": false - }, - { - "path": "success.areaCreated", - "englishValue": "Area created successfully!", - "isNested": false - }, - { - "path": "success.tagUpdated", - "englishValue": "Tag updated successfully!", - "isNested": false - }, - { - "path": "success.tagCreated", - "englishValue": "Tag created successfully!", - "isNested": false - }, - { - "path": "success.projectCreated", - "englishValue": "Project created successfully!", - "isNested": false - }, - { - "path": "success.taskCreated", - "englishValue": "Task created successfully!", - "isNested": false - }, - { - "path": "success.taskUpdated", - "englishValue": "Task updated successfully!", - "isNested": false - }, - { - "path": "success.taskDeleted", - "englishValue": "Task deleted successfully!", - "isNested": false - }, - { - "path": "note", - "englishValue": { - "title": "Title", - "content": "Content", - "titlePlaceholder": "Enter note title", - "contentPlaceholder": "Enter note content", - "project": "Related Project (Optional)", - "createSuccess": "Note created successfully", - "createError": "Failed to create note" - }, - "isNested": true - }, - { - "path": "task.labels", - "englishValue": { - "tags": "Tags", - "project": "Project", - "status": "Status", - "priority": "Priority", - "dueDate": "Due Date", - "note": "Note" - }, - "isNested": true - }, - { - "path": "task.create", - "englishValue": "Create", - "isNested": false - }, - { - "path": "task.addTaskName", - "englishValue": "Add task name", - "isNested": false - }, - { - "path": "task.createSuccess", - "englishValue": "Task created successfully", - "isNested": false - }, - { - "path": "task.createError", - "englishValue": "Failed to create task", - "isNested": false - }, - { - "path": "task.saveAsTask", - "englishValue": "Save as Task", - "isNested": false - }, - { - "path": "task.updateSuccess", - "englishValue": "Task updated successfully", - "isNested": false - }, - { - "path": "task.updateError", - "englishValue": "Failed to update task", - "isNested": false - }, - { - "path": "task.deleteSuccess", - "englishValue": "Task deleted successfully", - "isNested": false - }, - { - "path": "task.deleteError", - "englishValue": "Failed to delete task", - "isNested": false - }, - { - "path": "task.startedSuccessfully", - "englishValue": "Task started successfully!", - "isNested": false - }, - { - "path": "task.created", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.createdSuccessfully", - "englishValue": "created successfully!", - "isNested": false - }, - { - "path": "task.updated", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.updatedSuccessfully", - "englishValue": "updated successfully!", - "isNested": false - }, - { - "path": "task.deleted", - "englishValue": "Task", - "isNested": false - }, - { - "path": "task.deletedSuccessfully", - "englishValue": "deleted successfully!", - "isNested": false - }, - { - "path": "projects.active", - "englishValue": "Active", - "isNested": false - }, - { - "path": "projects.inactive", - "englishValue": "Inactive", - "isNested": false - }, - { - "path": "projects.metrics", - "englishValue": "Projects", - "isNested": false - }, - { - "path": "areas", - "englishValue": { - "title": "Areas", - "noAreasFound": "No areas found", - "editAreaAriaLabel": "Edit area {{name}}", - "editAreaTitle": "Edit area {{name}}", - "deleteAreaAriaLabel": "Delete area {{name}}", - "deleteAreaTitle": "Delete area {{name}}", - "addArea": "Add Area", - "loading": "Loading area details...", - "error": "Error loading area details.", - "notFound": "Area not found.", - "details": "Area Details", - "viewProjects": "View Projects in {{name}}" - }, - "isNested": true - }, - { - "path": "tags", - "englishValue": { - "loading": "Loading tags...", - "searchPlaceholder": "Search tags...", - "title": "Tags", - "noTagsFound": "No tags found", - "editTagAriaLabel": "Edit tag {{tagName}}", - "editTagTitle": "Edit tag {{tagName}}", - "deleteTagAriaLabel": "Delete tag {{tagName}}", - "deleteTagTitle": "Delete tag {{tagName}}", - "error": "Error fetching tag.", - "notFound": "Tag not found.", - "details": "Tag Details", - "name": "Name", - "status": "Status", - "active": "Active", - "inactive": "Inactive", - "viewTasksWithTag": "View tasks with this tag", - "typeToAdd": "Type to add a tag", - "noItemsWithTag": "No items found with this tag" - }, - "isNested": true - }, - { - "path": "recurrence.days", - "englishValue": "days", - "isNested": false - }, - { - "path": "pomodoro", - "englishValue": { - "play": "Play", - "pause": "Pause", - "reset": "Reset", - "close": "Close", - "complete": "Pomodoro Complete!", - "completeMessage": "Great work! Time for a break.", - "done": "Done" - }, - "isNested": true - } - ] - } - }, - "summary": { - "totalLanguages": 5, - "totalMissingTranslations": 777 - } -} \ No newline at end of file diff --git a/scripts/package-lock.json b/scripts/package-lock.json deleted file mode 100644 index 4473846..0000000 --- a/scripts/package-lock.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "tududi-translation-scripts", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "tududi-translation-scripts", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "commander": "^11.0.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "license": "MIT", - "engines": { - "node": ">=16" - } - } - } -} diff --git a/scripts/package.json b/scripts/package.json deleted file mode 100644 index f0ace5f..0000000 --- a/scripts/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "tududi-translation-scripts", - "version": "1.0.0", - "description": "Translation management scripts for tududi", - "main": "sync-translations.js", - "scripts": { - "sync": "node sync-translations.js" - }, - "dependencies": { - "commander": "^11.0.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "author": "tududi team", - "license": "MIT" -} \ No newline at end of file diff --git a/scripts/README.md b/scripts/sync-translations-README.md similarity index 100% rename from scripts/README.md rename to scripts/sync-translations-README.md