webForumDet fria alternativet

Använda en XML för språkinnehåll?

ASP

3 svar · 311 visningar · startad av Mattias Nordin

Medlem sedan dec. 20051 056 inlägg
Frågan#1

Jag håller på att labbar med någon sorts lösning på en formulärssida som behöver översättas till en massa språk. Det jag vill åstakomma är att separera översättningstesten från alla övrig kod på sidan. Min första tanke var att labba med en XML fil och det är ungefär så långt jag har kommit. Jag har ingen tidigare erfarenhet av XML.

Hur skulle ni lägga upp det? Så här ser mitt första, fungerande, test ut:

XML filen:

<?xml version="1.0"?>
 <language>
   <english>
	 <r0>How would you describe yourself?</r0>
     <r1>Job title</r1>
	 <r2>My industry</r2>
	 <r3>How would you describe your Personal Goals?</r3>
	 <r4>I want to advance my career as a professional thermographer</r4>
   </english>
   …
   <swedish>
	 <r0>Hur skulle du beskriva dig själv</r0>
	 <r1>Job titel</r1>
	 <r2>min industri</r2>
	 <r3>Vad är dina personliga mål?</r3>
	 <r4>My industry</r4>
	 <r5>jag vill...</r5>
   </swedish>
 </language>

ASP sidan:

<%'===== I N P U T =====
sLanguage = lCase(request("language"))%>

<% Dim objXML, objLatlista, objLat, antalLatar, i

'1)	-	CREATE XML OBJECT...
		Set objXML = Server.CreateObject("Microsoft.XMLDOM")
		objXML.async = False

'2)	-	SELECT FILE...
		objXML.Load Server.MapPath("LabelLanguage.xml")

'3)	-	TEST PARSE FILE CONTENT...
		If objXML.parseError.errorCode <> 0 Then
			response.write("<li> FOUND ERRORS" &objXML.parseError.errorCode)
		End If

'4)	-	CREATE LIST...
		Set objList = objXML.getElementsByTagName(sLanguage)
		totalNumberOfObjects = objList.length
		'if input language is not found. Use english. 
		if totalNumberOfObjects = 0 then
			Set objList = objXML.getElementsByTagName("english")
		end if
		response.write("<LI> totalNumberOfObjects = " &totalNumberOfObjects ) %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>TEST</title>
</head>
<body>

<% 
'1)	-	GET ALL TEXT LABELS...
		Set objRowData = objList.item(0) 
		txtHowWouldYouLikeToDescribeYourself = objRowData.childNodes(0).text
		txtJobTitle = objRowData.childNodes(1).text
		txtMyIndustry = objRowData.childNodes(2).text %>

<p> <%=varLanguage%> </p><hr />
<%=txtHowWouldYouLikeToDescribeYourself%> <input type="text" value="" /><p>
<%=txtJobTitle%> <input type="text" value="" /><p>
<%=txtMyIndustry%> <input type="text" value="" /><p>

</body>
</html>

Ovan fungerar utmärkt men jag inser att det blir besvärligt att utöka med fler fält då jag läser childNodes rad för rad.

Har någon annan gjort någon fiffig lösning som ni kan tipsa om? :stud

Medlem sedan sep. 2004828 inlägg
#2

Titta på hur det fungerar i .NET. Otroligt smidigt. Dessutom har west-wind gjort en databaslösning med trevligt gränssnitt till den också.

Medlem sedan dec. 20051 056 inlägg
#3

Är det någon som vet om man kan hämta text från en childnode genom att använda taggnamnet istället för radnummer?

Alltså något liknande

objRowData.nodeName("r1").text

istället för

objRowData.childNodes(1).text

?

Hittar inte något referensverks så jag vet inte ens vad som är giltig syntax.

Medlem sedan dec. 20051 056 inlägg
#4

Det tog ett tag att klura ut men nu har jag hittat en metod som fungerar.

<% function funReturnTagText(iTagName) 
	funReturnTagText = objLanguageNood.item(0).getElementsByTagName(iTagName).item(0).childNodes(0).text
end function %>
'1)	-	GET ALL TEXT LABELS FROM THE XML FILE.
		txtHowWouldYouLikeToDescribeYourself = funReturnTagText("o1a")
		txtJobTitle = funReturnTagText("o1b")
		txtMyIndustry = funReturnTagText("o1c")
270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)