Als je geen gebruik wilt maken van de extra gettext-package, dan kun je ook je eigen language-systeempje maken natuurlijk; bepaal in een sessie-variabele welke taal momenteel de voertaal is op je pagina, schrijf een functie die variabelen - afhankelijk van de taal - ophaalt uit je database (waar je waarden taal-gerelateerd in opgeslagen staan). Haal de data vervolgens uit je database op met behulp van die functie op de juiste plaatsen en krijgt iets als:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| /*
# database table named `waarden`
CREATE TABLE `waarden` (
`id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 255 ) NOT NULL ,
`waarde` LONGTEXT NOT NULL ,
`taal` VARCHAR( 3 ) NOT NULL ,
PRIMARY KEY ( `id` )
);*/
// init
$language = 'nl'; // (laten bepalen door sessie)
// select textpart function
function x($name) {
global $language;
$q = "
SELECT waarde
FROM waarden
WHERE naam = '".$name."'
AND taal = '".$language."'
LIMIT 1
";
$r = mysql_query($q) or die(mysql_error());
mysql_num_rows($r) == 1 ?
$result = mysql_result($r,0,'waarde') :
$result = 'Error; data for `'.$name.'` not found.';
return $result;
}
?>
<html><!-- etc. -->
<h3><?=x('titel')?></h3>
<p><?=x('inleiding')?></p> |
Als je de functie vaker dan x-maal gebruikt op je pagina, kan het in extreme gevallen wat overload genereren. In dat geval zul je een class- of andere functies moeten schrijven die er voor zorgen dat er uiteindelijk maar één query wordt uitgevoerd en zul je de data misschien op een iets andere manier in je html tevoorschijn moeten toveren, maar het concept lijkt me duidelijk.
Tevens kun je, als je e.e.a. uitbreidt, er net als bijvoorbeeld op de MS pagina's voor zorgen dat er een melding komt als de tekst niet in de huidige voertaal beschikbaar is (lees: niet gevonden is in de database) en daar een alternatieve tekst of verwijzing voor in de plaast tonen.
De methode die ik hierboven aanvoer verkies ik persoonlijk boven een replacesysteem, alhoewel die - zeker in combinatie met caching - een goed alternatief kunnen zijn. Bij een replacesysteem krijg ik het gevoel dat zich het beste laat omschrijven als `waarom data neerzetten op de plaats waar je je uiteindelijke data wilt hebben en vervolgens je hele document (wat erg groot kan zijn maar niet in verband moet staan met je content, vindt ik) laten doorzoeken om de eerstgenoemde data te laten vervangen door iets anders?`. Kortom; je moet altijd wat code neerzetten op de plaats waar je je uiteindelijke data wilt hebben staan, dus waarom niet direct (al dan niet met behulp van een functie, zoals ik aandraag) het goede daar neerzetten?
[
Voor 39% gewijzigd door
Verwijderd op 10-02-2006 12:32
]