Nastavení defaultního data a času v jiném jazyce
- Marek Bartoš
- Nette Blogger | 1280
Stejného chování se dá docílit i pomocí intl, bez globálního nastavení
$formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::FULL, IntlDateFormatter::FULL);
$dt = new DateTime;
echo $formatter->format($dt);
Editoval Marek Bartoš (4. 8. 2021 11:22)
- aha009
- Člen | 50
Zkoušel jsem locale -a
na produkci kde je CentOS 7 a de
tam je.
de_AT
de_AT@euro
de_AT.iso88591
de_AT.iso885915@euro
de_AT.utf8
de_BE
de_BE@euro
de_BE.iso88591
de_BE.iso885915@euro
de_BE.utf8
de_CH
de_CH.iso88591
de_CH.utf8
de_DE
de_DE@euro
de_DE.iso88591
de_DE.iso885915@euro
de_DE.utf8
de_LU
de_LU@euro
de_LU.iso88591
de_LU.iso885915@euro
de_LU.utf8
deutsch
- Michal Kumžák
- Člen | 106
A proč nezkusíš to nastavení co ti tu radil Pavel Kravčík
php:
date.timezone: Europe/Prague
- Marek Bartoš
- Nette Blogger | 1280
Já bych řekl, že Pavel vůbec nemyslel nastavení timezone, to na formátování data rozhodně vliv nemá :) Odkazoval na nastavení php.ini direktiv, takže nejspíš myslel najít direktivu pro tenhle případ. Problém je, že žádná direktiva pro setlocale() neexistuje.
Použít v bootstrapu setlocale(LC_TIME, 'de_DE.UTF8');
by
mělo stačit, pokud se nastavení později někde nepřepisuje nebo není
problém v onom velkém červeném varování v oficiální dokumentaci https://www.php.net/…etlocale.php
Varianta s intl formatterem funguje v každém případě. Ještě lepší možnost však je mít časy v UTC a jakékoli formátování nechat na prohlížeči.
- Michal Kumžák
- Člen | 106
Tak si zkus nastavit v setlocale více těch locales
setlocale(LC_TIME, 'de_DE.utf8', 'de_DE', 'de_DE@euro');
A pak před použitím té datumové funkce si nech vypsat nastavení, například takto
bdump(setlocale(LC_ALL, 0));
- aha009
- Člen | 50
Děkuji, teď aspoň vím, že to funguje. Akorát dostávám pořád EN
názvy.
@MarekBartoš děkuji za upozornění na to varování. To je docela
zajímavé chování.
setlocale(LC_TIME, 'de_DE.utf8', 'de_DE', 'de_DE@euro');
bdump(setlocale(LC_ALL, 0)); // 'de_DE.utf8'
$x = new DateTime();
bdump($x->format('l')); // 'Wednesday'
- aha009
- Člen | 50
Našel jsem v dokumentaci https://www.php.net/…ion.date.php
To format dates in other languages, you should use the setlocale() and strftime() functions instead of date().
Tak proto mi to nefunguje?
- Michal Kumžák
- Člen | 106
Nalezeno na stackoverflow: That's because format does not pay attention to locale. You should use strftime instead.
- aha009
- Člen | 50
Děkuji všem za snahu.
Asi jsem měl hned na začátku zmínit, že jde o vypsání data v latte a
tam je to po nastavení locale velmi jednoduché xD.
{$today|date:'%d.%m.%Y'} = strftime
https://latte.nette.org/cs/filters#…
Ale na druhou stranu jsem se zase dověděl něco navíc. Díky
- h4kuna
- Backer | 740
Jenom bych ti doporučil, aby jsi v šabloně nepoužíval formátování, ale schoval ho za filtry jako je tady v příkladu
- je to čitelnější, co se vlastně ukáže
- jde to lokalizovat
- nestane se, že jeden programátor vypíše
d.m.Y
a druhýj. n. Y
Editoval h4kuna (6. 8. 2021 8:43)