Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

PHP: šablónovacích systém XSLT (3) - viacjazyčné šablóny

V predchádzajúcej lekcii, Práca s archívmi ZIP v PHP , sme sa zoznámili s prácou s archívmi vo formáte ZIP v PHP. Ukázali sme si triedu ZipArchive a jej najdôležitejšie metódy.

V predchádzajúcom dieli som napísal zjednodušenú šablónu. Možno je načase vytiahnuť zbrane silnejšieho kalibru. Čo keď chceme vytvoriť viacjazyčný web? Možností je niekoľko. Napríklad môžeme všetky texty uložiť do databázy, pred vlastnou prezentáciou si ich vytiahnuť a použiť v šablóne. Myšlienka je to lákavá a zrejme aj veľmi často používaná.

Uvedené riešenie však má niekoľko nevýhod. Napríklad zbytočnú záťaž databázy, pri hromadnom výbere celého slovníka. Čo keby sme mali každý slovník v inom súbore? Rovnako ho vždy musíme prečítať celý. Ako obvykle však musíme vybrať vhodný formát. Lenže: Keď už výstupné šablónu mám v XSLT, čo keby som urobil v XSLT aj slovník?

Áno, toto riešenie funguje. Vhodný postup som našiel na jednom webe, aj keď nebol úplne ideálny. Preto som ho prispôsobil svojim potrebám.

Najprv teda výstupné šablóna, ktorú uložím do template.xsl:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
<xsl:output method="html" cdata-section-elements="a"/>

<xsl:variable name="lang.webname">Český název webu</xsl:variable>

<xsl:template match="/stranka">
<xsl:text disable-output-escaping="yes">&lt;!DOCTYPE html&gt;
</xsl:text>
<html lang="{$lang}">
<head>
<xsl:apply-templates select="title"/>
<link rel="StyleSheet" href="/style.css" type="text/css" />
</head>
<body>
<h1><xsl:value-of select="$lang.webname"/></h1>
<p><xsl:value-of select="$lang.text"/></p>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

Je vidieť, že tu používam premenné $lang, $lang.webname a $lang.text. Tieto texty budem chcieť napísať v požadovanom jazyku. Vytvorím teda ďalšie súbory.

lang-cs.xsl:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
<xsl:import href="template.xsl"/>
<xsl:output method="html" encoding="utf-8" indent="yes"/>

<xsl:variable name="lang">cs</xsl:variable>
<xsl:variable name="lang.webname">Český název webu</xsl:variable>
<xsl:variable name="lang.text">Český pevný text</xsl:variable>
</xsl:stylesheet>

lang-en.xsl:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version='1.0'>
<xsl:import href="template.xsl"/>
<xsl:output method="html" encoding="utf-8" indent="yes"/>

<xsl:variable name="lang">en</xsl:variable>
<xsl:variable name="lang.webname">English webname</xsl:variable>
<xsl:variable name="lang.text">English fixed text</xsl:variable>
</xsl:stylesheet>

Pre každý jazyk si napíšem ďalšiu slovník s uvedenou štruktúrou. Výstupné šablóna stále zostáva len jedna. Všimnite si, že som v pôvodnej šablóne definoval hodnotu premennej $lang.webname. Ak by som ju zabudol definovať v slovníku, bude použitá ako defaultná hodnota.

A ako ďalej? Už skoro nič. Len je potrebné zavolať ten správny slovník, viď predchádzajúci diel

<?php
$templ = new DOMDocument();
$templ->load('lang-cs.xsl');

$xsl = new XSLTProcessor();
$xsl->importStyleSheet($templ);

$doc = new DOMDocument();
$doc->load('data.xml');
echo $xsl->transformToXML($doc);

Toto riešenie má jednu nevýhodu: Pre každú šablónu je nutná sada jazykových šablón. Ovšem väčšinou si vystačíme s jedinou šablónou na celý portál a preto je táto nevýhoda nepodstatná.

A rýchlosť? Spracovanie šablóny so slovníkom, ktorý mal 1000 slov trvalo na mojom Celeronu cca 100 ms. Väčšinou si však vystačíme s desetinovým aj kratším, preto aj výstupný časy budú kratšie ako 10 ms. Databázu by to trvalo dlhšie.

K čomu sa to hodí? Hlavne k lokalizácii menu, hlavného nadpisu, pätičky, copyrightu a ďalších pevných textov, ktoré sa generujú na väčšine podstránok. Nehodí sa na dynamická menu, teda menu šírená do databázy. Takéto menu je lepšie riešiť priamo v databáze.

V ďalšej lekcii, Tvorba a manipulácia vlastného obrázka v PHP , sa naučíme, ako si vytvoriť vlastný obrázok priamo v PHP.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 2x (5.28 kB)
Aplikácia je vrátane zdrojových kódov v jazyku PHP

 

Predchádzajúci článok
Práca s archívmi ZIP v PHP
Všetky články v sekcii
Práca so súbormi v PHP
Preskočiť článok
(neodporúčame)
Tvorba a manipulácia vlastného obrázka v PHP
Článok pre vás napísal Kit
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Jsem spokojeným uživatelem operačních systémů založených na linuxovém jádře. Zejména openSUSE a Ubuntu. Pro psaní veškerých textů a programů používám vynikající textový editor Vim. Aplikace se snažím psát vždy v tom nejvhodnějším programovacím jazyk...
Aktivity