update
This commit is contained in:
168
.paul/phases/18-en-translation/18-01-SUMMARY.md
Normal file
168
.paul/phases/18-en-translation/18-01-SUMMARY.md
Normal file
@@ -0,0 +1,168 @@
|
||||
---
|
||||
phase: 18-en-translation
|
||||
plan: 01
|
||||
subsystem: i18n
|
||||
tags: [gettext, po, mo, translation, flatpickr, bilingual]
|
||||
|
||||
requires:
|
||||
- phase: 16-i18n-plugin-refactor
|
||||
provides: .pot (157 msgid) + textdomain carei-reservation
|
||||
- phase: 17-bilingual-packages-and-softra-errors
|
||||
provides: bilingual pakiety + mapowanie Softra przez __()
|
||||
|
||||
provides:
|
||||
- carei-reservation-en_US.po + .mo (158 wpisów przetłumaczonych)
|
||||
- carei-reservation-en_GB.po + .mo (kopia en_US)
|
||||
- PHP mini-kompilator po2mo.php (bez potrzeby msgfmt)
|
||||
- Flatpickr jako cross-browser date picker z PL/EN locale (scope addition)
|
||||
- Kompaktowy CSS theme dla flatpickr w kolorach Carei
|
||||
|
||||
affects: []
|
||||
|
||||
tech-stack:
|
||||
added:
|
||||
- Flatpickr 4.6.13 (CDN jsdelivr, enqueued z dependencies)
|
||||
patterns:
|
||||
- "MO compilation: własny parser+packer PHP bez msgfmt/Python"
|
||||
- "Flatpickr static:true dla modala (popup w container) + default dla hero"
|
||||
- "disableMobile:true dla spójności UX PL/EN na wszystkich urządzeniach"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- wp-content/plugins/carei-reservation/languages/carei-reservation-en_US.po
|
||||
- wp-content/plugins/carei-reservation/languages/carei-reservation-en_US.mo
|
||||
- wp-content/plugins/carei-reservation/languages/carei-reservation-en_GB.po
|
||||
- wp-content/plugins/carei-reservation/languages/carei-reservation-en_GB.mo
|
||||
modified:
|
||||
- wp-content/plugins/carei-reservation/carei-reservation.php
|
||||
- wp-content/plugins/carei-reservation/assets/js/carei-reservation.js
|
||||
- wp-content/plugins/carei-reservation/assets/css/carei-reservation.css
|
||||
|
||||
key-decisions:
|
||||
- "Tłumaczenie przez agenta z pre-zdefiniowanym słownikiem terminów branżowych (~50 mapowań PL→EN car rental)"
|
||||
- "Własny kompilator PHP zamiast msgfmt/Loco — deterministyczny, niezależny od środowiska"
|
||||
- "Flatpickr z CDN jsdelivr — brak lokalnych plików, szybki deploy; fallback do native picker jeśli CDN padnie"
|
||||
- "static:true dla modala — rozwiązuje konflikt focus-trap + z-index"
|
||||
- "disableMobile:true — jednolity UX zamiast native iOS spinner / Android Material"
|
||||
- "en_GB = kopia en_US — brak realnej potrzeby różnicowania UK/US na tym etapie"
|
||||
|
||||
patterns-established:
|
||||
- "Własny po2mo compiler w PHP (stored w ~/temp) — reusable dla przyszłych tłumaczeń"
|
||||
- "CSS override per-klasa flatpickr (compact height/width/spacing) w kolorach Carei #2F2482"
|
||||
|
||||
duration: ~40min
|
||||
started: 2026-04-22
|
||||
completed: 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 `.mo` compiler** (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 `.mo`** przez 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: true` w 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/.mo` bez zmian w kodzie
|
||||
|
||||
**Blockers:** None.
|
||||
|
||||
---
|
||||
*Phase: 18-en-translation, Plan: 01*
|
||||
*Completed: 2026-04-22*
|
||||
Reference in New Issue
Block a user