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"><!DOCTYPE html> </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