Autor Zpráva
iiic
Profil
Ahoj… mám php aplikaci, která je snadno přenositelná mezi Win a Linux prostředím.

Rád bych tam používal strftime i pro slovní výpis názvů měsíců, dnů, … ale právě ty rozdílné implementace strftime na těchto systémech mě to dost znepříjemňují.

Mám pocit, že tohle se řešilo už tolikrát a řešilo to už tolik lidí… jen nevím, jestli to někdo i skutečně vyřešil nějakým trošku slušným způsobem

nejlepší co mě zatím napadlo:
<?php
var_dump(strftime('%B')); // March
setlocale(LC_TIME, 'cs_CZ.cp1250', 'czech');
var_dump(iconv('cp1250' , 'UTF-8', strftime('%B'))); // březen
a funguje to na obou platformách, nicméně, vadí mi tam závislost na iconv a vadí mi tam to, že na místech kde je použito strftime('%B') budu muset kód přepisovat na něco jiného (iconv('cp1250' , 'UTF-8', strftime('%B'))) . Nevíte jestli a případně jak se dá některého nebo ideálně obou těchto neduhů zbavit?

Nebo se na strftime raději vůbec nespoléhat a napsat si vlastní funkce?
juriad
Profil
Na Linuxu se nemůžeš spolehnout na to, že bude existovat Locale cs_CZ.cp1250 (já ho nemám - vypíše to anglicky March).
Stejně dobře možné je, že bude dostupný cs_CZ.utf8 (ten mám - vypíše březen).

Asi bych se na to nespoléhal. Nemusí mít žádný český locale.

Nemám možnost ladit na Windows.
iiic
Profil
juriad:
to je docela nepříjemnost.
Z Windowsů co vím, tak jiné kódování než cp1250 nedostanu (kdyby to šlo bylo by to samozřejmě nejsnazší), tak jsem doufal, že ze všech verzí Linuxu půjde dostat taky… pak ještě případně můžu zkusit tam střelit více druhů kódování:
<?php
setlocale(LC_TIME, 'Czech_Czech Republic.cp1250', 'Czech_Czech Republic.CP1250', 'cs_CZ.cp1250', 'cs_CZ.CP1250', 'czech');
nebo ještě zapodmínkovat když linux tak v UTF-8, když Win, tak cp1250 a následně iconv do UTF-8

všechno pořád ale dost nepříjemná řešení :(
Fisir
Profil
Reaguji na iiiceho:
Nejspolehlivější bude vytvořit si vlastní překládací funkci.
iiic
Profil
Je to smutné no, ale asik nic lepšího nezbude :(

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: