--- phase: 16-content-localization plan: 01 subsystem: translation tags: [i18n, trade-categories, polish, german, TranslatableModel] depends_on: requires: [11-01, 15-01] provides: [translatable-trade-categories, pl-de-category-translations] affects: [16-02, job-posting, professional-profiles, search] tech-stack: added: [] patterns: [TranslatableModel-behavior, DB-seeder-pattern] key-files: created: - plugins/golem15/quotify/updates/v1.4.0/add_trade_category_translations.php modified: - plugins/golem15/quotify/models/TradeCategory.php - plugins/golem15/quotify/updates/version.yaml decisions: - "Use soft dependency (@) for TranslatableModel behavior" - "36 categories translated (9 main + 27 sub), not 33 as originally estimated" - "DB::table() pattern for seeder to avoid model boot issues" metrics: duration: 3 min completed: 2026-02-02 --- # Phase 16 Plan 01: Trade Category Translations Summary TranslatableModel behavior added to TradeCategory with Polish and German translations seeded for all 36 categories. ## What Was Done ### Task 1: Add TranslatableModel behavior to TradeCategory Added the Golem15.Translate.Behaviors.TranslatableModel behavior to the TradeCategory model with soft dependency prefix (@). Marked `name` and `description` as translatable fields. **Key changes:** - Added `$implement` array with TranslatableModel behavior - Added `$translatable = ['name', 'description']` property ### Task 2: Seed Polish and German translations Created migration v1.4.0/add_trade_category_translations.php that seeds translations for all trade categories. **Categories translated (36 total):** | Main Category | Polish | German | |---------------|--------|--------| | Plumbing | Hydraulika | Sanitaer- und Heizungstechnik | | Electrical | Elektryka | Elektrik | | Painting & Decorating | Malowanie i dekoracja | Malerarbeiten | | Carpentry | Stolarstwo | Tischlerei | | Roofing | Dekarstwo | Dachdeckerei | | Masonry | Murarstwo | Maurerarbeiten | | HVAC | Klimatyzacja i wentylacja | Heizung, Lueftung, Klimatechnik | | Landscaping | Architektura krajobrazu | Garten- und Landschaftsbau | | General Repairs | Naprawy ogolne | Allgemeine Reparaturen | Plus 27 subcategories with appropriate translations. ## Decisions Made 1. **Soft dependency for TranslatableModel**: Using `@` prefix allows TradeCategory to work even if Translate plugin is not installed. 2. **36 categories, not 33**: Actual database has 9 main categories with 3 subcategories each = 36 total (not 33 as estimated in plan). 3. **DB::table() pattern**: Consistent with project decision 11-01, using raw DB queries in seeder to avoid model boot issues during migration. ## Verification Results ```php // Polish translation $translator->setLocale('pl'); $cat = TradeCategory::where('slug', 'plumbing')->first(); $cat->name; // "Hydraulika" // German translation $translator->setLocale('de'); $cat->name; // "Sanitaer- und Heizungstechnik" // English (default) $translator->setLocale('en'); $cat->name; // "Plumbing" ``` ## Deviations from Plan None - plan executed exactly as written. ## Commits | Hash | Message | |------|---------| | b9765b4 | feat(16-01): add TranslatableModel behavior to TradeCategory | | 1d65bed | feat(16-01): seed Polish and German translations for trade categories | | 9984eae | chore(16-01): update quotify submodule for trade category translations | ## Files Changed **Created:** - `plugins/golem15/quotify/updates/v1.4.0/add_trade_category_translations.php` **Modified:** - `plugins/golem15/quotify/models/TradeCategory.php` - `plugins/golem15/quotify/updates/version.yaml` ## Next Phase Readiness Phase 16-01 complete. Ready for 16-02 (Service Area translations) or other content localization tasks. **Prerequisites delivered:** - TradeCategory model is translatable - Polish and German translations seeded - Pattern established for other models needing translation