Motivace k použití lokalizace
Při programování informačních systémů, blogů nebo webových aplikací se setkáme s nutností zobrazovat datumy. Může se například jednat o datum vytvoření příspěvku, úpravu uživatelského účtu, poslední přihlášení uživatele nebo u e-shopů datm vyřízení objednávky. Pokud se rozhodneme nezobrazovat datum pouze jako číselný údaj, může se nám stát, že názvy měsíců nebo dní zobrazíme typicky v angličtině.
Lokalizaci je možné udělat buď v konfiguračním souboru php.ini nebo případně rovnou v kódu, což má tu výhodu, že k „překladu“ dojde až ve chvíli spuštění kódu. Toto použití si dokážu představit např. ve vícejazyčné aplikaci, kde se na základě přihlášeného uživatele a jeho nastavení bude zobrazovat datum v příslušném jazyku.
Instalace PHP knihovny intl
Předpokladem tohoto řešení je, že máte nainstalovanou knihovnu intl (international).
sudo apt install php8.2-intl
nebo bez verze PHP
sudo apt install php-intl
Případně si můžete nainstalovat i další knihovny, které jsou v návodu PHP dev stack.
Způsob #1
Ukázka kódu s českým jazykem
Následující kód nám zobrazí aktuální den v českém jazyce.
// EEEE = day of week in full name
$formatter = IntlDateFormatter::create(locale: 'cs_CZ', pattern: 'EEEE');
$cal = new DateTime();
echo $formatter->format($cal);
Locale
Pro nastavení lokalizace se používá POSIXový standard, v případě češtiny tedy cs_CZ nebo en_US pro americkou angličtinu.
Pattern
Pokud budete chtít zobrazit něco jiného než den, tak se využívá mezinárodního standardu ISO 8601. Výčet všech možných symbolů pro argument pattern.
Procvičování
- (jednoduché) Definujte pole stringů $locales a zobrazte ve foreach cyklu datumy pro vybrané lokalizace.
- (složitější) Vytvořte rozbalovací seznam s možnými „locales“ a po odeslání formuláře ukládejte do $_SESSION vybranou locale a zobrazte datum v záhlaví napříč celým webem – např. index.php, contact.php, abous-us.php settings.php .
- Vyzkoušejte knihovnu intl i pro zobrazování cenovek – např. 5999 Kč pomocí NumberFormatter