Jednoduchý dvojjazyčný web

oznámení dokončení Shootera jsem se zmínil o také o jeho webu, a že mě při jeho tvorbě políbila binární múza a vnukla mi myšlenku, o kterou se dnes s celým širým světem chci podělit.

Web Shootera je jednoduchá stránka vyvedená ve dvou jazykových variacích. Texty jsou uloženy přímo v php souboru, žádná databáze, žádné další soubory, ba i css jsem se rozhodl uložit interně.

První vtip spočívá ve výpisu a zároveň uložení textů. O výpis se stará nová funkce DoubleEcho a proměnná $lang určuje, kterou jazykovou verzi uživatel obdrží. Nicméně, funkce by docela dobře mohla sloužit i v jiných případech, než je tvorba jazykových variant, kupříkladu k rozlišení jednoduché a rozšířené verze webu. Fantazii se meze nekladou (chraň pánbu!).

function DoubleEcho($text_cs, $text_en)
{
  global $lang;

  if($lang == 'cs')
    echo $text_cs;
  else
    echo $text_en;
}

Primitivní viďte. Ale elegantní, řekl bych :).

Další věcí je rozhodnutí, ve kterém jazyku data uživateli podáme. Prioritním faktorem je existence parametru v URL, v případě Shootera se jedná o ?en anebo ?cz na konci adresy. Pokud ani jeden z těchto parametrů v adrese není, potom se program rozhodne podle koncovky textové interpretace IP adresy uživatele :). Jinak řečeno IP adresa 123.123.123.123 mů­že být funkcí GetHostByAddr převedena na řetězec podobný 123.upc-chello.cz. A právě z koncovky se dá usuzovat, zda je uživatel čech, anebo cizinec, a podle toho mu naservírujeme obsah webu.

// Language - URL check
if(isset($_GET['en']))
  $lang = 'en';
elseif (isset($_GET['cz']))
  $lang = 'cs';
// Language - IP check
else {
  $pc = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
  $ext = array_pop(explode('.', $pc));
  if($ext == 'cz' OR $ext == 'sk')
    $lang = 'cs';
  else
    $lang = 'en';
}

Pravděpodobně by jazyk uživatele šel odhadnou i jinými způsoby, ale tento mi přijde docela funkční. Takže tak.


Komentáře (7)

k formuláři

RSS kanál komentářů

    • Komentář číslo: 1
    • *
    • Jméno: Acci
    • Odesláno:
      6.9. 2006 — 20:16

    A není lepší získávat údaje o jazyku uživatele z HTTP hlavičky Accept-Language?

    • Komentář číslo: 2
    • *
    • Jméno: Kahi
    • Odesláno:
      6.9. 2006 — 22:38

    hmmm, o tom jsem ještě neslyšel, poznamenám a pak mrknu. díky.

    • Komentář číslo: 3
    • *
    • Jméno: Jarek
    • Odesláno:
      1.2. 2008 — 10:14

    Nějaký příklad by nebyl? Nějak mi z toho článku nevychází jak to udělat..potřebuju abych viděl, jak se zpracovává ten text, nepochopil jsme to z článku, nejsem žádný programátor, ale jednoduchá stránky zvládnu..

    • Komentář číslo: 4
    • *
    • Jméno: Kahi
    • Odesláno:
      1.2. 2008 — 14:34

    [3] Jarek: Ukázka z webu Shooter href=„http://­shooter.kahi.cz“ rel=„nofollow“>http:/­/shooter.kahi­.cz

    <?php
    
    // Language - URL check
    if(isset($_GET['en']))
      $lang = 'en';
    elseif (isset($_GET['cz']))
      $lang = 'cs';
    // Language - IP check
    else {
      $pc = gethostbyaddr($_SERVER["REMOTE_ADDR"]);
      $ext = array_pop(explode('.', $pc));
      if($ext == 'cz' OR $ext == 'sk')
        $lang = 'cs';
      else
        $lang = 'en';
    }
    
    // Language - Echo function
    function DoubleEcho($text_cs, $text_en)
    {
      global $lang;
    
      if($lang == 'cs')
        echo $text_cs;
      else
        echo $text_en;
    }
    
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
            "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $lang; ?>" lang="<?php echo $lang; ?>">
     <head>
      <meta http-equiv="content-type" content="text/html; charset=utf-8" />
      <meta http-equiv="Content-language" content="<?php echo $lang; ?>" />
       <title>Shooter - <?php DoubleEcho('vesmírná střílečka', 'a space game'); ?></title>
    
    ...
    
      <h2><?php DoubleEcho('Stáhněte si ho...', 'Download it...'); ?></h2>
      <p><?php DoubleEcho('Shooter je freeware - tedy volně ke stažení!', 'Shooter is freeware - so download it for free!'); ?></p>
    
    ...
    • Komentář číslo: 5
    • *
    • Jméno: M.
    • Odesláno:
      4.9. 2008 — 12:29

    diky peknej priklad

    • Komentář číslo: 6
    • *
    • Jméno: RubberDuck
    • Odesláno:
      27.7. 2010 — 20:13

    Detekce na úrovni domény prvního řádu není nejideálnější řešení, ale asi jedno z nejjednodušších.

    • Komentář číslo: 7
    • *
    • Jméno: Tonda
    • Odesláno:
      30.3. 2011 — 13:02

    Přesně to co jsem hledal, díky moc! Mohl bych se ale ještě zeptat, jestli by vás nenapadlo, jak udělat doplněk v podobě tlačítka, které by jazyk na celé stránce přehodilo? Například když se mi načte čeština, tak tím tlačítkem přehodil na angličtinu a naopak? Já se s php ještě tak úplně nekamarádím a moje podivný pokusy o přehazování… no prostě nic moc. Tak se jen chci zeptat, jestli náhodou nemáte po ruce nějaké řešení?
    Předem díky…

Přidat komentář

Nápověda ke psaní komentářů

Zde formátuje Texy!

  • *zvýraznění*
  • **silné zvýraznění**
  • > citace
  • "odkaz":http://kam
  • [4] reakce na komentář
  • zdrojové kódy a více

komentáře

úplně nahoru