Fórum Ubuntu CZ/SK

Ostatní => Ubuntu Server => Téma založeno: cybgate 30 Června 2008, 17:47:51

Název: Locale, PHP, funkce setlocale - HH 8.04 [vyřešeno]
Přispěvatel: cybgate 30 Června 2008, 17:47:51
Třeba bude někdo vědět.
Prosím které balíčky musím nainstalovat na Ubuntu server, aby korektně chodila funkce setlocale(LC_ALL,"cs_CZ") v PHP.
Nějaká locales mám nainstalovaná, dokonce snad i česká, ale v PHP se to nijak neprojeví a místo pondělí mi to vypisuje Monday, datum a čas je neustále v EN formátu.

Kdyby jste někdo náhodou věděl korektní parametry pro setlocale nebo co kde doinstalovat, aby to fungovalo. Kódování mám UTF-8.

Moc díky, zatím to řeším tak podivně přes pole, nahrazování apod. :/

Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Petr Merlin Vaněček 30 Června 2008, 18:58:11
Je potřeba locales zavést i do systému, co vypíše
Kód: [Vybrat]
sudo locale-gen
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: cybgate 01 Července 2008, 09:02:24
Vypsalo to:
Kód: [Vybrat]
Generating locales...
  cs_CZ.UTF-8... up-to-date
  en_US.UTF-8... up-to-date
Generation complete.

Takže jestli to chápu dobře, tak použít to "cs_CZ.UTF-8"?

A lze přidat i jiná kódování?
Třeba Win1250? Asi ne co? :)
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Pavel Půlpán 01 Července 2008, 09:35:17
Jde. Přesněji je potřeba locales přidat do souboru /etc/locale.gen. Po úpravě si je musíš znovu vygenerovat pomocí locale-gen. ;)
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: cybgate 01 Července 2008, 10:11:44
Ten soubor tam neexistuje, i po vytvoření to stále hlásí původní dvě Locales.
Konfigurace bude jinde. :/

Vytvořil jsem locale-gen:
Kód: [Vybrat]
cs_CZ.UTF-8 UTF-8
cs_CZ ISO-8859-2

en_US.UTF-8 UTF-8
en_US ISO-8859-1

Ale i tak alespoň UTF-8 funguje, takže se s tím už dá něco dělat.

Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Pavel Půlpán 01 Července 2008, 11:02:36
Soubor má být /etc/locale.gen, nikoliv /etc/locale-gen!
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: cybgate 01 Července 2008, 11:05:49
Samozřejmě to byl jen překlep. Opravdu tam nic takového není. Je to divný.
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Pavel Půlpán 01 Července 2008, 11:13:34
A co přesně vyhodil locale-gen? Nezdá se mi, že by zrovna toto bylo v Ubuntu jinak než v Debianu.
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: cybgate 01 Července 2008, 11:36:09
Vyhodí to samý co jsem posílal nahoře, jakoby ten /etc/locale.gen soubor vůbec neviděl a divný na tom je, že tam původně vůbec nebyl.
Práva jsou tam root/root - 100644.

Kód: [Vybrat]
root@s-vya-ubuntu:/etc# locale-gen
Generating locales...
  cs_CZ.UTF-8... up-to-date
  en_US.UTF-8... up-to-date
Generation complete.
root@s-vya-ubuntu:/etc#
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Pavel Půlpán 01 Července 2008, 11:46:08
No tak ještě mrkni jestli náhodou není někde jinde, o čemž pochybuju:
Kód: [Vybrat]
find /etc -name "locale.gen" -print
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: cybgate 01 Července 2008, 11:52:12
Kód: [Vybrat]
root@s-vya-ubuntu:/etc# find /etc -name "locale.gen" -print
/etc/locale.gen
root@s-vya-ubuntu:/etc#

Je to asi zakletý... :)

Kód: [Vybrat]
root@s-vya-ubuntu:/etc# find / -name "locale.gen" -print
/etc/locale.gen
root@s-vya-ubuntu:/etc#
Název: Re: Locale, PHP, funkce setlocale
Přispěvatel: Petr Merlin Vaněček 01 Července 2008, 15:53:53
Na ubuntu se to dělá malinko jinak :)
Vypište si seznam všech dostupných locales na vašem pc pomocí:
Kód: [Vybrat]
cat /usr/share/i18n/SUPPORTED

A vyberte si přesně ten, který chcete, do systému ho pak přidáte pomocí locale-gen tj. například pro přidání cs_CZ ISO-8859-2
uděláte:

Kód: [Vybrat]
sudo locale-gen "cs_CZ ISO-8859-2"

[edit]
Tak ne :) Na 8.04 už je to asi zase jinak :(
[/edit]

Upravte soubor /var/lib/locales/supported.d/local a pak spusťte sudo locale-gen
Název: Re: Locale, PHP, funkce setlocale - HH 8.04 [VYŘEŠENO]
Přispěvatel: cybgate 01 Července 2008, 16:41:29
Upravte soubor /var/lib/locales/supported.d/local a pak spusťte sudo locale-gen

Díky tohle zabralo, akorát v supported není WIN1250, ale to jsem tak nějak očekával.
Moc díky, tímto je záhada s locale vyřešena a funguje mi i ISO-8859-2. :)

Edit:
Tak nakonec snad i to 1250 - CP1250.
Výsledek - local:
Kód: [Vybrat]
cs_CZ.UTF-8 UTF-8
cs_CZ.CP1250 CP1250
cs_CZ ISO-8859-2
en_US.UTF-8 UTF-8

a

Kód: [Vybrat]
root@s-vya-ubuntu:/var/lib/locales/supported.d# locale-gen
Generating locales...
  cs_CZ.CP1250... done
  cs_CZ.ISO-8859-2... up-to-date
  cs_CZ.UTF-8... up-to-date
  en_US.UTF-8... up-to-date
Generation complete.