Files
carei.pagedev.pl/.paul/phases/18-en-translation/18-01-SUMMARY.md
2026-04-22 22:00:50 +02:00

8.2 KiB
Raw Blame History

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
gettext
po
mo
translation
flatpickr
bilingual
phase provides
16-i18n-plugin-refactor .pot (157 msgid) + textdomain carei-reservation
phase provides
17-bilingual-packages-and-softra-errors bilingual pakiety + mapowanie Softra przez __()
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
added patterns
Flatpickr 4.6.13 (CDN jsdelivr, enqueued z dependencies)
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
created modified
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
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
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
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
~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 .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