Meerdere talen ondersteunen met XML en ASP
30 maart 2001
Ik heb al eerder een artikel geschreven dat ging over het gebruik van XML in PHP
om met meerdere talen te kunnen werken. Dit kan niet alleen in PHP, maar ook
in andere server-side languages, zoals ASP. In dit artikel zal ik het hebben
over de connectie tussen XML en ASP. Hiervoor heb ik een zeer nuttig voorbeeld
genomen. Voorkennis die je nodig hebt is ASP en XML.
Bij een normale web site heb je natuurlijke verschillende versies, een in het
Nederlands, een in het Engels, in het Spaans etc. Daar heb je vaak tien pagina's
met allemaal dezelfde inhoud, in een andere taal. Wat we hier gaan doen is een
standaard-pagina maken (een sjabloon) met ASP. In XML maken we een woordenboek
(een soort database). ASP roept XML op en je hebt verschillende talen op een site.
Het XML-woordenboek
We maken geen uitgebreid woordenboek, aangezien het gaat om het snappen.
We hebben in dit geval alleen een titel en een inhoud in het nederlands,
het engels en het spaans:
<?xml version="1.0" encoding="UTF-8"?>
<talen>
<taal xml:lang="nl" engname="Dutch" langname="Nederlands" charset="Windows-1252">
<titel>Welkom op mijn homepage</titel>
<inhoud>Dit is een homepage, waar ASP en XML gebruikt worden.</inhoud>
<lang>nl</lang>
<langname>Dutch</langname>
</taal>
<taal xml:lang="en" engname="English" langname="English" charset="Windows-1252">
<titel>Welcome on my homepage</titel>
<inhoud>This is a homepage, where ASP and XML is being used.</inhoud>
<lang>en</lang>
<langname>English</langname>
</taal>
<taal xml:lang="sp" engname="Spanish" langname="Espanol" charset="iso-8859-1">
<titel>Recepcion en mi homepage</titel>
<inhoud>Esto es un homepage, donde se esta utilizando el ASP y XML.</inhoud>
<lang>sp</lang>
<langname>Spanish</langname>
</taal>
</talen>
Dit spreekt voor zich: er wordt telkens uitgelegd om welke taal het gaat, de
engelse naam en de locale naam ervoor wordt gegeven en de charset wordt vermeld.
Daarbij worden dan de titel, de inhoud en nog eens de taal vermeld. In dit artikel
is dit bestand opgeslagen als "taal.xml".
De ASP-engine
Nu is het de taak van ASP om dit tot een web site te brengen die drie talen kan
aanleveren. Dit doen we heel simpel. Contact maken met de XML-file, de data eruit
halen en de web site bouwen. Hier komt het (vrij lange) bestand. De uitleg is gegeven
in het bestand zelf als commentaar, zodat je het gewoon kan overkopiéren.
In dit artikel is dit bestand opgeslagen als "homepage.asp".
<%@ Language=VBScript %>
<%
Option Explicit
Dim scriptname, xmlfilename, doc, temp
Dim node, selectednode, optionnodelist, errobj
Dim chosenlang, selectednodes, i
If Request.Form("chosenlang") <> "" Then
Session("chosenlang") = Request.Form("chosenlang")
Else
Session("chosenlang") = "nl"
End if
xmlfilename = "taal.xml"
Set doc = Server.CreateObject("MSXML2.DOMDocument")
doc.async = False
If Not Doc.Load(server.MapPath(xmlfilename)) Then
Response.Write "Heeft de XML-file niet kunnen laden.<br>"
Response.End
End If
doc.setProperty "SelectionLanguage", "XPath"
Set selectednode = doc.selectSingleNode("/talen/taal[@xml:lang='" & Session("chosenlang") & "']")
Set selectednodes = doc.documentElement.selectNodes("/talen/taal")
Function getstring(instring)
temp = selectednode._
selectSingleNode _
(instring).text
getstring = _
server.htmlencode(temp)
End Function
%>
<html>
<head>
<title><%=getstring("titel")%></title>
</head>
<body>
<h1><font face="Arial" size="7"><%=getstring("titel")%></font></h1>
<form action="homepage.asp" method="post">
<p><font size="1" face="Arial">
Choose a language:
<select size="1" name="chosenlang">
<%
For i = 0 To selectednodes.length - 1
Response.Write "<option value=" & _
Chr(34) & _
selectednodes.item(i)._
selectSingleNode("lang").text & Chr(34)
If (selectednodes.item(i)._
selectSingleNode("lang").text = _
Session("chosenlang")) Then
Response.Write " selected>"
Else
Response.Write ">"
End If
Response.Write selectednodes.item(i)._
selectSingleNode("langname").text & _
"</option>" & vbCrLf
Next
%>
</select>
</font>
<input type=submit value="OK" name=submit></p>
<hr>
<p><font face="Arial"><%=getstring("inhoud")%></font></p>
</body>
</html>
Als je dit bestand goed doorleest, zul je het gauw in de gaten hebben.
|