8.2 KiB
8.2 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech-stack, key-files, key-decisions, patterns-established, duration, started, completed
| phase | plan | subsystem | tags | requires | provides | affects | tech-stack | key-files | key-decisions | patterns-established | duration | started | completed | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 18-en-translation | 01 | i18n |
|
|
|
|
|
|
|
~40min | 2026-04-22 | 2026-04-22 |
Phase 18 Plan 01: EN translation (.po/.mo) + QA — Summary
Plugin carei-reservation dostarczony w wersji dwujęzycznej: 158 wpisów przetłumaczonych na EN, skompilowanych do .mo (en_US + en_GB), plus cross-browser Flatpickr jako date picker z locale PL/EN. Milestone v0.7 — 100% complete.
Performance
| Metric | Value |
|---|---|
| Duration | ~40min |
| Tasks | 2 auto + 1 human-verify + 1 scope addition (Flatpickr) |
| Files created | 4 (.po + .mo × 2 locale) |
| Files modified | 3 (bootstrap PHP, JS, CSS) |
| Delegation | 1 agent (tłumaczenie .pot → .po) |
Acceptance Criteria Results
| Criterion | Status | Notes |
|---|---|---|
| AC-1: Plik .po kompletnie przetłumaczony | Pass | 158 msgstr, placeholdery zachowane, HTML OK, zero PL diakrytyków |
| AC-2: Plik .mo poprawny binarnie | Pass | Magic 0x950412de, version 0, N=158, 9455 bytes |
| AC-3: EN UI działa po uploadzie | Pass | User confirmed "approved" po pełnym teście |
Accomplishments
- 158 wpisów PL→EN przez agenta z uzgodnionym słownikiem terminów rental (
doba→day,oddział→location,zł→PLN,pakiet ochronny→protection package, etc.) - Własny PHP
.mocompiler (po2mo.php, ~150 linii) — parsuje .po, sortuje, pakuje binarnie wg gettext spec - en_US + en_GB — dwa locale EN pokryte (Polylang może używać dowolnego)
- Flatpickr scope addition: CDN enqueue + JS init + kompaktowy CSS w kolorach Carei. Modal z
static:true(popup w container, bypass focus-trap). Hero z default renderowaniem. Jednolity UX desktop + mobile (disableMobile:true). - Weryfikacja binarna
.moprzez PHP:Magic: 0x950412de, Version: 0, N: 158
Files Created/Modified
| File | Change | Purpose |
|---|---|---|
languages/carei-reservation-en_US.po |
Created | 158 wpisów PL→EN |
languages/carei-reservation-en_US.mo |
Created | Binarka gettext, 9455 bytes |
languages/carei-reservation-en_GB.po |
Created | Kopia en_US z Language: en_GB\n |
languages/carei-reservation-en_GB.mo |
Created | Skompilowana en_GB |
carei-reservation.php |
Modified | Flatpickr enqueue (CDN + pl locale) + deps |
assets/js/carei-reservation.js |
Modified | initDatePickers() + static:true dla modal + graceful fallback |
assets/css/carei-reservation.css |
Modified | Kompaktowy flatpickr theme w kolorach Carei |
Decisions Made
| Decision | Rationale | Impact |
|---|---|---|
| Własny po2mo.php zamiast msgfmt | msgfmt/Python msgfmt niedostępne w dev env; Loco Translate wymaga wp-admin flow | Deterministic compilation, reusable dla przyszłych locale (fr, de) |
| Flatpickr scope addition | User zgłosił potrzebę tłumaczenia kalendarza natywnego (browser używa OS locale) — flatpickr jedyne sensowne rozwiązanie | +40KB JS (CDN), ale spójne UX + locale-aware |
| CDN jsdelivr | Szybki deploy, brak zarządzania plikami lokalnymi | Dependency na CDN; graceful fallback do native picker |
static:true dla modal |
Default popup w body → konflikt z focus-trap + z-index modala | Picker w containerze inputa — kompatybilne z modalem |
disableMobile:true |
Native mobile (iOS spinner, Android Material) ignoruje strony locale | Jednolity UX PL/EN niezależnie od OS użytkownika |
Deviations from Plan
Summary
| Type | Count | Impact |
|---|---|---|
| Auto-fixed | 2 | Flatpickr popup ukryty w modalu (static:true), native mobile picker (disableMobile:true) |
| Scope additions | 1 | Flatpickr integracja (cross-browser date picker z i18n) — user request podczas apply |
| Deferred | 0 | — |
Scope additions
1. [UX] Flatpickr date picker z i18n
- Found during: Task 3 (human-verify) — user zapytał o tłumaczenie kalendarza
- Problem: Natywny
<input type="datetime-local">używa locale OS przeglądarki, ignoruje WP locale - Fix: Integracja Flatpickr 4.6.13 z CDN — enqueue + init per input + kompaktowy CSS theme
- Files: carei-reservation.php, carei-reservation.js, carei-reservation.css
- Verification: User "jest ok" po kompaktowym themie; PL kalendarz, EN kalendarz, oba na desktop + mobile
Auto-fixed Issues
1. [Modal] Flatpickr popup nie otwierał się w modalu
- Issue: Default append do body + focus-trap z Phase 4 → picker focus tracony przed interakcją
- Fix:
static: truew opts — popup renderowany wewnątrz.carei-form__date-wrap - Verification: User confirmed kalendarz otwiera się w modalu po zmianie
2. [Mobile] Inny kalendarz na mobile vs desktop
- Issue: Flatpickr default
disableMobile: false→ na mobile fallback do native OS picker (iOS spinner / Android Material) - Fix:
disableMobile: true— flatpickr wszędzie, jednolity wygląd + locale - Verification: User confirmed "na obu jest flatpickr"
Issues Encountered
| Issue | Resolution |
|---|---|
| msgfmt niedostępny lokalnie | Własny PHP kompilator (po2mo.php) — reusable |
| Modal calendar nie otwiera | static:true flatpickr option |
| Mobile inny picker | disableMobile:true |
| Hero kalendarz po polsku mimo EN | Dodanie hero inputs do initDatePickers() (wcześniej tylko modal) |
Next Phase Readiness
Milestone v0.7 COMPLETE — plugin carei-reservation pełnoprawnie dwujęzyczny (PL + EN):
- Infrastruktura: textdomain + __() + careiI18n (Phase 16)
- Bilingual dane: pakiety pól _en + mapowanie Softra errors (Phase 17)
- Tłumaczenia: .po/.mo dla en_US + en_GB (Phase 18)
- UX: Flatpickr cross-browser + locale-aware (Phase 18 scope addition)
Out of scope dla kolejnych milestones:
- Tłumaczenie treści stron Elementora (Polylang Automatic Translate Addon)
- Menu, footer, theme stringi (Polylang String Translation)
- Nazwy miast/krajów (dane biznesowe z API Softra)
- Inne locale (fr, de) — dodaje się przez sam
.po/.mobez zmian w kodzie
Blockers: None.
Phase: 18-en-translation, Plan: 01 Completed: 2026-04-22