Přihlásit se
Kdo dával ve škole v češtině nebo dějepisu pozor ví, že za moderní podobu slov s háčky a čárky může Jan Hus. V době počítačové se to nejdříve programátoři pokoušeli nějak obejít "psanim bez hacku a carek", dnes je ovšem trend přizpůsobit vše tomu, jak to používáme. Jinými slovy: počítače se musejí přizpůsobit češtině, ne čeština počítačům. Máte-li problém s reprezantací českých znaků v Joomla!, čtěte tento článek, třeba vám pomůže.

Jedním z nejstálejších evergreenu v uživatelských fórech jsou dotazy na to, jak rozchodit v Joomla! české znaky. Míst, kde se může něco pokazit, je docela dost. Já se dnes soustředím na to, jak nastavit Joomla! tak, aby zobrazovala češtinu správně, odborně řečeno - abyste měli nastaveno správné kódování.

Pokud si projdete diskuzi zde u nás na serveru zjistíte, že pouhé nahrání češtiny do určitého adresáře v Joomla! instalaci prostě nestačí. Základem úspěchu je zapnutí tzv. locales. Předpokládám, že na vašem hostingovém serveru je vše správně nainstalováno (pokud ne, využijte služeb Google a dohledejte patřičnou tématiku, nejlépe s využitím klíčových slov "czech", "locales "). Máte vše správně nastaveno (zapnuté locales a nainstalovanou češtinu) a teď musíte zapnout použití těchto locales. není to ovšem tak jednoduché, jak by se to mohlo na první pohled zdát.

Musíte vědět, jaké locales jsou na hostingovém serveru  nainstalovány. Vše se řídí tím, jaký operační systém, běží na hostingovém serveru (ne na vašem počítači!). Můžeme to shrnout asi takto:

  • hosting jede na Windows serveru - s největší pravděpodobností se používá kódová stránka WINDOWS-1250
  • hosting jede na Linuxu - s největší pravděpodobností zde mají kódování ISO-8859-2, méně často WINDOWS-1250
  • hosting jede na FreeBSD - patrně zde používají ISO-8859-2
  • hosting jede na MacOS - i zde se patrně používá ISO-8859-2

Tento výčet ještě doplňuje kódování UTF-8, které je nejuniverzálnější a můžeme říci, že od verze Joomla! 1.1 také asi jediné podporované. Seznam ukazuje nejčastěji používané kódování, dotazem na správce zjistíte přesně, jaké kódování se používá.

Pokud disponujete informací  o kódování na hostingovém serveru, můžet už vyplnit pole SITE - GLOBAL CONFIGURATION - LOCALE - COUNTRY LOCALE. Do něj se píše kód, který zajistí použití daného locales.

K čemu je locales dobré? Zajistí nejenom použití názvů českých dnů a měsíců, zapne také třídění (tzn. A B C Č D Ď atd.) a zapne také správný datumový formát ve tvaru 3.3.2006 místo 2006/3/3.

To co do zmiňovaného políčka vyplníte vždy záleží na používaném operačním systému na hostingovém serveru :

ve Windows vyplníte

  • czech (případně slovak) pro kódování WINDOWS-1250
  • czech.utf-8 (slovak.utf-8) pro kódování UTF-8

 

 

v Linuxu Fedora Core 4 nebo RedHat vyplníte

  • cs_CZ (sk_SK) pro výchozí kódování
  • cs_CZ.iso88592 (sk_SK.iso88592) pro kódování ISO 8859-2
  • cs_CZ.utf8 (sk_SK.utf8) pro kódování UTF-8

 

 

v Linuxu Ubuntu, MacOS a FreeBSD

  • cs_CZ (sk_SK) pro výchozí kódování
  • cs_CZ.ISO8859-2 (sk_SK.ISO88592) pro kódování ISO 8859-2
  • cs_CZ.UTF-8 (sk_SK.UTF-8) pro kódování UTF-8

 

 

Pokud jste nenašli váš OS mezi zde vyjmenovanými, zkuste prostě metodou pokusů a omylů použít řetězce zde zadané a jeden se musí chytit. Poznáte to pak tak, že se změní i pojmenování měsíců a dnů a rozhraní bude české a žádné znaky nebudou "zmršené".

Existuje však možnost, že správce vašeho hostingu nemá nainstalované locales, nechce je nainstalovat a vy přesto chcete mít české (nebo slovenské) názvy měsíců. Narazil jsem na zajímavý hack souboru joomla.php (nachází se v adresáři INCLUDES).

Důležité upozornění. než začnete cokoliv dělat, zazálohujte si soubor joomla.php, ať se k němu můžete kdykoliv vrátit! 

Na řádku 3427 začíná funkce mosFormatDate :

 function mosFormatDate( $date, $format="", $offset=NULL ){
    global $mosConfig_offset;
    if ( $format == '' ) {
        // %Y-%m-%d %H:%M:%S
        $format = _DATE_FORMAT_LC;
    }
    if ( is_null($offset) ) {
        $offset = $mosConfig_offset;
    }
    if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2}):([0-9]{2}):([0-9]{2})", $date, $regs ) ) {
        $date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
        $date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
    }
    return $date;
}

Tuto funkci musíte poněkud přeupravit. Předpokládáme, že loclaes v systému jsou anglická a budeme je nahrazovat českými názvy. Kód funkce po úpravě by měl vypadat takto :

function mosFormatDate( $date, $format="", $offset=NULL ){
global $mosConfig_offset;
if ( $format == '' ) {
// %Y-%m-%d %H:%M:%S
$format = _DATE_FORMAT_LC;
}
if ( is_null($offset) ) {
$offset = $mosConfig_offset;
}
if ( $date && ereg( "([0-9]{4})-([0-9]{2})-([0-9]{2})[ ]([0-9]{2}):([0-9]{2}):([0-9]{2})", $date, $regs ) ) {
$date = mktime( $regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1] );
$date = $date > -1 ? strftime( $format, $date + ($offset*60*60) ) : '-';
}

$new = explode(",","$date");
   // New Day
   $Newday = $new[0];

   $new = explode(" ","$date");
   // New Date
   $Newdate = $new[1];
   // New Month
   $Newmonth = $new[2];
   $NewYear = $new[3];

//for days in bengali
   if($Newday == "Monday")
      $Newday = "Pondělí";
   else if($Newday == "Tuesday")
      $Newday = "Úterý";
   else if($Newday == "Wednesday")
      $Newday = "Středa";
   else if($Newday == "Thursday")
      $Newday = "Čtvrtek";
   else if($Newday == "Friday")
      $Newday = "Pátek";
   else if($Newday == "Saturday")
      $Newday = "Sobota";
   else if($Newday == "Sunday")
      $Newday = "Neděle";

   if($Newmonth == "January")
      $Newmonth = "Leden";
   else if($Newmonth == "February")
      $Newmonth = "Únor";
   else if($Newmonth == "March")
      $Newmonth = "Březen";
   else if($Newmonth == "April")
      $Newmonth = "Duben";
   else if($Newmonth == "May")
      $Newmonth = "Květen";
   else if($Newmonth == "June")
      $Newmonth = "Červen";
   else if($Newmonth == "July")
      $Newmonth = "Červenec";
   else if($Newmonth == "August")
      $Newmonth = "Srpen";
   else if($Newmonth == "September")
      $Newmonth = "Září";
   else if($Newmonth == "October")
      $Newmonth = "Říjen";
   else if($Newmonth == "November")
      $Newmonth = "Listopad";
   else if($Newmonth == "December")
      $Newmonth = "Prosinec";

   $date = $Newday.", ".$Newdate.".".$Newmonth." ".$NewYear;

return $date;
}

V proměnné $date můžete nastavit formát data, teď jezvolen "Pondělí, 1.leden 2006". 

Pokud jsou locales v systému jiná než anglická, stačí změnit anglické Monday, Tuesday apod. na ekvivalent v locales (např. při německých Montag, Dienstag jestli si dobře pamatuju německé dny). Tato úprava se zruší vždy, pokud nainstalujete novou verzi Joomla! a je řešením pouze dočasným, protože nenahrazuje české locales. Nebude tak fugovat české řazení a český datumový formát, ten se však dá nastavit ještě v souboru s češtinou.

Tuto úpravu doporučuji provídět až jako poslední řešení, protože české locales jsou nyní již v mnoha systémech podporována a hlavně bez problémů. Úprava spočívá pouze v otrockém nahrazování jednoho textu jiným.

Úpravu jsem nezkoušel v ostrém provozu, ale myslím si, že bude fungovat.