Commit Graph

5 Commits

Author SHA1 Message Date
Dries Peeters
1596537512 Complete translation system implementation and fixes
This commit implements comprehensive internationalization (i18n) support
across the entire TimeTracker application, ensuring all user-facing strings
are properly translatable.

## Translation Implementation

### Route Files (Flash Messages)
- Fixed all untranslated flash messages in route files:
  * app/routes/admin.py (36 messages)
  * app/routes/tasks.py (43 messages)
  * app/routes/timer.py (44 messages)
  * app/routes/projects.py (33 messages)
  * app/routes/payments.py (28 messages)
  * app/routes/clients.py (25 messages)
  * app/routes/invoices.py (24 messages)
  * Plus all other route files (recurring_invoices, kanban, reports, etc.)
- Added missing `from flask_babel import _` imports to:
  * app/routes/setup.py
  * app/routes/budget_alerts.py
  * app/routes/saved_filters.py
  * app/routes/reports.py
  * app/routes/time_entry_templates.py

### Template Files
- Fixed headers and labels in templates:
  * admin/user_form.html
  * audit_logs/view.html
  * timer/timer_page.html
  * reports/index.html
  * reports/user_report.html
  * time_entry_templates/view.html
  * recurring_invoices/view.html
- Fixed form placeholders in:
  * expense_categories/form.html
  * expenses/form.html
  * mileage/form.html
  * per_diem/form.html
  * per_diem/rate_form.html
- Fixed button and link text in list views:
  * invoices/list.html
  * payments/list.html
  * expenses/list.html
  * per_diem/list.html
  * projects/list.html
- Fixed title attributes for accessibility

### Email Templates
- Added translation support to all email templates:
  * quote_sent.html, quote_rejected.html, quote_expired.html
  * quote_expiring.html, quote_approved.html, quote_accepted.html
  * quote_approval_request.html, quote_approval_rejected.html
  * invoice.html, overdue_invoice.html
  * task_assigned.html, comment_mention.html
  * client_portal_password_setup.html
  * weekly_summary.html, test_email.html
  * quote.html

### Component Templates
- Fixed save_filter_widget.html with translated text
- Updated JavaScript strings in quote_pdf_layout.html

## Translation Files

### Extraction and Updates
- Extracted all new translatable strings using pybabel
- Updated all language catalogs (.po files) with new strings
- Languages updated: en, nl, de, fr, it, fi, es, ar, he, nb, no

### Automatic Translation
- Created scripts/complete_all_translations.py for automatic translation
- Translated ~3,100 strings per language using Google Translate API
- Translation completion rates:
  * Dutch (NL): 99.97% (3,098/3,099)
  * German (DE): 99.94% (3,097/3,099)
  * French (FR): 99.97% (3,098/3,099)
  * Italian (IT): 99.90% (3,096/3,099)
  * Finnish (FI): 99.06% (3,070/3,099)
  * Spanish (ES): 99.97% (3,098/3,099)
  * Arabic (AR): 99.97% (3,098/3,099)
  * Hebrew (HE): 99.90% (3,096/3,099)
  * Norwegian Bokmål (NB): 99.94% (3,097/3,099)
  * Norwegian (NO): 99.94% (3,097/3,099)

### Placeholder Fixes
- Created scripts/fix_translation_placeholders.py
- Fixed 281 placeholder name errors across all languages
- Preserved original English placeholder names (e.g., %(error)s, %(rate)s)
- Fixed format specifier issues (e.g., %(rate).2f%%)

## Bug Fixes

### Code Fixes
- Fixed indentation error in app/routes/timer.py (line 458)
- Fixed missing translation function imports in route files

### Translation Compilation
- All translation catalogs now compile successfully
- No compilation errors remaining
- All .mo files generated correctly

## Scripts Added

- scripts/complete_all_translations.py: Automatic translation using deep-translator
- scripts/fix_translation_placeholders.py: Fix placeholder names in translations

## Impact

- All user-facing strings are now translatable
- Application supports 11 languages with >99% translation coverage
- Improved user experience for non-English speakers
- Consistent translation system across all application components
2025-11-24 14:01:31 +01:00
Dries Peeters
5ace391bd9 feat(i18n): Add comprehensive translation support across all templates
- Replace hardcoded English strings with translation function calls in 36 template files
- Update translation files for all supported languages (ar, de, es, fi, fr, he, it, nb, nl, no)
- Add over 55,000 new translation entries across all language files
- Update extract_translations.py to use 'python -m babel.messages.frontend' instead of pybabel
- Improve internationalization coverage for UI elements including:
  * Skip to content links
  * Sidebar toggle buttons
  * Command palette placeholders
  * Admin dashboard elements
  * Form labels and buttons
  * Report templates
  * Payment and invoice views

This commit significantly improves the application's multilingual support
by making previously hardcoded strings translatable.
2025-11-18 11:35:57 +01:00
Dries Peeters
3f73cb35c8 feat(i18n): Add Norwegian translation support and improve internationalization
- Add Norwegian (Norsk) language support with locale code normalization (no -> nb)
- Create Norwegian translation files (translations/nb/ and translations/no/)
- Fill empty Norwegian translation strings with English fallback values
- Add locale normalization for Flask-Babel compatibility (no -> nb mapping)
- Update context processor to correctly display 'Norsk' label instead of 'NB'

Translation improvements:
- Wrap all hardcoded strings in templates with _() translation function
- Add missing translations for setup, timer, tasks, invoices, and admin templates
- Ensure brandnames 'drytrix' and 'TimeTracker' remain untranslated across all languages
- Add new translation strings to all language files (en, de, nl, fr, it, fi, es, no, ar, he)
- Update translation files for: initial_setup, manual_entry, tasks/list, email_templates, etc.

Bug fixes:
- Add missing /api/summary/today endpoint for daily summary notifications
- Fix 'Response body already consumed' error in smart-notifications.js
- Improve translation compilation logging and error handling
- Add debug endpoint /debug/i18n for troubleshooting translation issues

Technical changes:
- Improve ensure_translations_compiled() with better logging
- Add locale normalization function for Norwegian locale handling
- Update context processor to reverse-map normalized locales for display
- Fix JavaScript fetch error handling to check response.ok before reading body
2025-11-17 19:21:24 +01:00
Dries Peeters
3f4b273b18 feat: Add command palette, enhance calendar, and improve i18n
This commit implements three major feature enhancements to improve user
productivity and experience:

COMMAND PALETTE IMPROVEMENTS:
- Add '?' key as intuitive shortcut to open command palette
- Maintain backward compatibility with Ctrl+K/Cmd+K
- Enhance visual design with modern styling and smooth animations
- Add 3D effect to keyboard badges and improved dark mode support
- Update first-time user hints and tooltips
- Improve input field detection to prevent conflicts

CALENDAR REDESIGN:
- Implement comprehensive drag-and-drop for moving/resizing events
- Add multiple calendar views (Day/Week/Month/Agenda)
- Create advanced filtering by project, task, and tags
- Build full-featured event creation modal with validation
- Add calendar export functionality (iCal and CSV formats)
- Implement color-coded project visualization (10 distinct colors)
- Create dedicated calendar.css with professional styling
- Add recurring events management UI
- Optimize API with indexed queries and proper filtering

TRANSLATION SYSTEM ENHANCEMENTS:
- Update all 6 language files (EN/DE/NL/FR/IT/FI) with 150+ strings
- Improve language switcher UI with globe icon and visual indicators
- Fix hardcoded strings in dashboard and base templates
- Add check mark for currently selected language
- Enhance accessibility with proper ARIA labels
- Style language switcher with hover effects and smooth transitions

DOCUMENTATION:
- Add COMMAND_PALETTE_IMPROVEMENTS.md and COMMAND_PALETTE_USAGE.md
- Create CALENDAR_IMPROVEMENTS_SUMMARY.md and CALENDAR_FEATURES_README.md
- Add TRANSLATION_IMPROVEMENTS_SUMMARY.md and TRANSLATION_SYSTEM.md
- Update HIGH_IMPACT_FEATURES.md with implementation details

All features are production-ready, fully tested, responsive, and maintain
backward compatibility.
2025-10-07 19:00:07 +02:00
Dries Peeters
69f9f1140d feat(i18n): add translations, locale switcher, and user language preference
- Integrate Flask-Babel and i18n utilities; initialize in app factory
- Add `preferred_language` to `User` with Alembic migration (011_add_user_preferred_language)
- Add `babel.cfg` and `scripts/extract_translations.py`
- Add `translations/` for en, de, fr, it, nl, fi
- Update templates to use `_()` and add language picker in navbar/profile
- Respect locale in routes and context processors; persist user preference
- Update requirements and Docker/Docker entrypoint for Babel/gettext support
- Minor copy and style adjustments across pages

Migration: run `alembic upgrade head`
2025-09-11 23:08:41 +02:00