15. januar 2005 - 00:19Der er
59 kommentarer og 1 løsning
Oversættelser i message_dk message_eng format!
Hej igen igen..
jeg har opdaget at man kan gøre sådan at man kan load forskellige sprog, så jeg ville gerne starte med dansk og engelsk.
jeg opretter derfor en fil kaldet message_da og message_en også feks. 1 ting der skal over sættes.
#Hello=Hej(i DA) #Hello=Hello(i en)
Når jeg så skal have sat det ind i en <td> feks. gør jeg så <%=getmsg("Hello")%> .
Men et eller andet sted skal den jo vide om den skal tages fra den engelske fil eller den danske. og det ville jeg gerne have i en cookie, så hvis brugeren trykker på det danske flag får han det i dansk og omvendt..
jeg har 2 filler henholdsvis message_en og message_da som den skal hente fra.
og jeg burde kunne indsætte <%=GetMgs("select.langues")%>
Det jeg mener jeg mangler er noget i still med det her!!
<%
' ' $Id: inc.loader.asp,v 1.1.1.1 2003/03/09 22:45:58 peter Exp $ ' ' Loads all messages used in chat -- this function should be OPTIMIZED! ' ' @author Peter Theill peter@theill.com '
Dim all_messages Set all_messages = CreateObject("Scripting.Dictionary")
readMessages()
Sub readMessages() Dim messageFile messageFile = Server.MapPath("messages/messages." & MESSAGE_LANGUAGE)
Dim fs Set fs = CreateObject("Scripting.FileSystemObject") If (fs.FileExists(messageFile)) Then
Dim a Set a = fs.OpenTextFile(messageFile)
Dim line, msg Do While Not (a.AtEndOfStream) line = Trim(a.ReadLine) If (Len(line) > 0 AND Left(line, 1) <> "#" AND Left(line, 1) <> "'") Then ' get messages by spliting where the = is located; notice the second ' parameter which is used to split the line in two parts only and ' thus allowing users to type = in the localized message msg = Split(line, "=", 2) If (UBound(msg) = 1) Then all_messages.Add Trim(msg(0)), Trim(msg(1)) End If End If Loop End If
End Sub
%>
Men jeg skal bare have den til at tage fra en cookie..
jeg har ikke lavet noget på mit eget endnu. men feks. den chat der kan jeg give lidt fra :)
inc.config.asp ' Defines used language for all messages shown. Change this value to ' a language of your chat and create a new message file in the 'messages' ' directory called: "messages.<language code>", i.e. if you want to ' create one for danish use "messages.da" and change the setting below ' to "da". ' ' Default Value: "en" ' Const MESSAGE_LANGUAGE = "en"
inc.loader.asp <%
' ' $Id: inc.loader.asp,v 1.1.1.1 2003/03/09 22:45:58 peter Exp $ ' ' Loads all messages used in chat -- this function should be OPTIMIZED! ' ' @author Peter Theill peter@theill.com '
Dim all_messages Set all_messages = CreateObject("Scripting.Dictionary")
readMessages()
Sub readMessages() Dim messageFile messageFile = Server.MapPath("messages/messages." & MESSAGE_LANGUAGE)
Dim fs Set fs = CreateObject("Scripting.FileSystemObject") If (fs.FileExists(messageFile)) Then
Dim a Set a = fs.OpenTextFile(messageFile)
Dim line, msg Do While Not (a.AtEndOfStream) line = Trim(a.ReadLine) If (Len(line) > 0 AND Left(line, 1) <> "#" AND Left(line, 1) <> "'") Then ' get messages by spliting where the = is located; notice the second ' parameter which is used to split the line in two parts only and ' thus allowing users to type = in the localized message msg = Split(line, "=", 2) If (UBound(msg) = 1) Then all_messages.Add Trim(msg(0)), Trim(msg(1)) End If End If Loop End If
End Sub
%><!-- #include file="inc.utility.asp" -->
inc.utility.asp
<script language="JScript" runat="Server">
/** * Need to use JScript for this since I want to have optional parameters * in my 'getMsg' function call. * */
/** * Returns message and replaces arguments with dynamic text if the function * may be called with: * * getMsg("I'm pretty sure {0} taste better than {1}.", "coke", "sprite") * * Which will result in a line saying: * * I'm pretty sure coke taste better than sprite. * * @param name Name with text string and optional {} tags * @param ... Optional arguments to replace tags * @return String with replaced parameter * */ function getMsg(name) {
if (!all_messages.Exists(name)) { return "[" + name + "]"; }
var message = all_messages.Item(name); for (var i = 0; i < arguments.length; i++) { message = message.replace("\{" + i + "\}", arguments[i+1]); }
return message;
} // > function getMsg(name)
function gettext(name) {
if (!all_messages.Exists(name)) { return name; }
var message = all_messages.Item(name); for (var i = 0; i < arguments.length; i++) { message = message.replace("\{" + i + "\}", arguments[i+1]); }
select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk case else MESSAGE_LANGUAGE = "da" ' brugeren har måske skrevet noget andet, der ikke passer ind
Skal jeg så bare kopirer det her ind i sprog.asp ? select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk case else MESSAGE_LANGUAGE = "da" ' brugeren har måske skrevet noget andet, der ikke passer ind
Du kan godt smide det i en cookie ( http://www.html.dk/tutorials/asp/lektion13.asp ), så detautomatisk bliver valgt næste gang. Du kan også lave det sådan, at brugeren automatisk sendes tilbage, til den side han/hun kom fra, ved valg af sprog.. Der bruger du request.servervariables("path_info").
Ja lige nu har vi ikke gemt den i noget som helst sådan som vi har lavet det..
for at gemme den som session eller cookie skal jeg jo tilføje noget mere. eventuelt tilføje "da" eller "en" i en cookie.
Men selve sproget er gemt, det tjekker vi jo når siden åbnes med
select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk case else MESSAGE_LANGUAGE = "da" ' brugeren har måske skrevet noget andet, der ikke passer ind
' -------------------------------- hent sproget fra urlen og brug den: select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk case else MESSAGE_LANGUAGE = "da" ' brugeren har måske skrevet noget andet, der ikke passer ind
end select
messageFile = Server.MapPath("messages/messages." & MESSAGE_LANGUAGE) .. resten af koden her... .. og så:
' -------------------------------- gem ordene i sessions:
' tidligere var denne linie jo "all_messages.Add Trim(msg(0)), Trim(msg(1))": session(Trim(msg(0))) = Trim(msg(1)) ' se 15/01-2005 01:06:28
skal jeg skrive alle ordne i sessions eller kan jeg godt have de 2 filer jeg har den henter fra ? og hvor skal jeg indsætte den her? session(Trim(msg(0))) = Trim(msg(1))
Nu har jeg lige lavet den her. det burde gemme den i en cookie.
<% select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk Response.Cookies("After8")("MESSAGE_LANGUAGE") = "da" case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk Response.Cookies("After8")("MESSAGE_LANGUAGE") = "en" case else MESSAGE_LANGUAGE = "en" ' brugeren har måske skrevet noget andet, der ikke passer ind
Før var linien "all_messages.Add Trim(msg(0)), Trim(msg(1))".. nu er linien (samme linie) lavet om til "session(Trim(msg(0))) = Trim(msg(1))"
Jeg kan se at du inkluderer nogle ekstre filer.. jeg ved ikke hvad de gør, og hvordan "all_messages.add" virker.. altså, det fremgår ikke hvordan der holdes styr på ordenen..
alt det der er fra chat siden har jeg ikke indført.
kun det du har hjulpet mig med fornær Trim da jeg ikke er helt med hvor du vil have den.. men jeg skal måske bruge inc.loader.asp og inc.utility.asp ??
jeg skal jo næsten lave 2 sprog.asp da den ene skal bruges når siden loader og den anden til når brugeren vælger sprog..
så den siden automatisk loader må se sådan her ud.
<% If cookie("After8")("MESSAGE_LANGUAGE") = "da" Then Const MESSAGE_LANGUAGE = "da" elseif cookie("After8")("MESSAGE_LANGUAGE") = "en" Then Const MESSAGE_LANGUAGE ="en" else Const MESSAGE_LANGUAGE ="en" end if %>
Du har indsat Const igen et eller andet sted. Enten i samme fil, eller i en fil du inkluderer. Se godt efter. Hvis "linie 6" er før din IF-sætning, kunne det være fil du har indkluderet.
--
1) Find linien: "all_messages.Add Trim(msg(0)), Trim(msg(1))" 2) Erstat den med: "session(Trim(msg(0))) = Trim(msg(1))" 3) Var det bedre? :-)
Do While Not (a.AtEndOfStream) line = Trim(a.ReadLine) If (Len(line) > 0 AND Left(line, 1) <> "#" AND Left(line, 1) <> "'") Then ' get messages by spliting where the = is located; notice the second ' parameter which is used to split the line in two parts only and ' thus allowing users to type = in the localized message msg = Split(line, "=", 2) If (UBound(msg) = 1) Then all_messages.Add Trim(msg(0)), Trim(msg(1)) ' ------------------ her :-) End If End If Loop
i index.asp <%=Session("select.langues")%> <a href="sprog.asp?lang=da"><img src="image/Denmark.bmp" border="0"></a> <a href="sprog.asp?lang=en"><img src="image/England.bmp" border="0"></a>
sprog.asp <% select case lcase(request.querystring("lang")) case "da" MESSAGE_LANGUAGE = "da" ' brugeren har valgt dansk Response.Cookies("After8")("MESSAGE_LANGUAGE") = "da" case "en" MESSAGE_LANGUAGE = "en" ' brugeren har valgt engelsk Response.Cookies("After8")("MESSAGE_LANGUAGE") = "en"
1) heheheh... du sætter en cookie, men checker en session.. :-)
2) du bruger response.redirect "index.asp".. så er det lige meget med linien: messageFile = Server.MapPath("messages/messages." & request.cookies("After8")("MESSAGE_LANGUAGE"))
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.