Nastavení defaultního data a času v jiném jazyce

aha009
Člen | 50
+
0
-

Ahoj,
potřeboval bych v Nette zobrazovat datum v německé jazyce.
Zkoušel jsem v bootstrap.php či basepresenteru

setlocale(LC_TIME, 'de_DE.UTF8');

nebo

"setlocale(LC_ALL, 'de_DE.UTF-8');"

ale ke změně nedošlo. Jak by to šlo nastavit?

Děkuji

Marek Bartoš
Nette Blogger | 1280
+
0
-

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
+
0
-

@PavelKravčík hledal jsem v dokumentaci, ale moc mi to nenapovědělo. date.timezone: Europe/Berlin mám nastaveno v bootstrap, ale nic se nezměnilo.

h4kuna
Backer | 740
+
0
-

Otestuj to na linuxu (předpokládám, že to je tvůj OS pro produkci).
A pak myslím, že je potřeba mít naistalovalný locale balíček de_DE na mašině a nebo locales-all

locale de_DE musí být uvedený ve výpisu locale -a

Editoval h4kuna (4. 8. 2021 12:58)

aha009
Člen | 50
+
0
-

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
+
0
-

A proč nezkusíš to nastavení co ti tu radil Pavel Kravčík

php:
	date.timezone: Europe/Prague

Seznam timezone pro Evropu

aha009
Člen | 50
+
0
-

To jsem zkoušel také a také beze změny.

Nette\Utils\DateTime
date: '2021-08-04 14:34:04.682516'
timezone_type: 3
timezone: 'Europe/Berlin'

Dešní den středu to vrací jako Wed místo Mit

Editoval aha009 (4. 8. 2021 14:38)

Marek Bartoš
Nette Blogger | 1280
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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?

MajklNajt
Člen | 502
+
0
-

Nebolo by jednoduchšie aj čistejšie spraviť si preklad pomocou translatora? Alebo úplne primitívne vyrobiť si pole s prekladom mesiacov a dní?

aha009
Člen | 50
+
0
-

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
+
+2
-

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)