161 lines
5.7 KiB
Markdown
161 lines
5.7 KiB
Markdown
---
|
|
phase: 16-content-localization
|
|
plan: 01
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified:
|
|
- plugins/golem15/quotify/models/TradeCategory.php
|
|
- plugins/golem15/quotify/updates/version.yaml
|
|
- plugins/golem15/quotify/updates/v1.4.0/add_trade_category_translations.php
|
|
autonomous: true
|
|
|
|
must_haves:
|
|
truths:
|
|
- "Trade category names display in user's selected locale"
|
|
- "Trade category descriptions display in user's selected locale"
|
|
- "English remains default when no translation exists"
|
|
artifacts:
|
|
- path: "plugins/golem15/quotify/models/TradeCategory.php"
|
|
provides: "TranslatableModel behavior for category translations"
|
|
contains: "TranslatableModel"
|
|
- path: "plugins/golem15/quotify/updates/v1.4.0/add_trade_category_translations.php"
|
|
provides: "Polish and German translations for all 33 categories"
|
|
key_links:
|
|
- from: "TradeCategory.php"
|
|
to: "Golem15.Translate plugin"
|
|
via: "$implement array"
|
|
pattern: "golem15.translate.Behaviors.TranslatableModel"
|
|
---
|
|
|
|
<objective>
|
|
Make trade categories translatable with Polish and German translations for all 33 categories.
|
|
|
|
Purpose: Trade categories appear throughout the marketplace (job posting, professional profiles, search). Users should see them in their language.
|
|
Output: TradeCategory model with TranslatableModel behavior and seeded translations for PL/DE
|
|
</objective>
|
|
|
|
<execution_context>
|
|
@/home/jin/.claude/get-shit-done/workflows/execute-plan.md
|
|
@/home/jin/.claude/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@.planning/PROJECT.md
|
|
@.planning/ROADMAP.md
|
|
@.planning/STATE.md
|
|
@.planning/phases/16-content-localization/16-CONTEXT.md
|
|
@plugins/golem15/quotify/models/TradeCategory.php
|
|
@plugins/golem15/translate/behaviors/TranslatableModel.php
|
|
@plugins/golem15/quotify/updates/v1.0.1/seed_trade_categories.php
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Task 1: Add TranslatableModel behavior to TradeCategory</name>
|
|
<files>plugins/golem15/quotify/models/TradeCategory.php</files>
|
|
<action>
|
|
Add the TranslatableModel behavior to TradeCategory model:
|
|
|
|
1. Add to $implement array (use @ prefix for soft dependency):
|
|
```php
|
|
public $implement = ['@Golem15.Translate.Behaviors.TranslatableModel'];
|
|
```
|
|
|
|
2. Add $translatable property listing fields to translate:
|
|
```php
|
|
public $translatable = ['name', 'description'];
|
|
```
|
|
|
|
These two additions enable the Translate plugin to store and retrieve translations for category names and descriptions. The @ prefix means it works even if Translate plugin isn't installed.
|
|
</action>
|
|
<verify>Run `php-legacy artisan winter:up` to ensure model loads without error. Check in tinker that TradeCategory::first()->translatable returns ['name', 'description'].</verify>
|
|
<done>TradeCategory model has TranslatableModel behavior with name and description as translatable fields.</done>
|
|
</task>
|
|
|
|
<task type="auto">
|
|
<name>Task 2: Seed Polish and German translations for all trade categories</name>
|
|
<files>
|
|
plugins/golem15/quotify/updates/v1.4.0/add_trade_category_translations.php
|
|
plugins/golem15/quotify/updates/version.yaml
|
|
</files>
|
|
<action>
|
|
Create migration that seeds translations for all 33 trade categories:
|
|
|
|
1. Create directory: `updates/v1.4.0/`
|
|
|
|
2. Create seeder `add_trade_category_translations.php` using DB::table() pattern (avoid model boot issues):
|
|
- Get all existing TradeCategory records
|
|
- For each category, insert into `winter_translate_attributes` table with:
|
|
- locale: 'pl' and 'de'
|
|
- model_id: category ID
|
|
- model_type: 'Golem15\Quotify\Models\TradeCategory'
|
|
- attribute_data: JSON with translated name and description
|
|
|
|
3. Translation content (9 main + 24 sub = 33 categories):
|
|
|
|
**Main categories Polish:**
|
|
- Plumbing = Hydraulika
|
|
- Electrical = Elektryka
|
|
- Carpentry = Stolarstwo
|
|
- Painting = Malowanie
|
|
- Roofing = Dekarstwo
|
|
- HVAC = Klimatyzacja i wentylacja
|
|
- Landscaping = Architektura krajobrazu
|
|
- Masonry = Murarstwo
|
|
- General Construction = Budownictwo ogolne
|
|
|
|
**Main categories German:**
|
|
- Plumbing = Sanitaer- und Heizungstechnik
|
|
- Electrical = Elektrik
|
|
- Carpentry = Tischlerei
|
|
- Painting = Malerarbeiten
|
|
- Roofing = Dachdeckerei
|
|
- HVAC = Heizung, Lueftung, Klimatechnik
|
|
- Landscaping = Garten- und Landschaftsbau
|
|
- Masonry = Maurerarbeiten
|
|
- General Construction = Allgemeiner Hochbau
|
|
|
|
For subcategories, translate each appropriately (e.g., "Pipe Repair" -> "Naprawa rur" / "Rohreparatur").
|
|
|
|
4. Update version.yaml to add:
|
|
```yaml
|
|
- v1.4.0:
|
|
- 'Add trade category translations'
|
|
- v1.4.0/add_trade_category_translations.php
|
|
```
|
|
|
|
Use the existing seed file (v1.0.1/seed_trade_categories.php) as reference for the category structure.
|
|
</action>
|
|
<verify>Run `php-legacy artisan winter:up`. Then in tinker:
|
|
```php
|
|
App::setLocale('pl');
|
|
$cat = Golem15\Quotify\Models\TradeCategory::where('slug', 'plumbing')->first();
|
|
echo $cat->name; // Should output "Hydraulika"
|
|
```
|
|
</verify>
|
|
<done>All 33 trade categories have Polish and German translations seeded in database.</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
1. Trade categories display in Polish when locale is 'pl'
|
|
2. Trade categories display in German when locale is 'de'
|
|
3. Trade categories display in English when locale is 'en' (original data)
|
|
4. Job posting form shows translated category names
|
|
5. Professional profile shows translated categories
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- TradeCategory model implements TranslatableModel behavior
|
|
- All 33 categories have name translations for PL and DE
|
|
- All 33 categories have description translations for PL and DE
|
|
- Switching locale in app shows correct language for categories
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/phases/16-content-localization/16-01-SUMMARY.md`
|
|
</output>
|