[PHP] Datum po v lokalizovanom jazyku

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod inetMark 20. 7. 2008 00:39

Chcel by som v PHP zobrazit datum, ulozeny v MySQL databaze z fieldu typu DATE.
Skusal som to naslodovne, avsak stale mi to vrati po anglicky.
Neviem ako to vyriesit, napada ma jedine vybrat z databazy ciselnu podobu a vo vlastnej funkcii to prepisat.
Kód: Vybrat vše
setlocale(LC_TIME, 'slo'); //skusal som aj svk, slo, sk {ako polo pisane aj v ISO 639}
echo date("j. F,  Y", strtotime($row["date"]));
echo strftime("%B", strtotime($row["date"]));
Každý program je jeden veľký IF.
inetMark
Junior
Uživatelský avatar

Odeslat příspěvekod illi 20. 7. 2008 01:36

Já jseme pro čas používal tuto funkci
Kód: Vybrat vše
function datum($cas)
  {
  $dny["Mon"] = "Pondělí";
  $dny["Tue"] = "Úterý";
  $dny["Wed"] = "Středa";
  $dny["Thu"] = "Čtvrtek"; 
  $dny["Fri"] = "Pátek"; 
  $dny["Sat"] = "Sobota";
  $dny["Sun"] = "Neděle";
  $mesice = array(1=>"ledna", "února", "března",
"dubna", "května", "června",
"července", "srpna", "září",
"října", "listopadu", "prosince");
$vcera=strtotime("-1 day");
if (date("zY")==date("zY", $cas))
  {
  $dnes="Dnes ".Date("H:i:s", $cas); 
  }
elseif (date("zY", $vcera)==date("zY", $cas))
  {
  $dnes="Včera ".date("H:i:s", $cas);
  }
else
  {
$dnes = $dny[Date("D", $cas)] . Date(" d. ", $cas) . 
$mesice[(int)Date("m", $cas)] . Date(" Y - H:i:s", $cas);
}
return $dnes;
}


takže ty by jsi podle mě mohl použít například

Kód: Vybrat vše
echo datum(strtotime($row['data']));

Teda samozřejmě si přepiš ty názvy měsíců a dnů
illi
Kolemjdoucí

Odeslat příspěvekod wojta 21. 7. 2008 07:41

Locales vypíšeš z konzole příkazem
Kód: Vybrat vše
locale -a

Já mám všechna locales v adresáři /usr/share/i18n/locales.
Jinak správné by mělo být sk_SK, resp. sk_SK.UTF-8.
C:\>ver
MS-DOS Version 5.00
wojta
Pokročilý
Uživatelský avatar

Odeslat příspěvekod inetMark 21. 7. 2008 14:43

Spravil som si vlastnu funkciu ako som pisal a sice funguje, radsej by som to vyriesil cez tie locale files (sk_SK ani sk_SK.UTF-8 zial nejde). Zial nevenujem sa tejto problematike a som laik.
Web mam hostovany na inom serveri (nie mojom). Ako je mozne sa pripojit tam a pouzit prikaz "locale -a" ? Pripadne tam musim tieto lokalizovane subory nahrat do mojho adresara, kde mam web?
Dakujem.
Každý program je jeden veľký IF.
inetMark
Junior
Uživatelský avatar

Odeslat příspěvekod wojta 21. 7. 2008 20:14

Bohužel si nejsem jistý, jestli to na tom serveru mají vygenerované pro více locales.
Kód: Vybrat vše
locale -a
asi nepůjde použít, pokud nemáš SSH přístup. Možná by to šlo zavolat přes funkci exec().
C:\>ver
MS-DOS Version 5.00
wojta
Pokročilý
Uživatelský avatar

Odeslat příspěvekod Z@chi 24. 7. 2008 16:58

Ahoj, resil jsme tohle pro cestinu:
http://www.zaachi.com/cs/items/php-slov ... -data.html
pro slovenstinu to bude obdobne.
Z@chi
Junior
Uživatelský avatar

Odeslat příspěvekod Posledny 24. 7. 2008 18:27

Zdravím.

Ak to nejde v PHP, treba použiť priamo funkcie MySQL. Ako píšeš, potrebuješ zobraziť dátum z
databázy. MySQL to pekne zvládne aj sama (bohužiaľ okrem skloňovania ;-] ):

Pred dotazom si príkazom SET zmeníš časové 'locale' samotnej databázy (platí to iba pre ihneď nasledujúci dotaz - nie globálne). Následne spravíš potrebný dotaz, ktorým vyberieš dátum sformátovaný s funkciou DATE_FORMAT(date,format). A je to hotové. Základom je teda poznať trocha funkcie MySQL, ktoré nájdeš prehľadne na stránkach http://dev.mysql.com/doc/refman/5.0/en/functions.html.

Dosť teórie - tu je malý príklad:

Kód: Vybrat vše
<?php

// Toto musi byt preistotu na samom zaciatku scriptu (pred vsetkym ostatnym!!!)
setlocale(LC_ALL, "sk_SK");
session_start();

// Pripojime sa do MySQL a vyberieme databazu
$spojenie = mysql_connect("localhost", "uzivatel", "heslo") or die('Chyba spojenia');
mysql_select_db("databaza") or die('Chyba vyberu databazy');

// Pripravime si dotaz (v reale pouzijes namiesto datumu nazov prislusneho pola)
$dotaz = "SELECT DATE_FORMAT('2008-07-24', '%W, %d. %M %Y') AS datum";

// Vykoname postupnost dotazov !!! toto je to prave orechove !!!
mysql_query("SET lc_time_names = 'sk_SK'");
$vysledok = mysql_query($dotaz, $spojenie);

// Nacitame riadok a hodnotu datumu vlozime do premennej
$riadok = mysql_fetch_row($vysledok);
$datum = $riadok[0];

// Uvolnime vysledok
mysql_free_result($vysledok);

// Vypiseme
echo "Dnes je " . $datum;

// Toto vypíše: Dnes je Štvrtok, 24. júl 2008

?>


A je to...
Posledny
Kolemjdoucí


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků