PHP: Šablonovací systém XSLT(3) - vícejazyčné šablony

PHP Práce se soubory PHP: Šablonovací systém XSLT(3) - vícejazyčné šablony

V předchozím dílu jsem napsal zjednodušenou šablonu. Možná je načase vytáhnout zbraně silnějšího kalibru. Co když chceme vytvořit vícejazyčný web? Možností je několik. Například můžeme všechny texty uložit do databáze, před vlastní prezentací si je vytáhnout a použít v šabloně. Myšlenka je to lákavá a zřejmě i velmi často používána.

Uvedené řešení však má několik nevýhod. Například zbytečnou zátěž databáze, při hromadném výběru celého slovníku. Co kdybychom měli každý slovník v jiném souboru? Stejně ho vždy musíme přečíst celý. Jako obvykle však musíme vybrat vhodný formát. Jenže: Když už výstupní šablonu mám v XSLT, co kdybych udělal v XSLT i slovník?

Ano, tohle řešení funguje. Vhodný postup jsem našel na jednom webu, i když nebyl zcela ideální. Proto jsem ho přizpůsobil svým potřebám.

Nejprve tedy výstupní šablona, kterou 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 vidět, že zde používám proměnné $lang, $lang.webname a $lang.text. Tyto texty budu chtít napsat v požadovaném jazyku. Vytvořím tedy další soubory.

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>

Pro každý jazyk si napíši další slovník s uvedenou strukturou. Výstupní šablona stále zůstává jen jedna. Všimněte si, že jsem v původní šabloně definoval hodnotu proměnné $lang.webname. Pokud bych ji zapomněl definovat ve slovníku, bude použita jako defaultní hodnota.

A jak dál? Už skoro nic. Jen je potřebné zavolat ten správný slovník, viz předchozí díl

<?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 řešení má jednu nevýhodu: Pro každou šablonu je nutná sada jazykových šablon. Ovšem většinou si vystačíme s jedinou šablonou na celý portál a proto je tato nevýhoda nepodstatná.

A rychlost? Zpracování šablony se slovníkem, který měl 1000 slov trvalo na mém Celeronu cca 100 ms. Většinou si však vystačíme s desetinovým i kratším, proto i výstupní časy budou kratší než 10 ms. Databázi by to trvalo déle.

K čemu se to hodí? Hlavně k lokalizaci menu, hlavního nadpisu, patičky, copyrightu a dalších pevných textů, které se generují na většině podstránek. Nehodí se na dynamická menu, tedy menu rozšiřovaná do databáze. Takové menu je lepší řešit přímo v databázi.


 

  Aktivity (1)

Článek pro vás napsal Kit
Avatar
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...

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!