ASPNL logo (1 kb)
zaterdag 17 mei 2008




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

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

'Hier wordt gekeken welke taal gebruikt wordt, is er geen, dan wordt Nederlands gebruikt
If Request.Form("chosenlang") <> "" Then
   Session("chosenlang") = Request.Form("chosenlang")
Else
   Session("chosenlang") = "nl"
End if

'Hier wordt het XML-bestand vermeld

xmlfilename = "taal.xml"

'Hier wordt een object aangemaakt die de XML opslaat
Set doc = Server.CreateObject("MSXML2.DOMDocument")

'Hier wordt gezegd dat ASP moet wachten tot XML klaar is
doc.async = False

'Hier wordt XML geladen en anders komt er een fout-melding
If Not Doc.Load(server.MapPath(xmlfilename)) Then
   Response.Write "Heeft de XML-file niet kunnen laden.<br>"
   Response.End
End If

'Hier wordt gezegd dat we Xpath gebruiken
doc.setProperty "SelectionLanguage", "XPath"

'Hier worden de juiste tags gekozen uit de XML-file
Set selectednode = doc.selectSingleNode("/talen/taal[@xml:lang='" & Session("chosenlang") & "']")

'Hier worden alle tags gekozen
Set selectednodes = doc.documentElement.selectNodes("/talen/taal")

Function getstring(instring)
   'Deze functie zorgt ervoor dat de waarde van de tags in instring komt en HTML-klaar is
   temp = selectednode._
   selectSingleNode _
   (instring).text
   getstring = _
   server.htmlencode(temp)
End Function
'Hier wordt het bestand gemaakt in HTML
%>
<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">
<%
'Hier wordt de taal-keuze in elkaar gezet
'Je kan dus de XML-file met talen uitbreiden, zonder aan ASP te komen
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.

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL