16. april 2005 - 23:03Der er
20 kommentarer og 2 løsninger
Variabel fejl beskde i validator ?
Hejsa,
Er det muligt på nogen måde at indsætte en variabel som fejlbesked i en validator. Forstået på den måde at hvis engelsk f.eks. er valgt påsiden skal fejlbesked stå på engelsk og dansk på dansk ?
hvis du opretter arrayet inde i en funktion, så har du ikke adgang til det udenfor funktionen med mindre du returnere det på en eller anden måde. Det er hvad man kalder scope.
Jeg fandt ud af at hvis jeg ligger denne øversti min klasse på siden :
Protected arrLoginLanguage As System.Collections.Specialized.StringCollection
Og så i min page_init også på siden ligger arrayet :
arrLoginLanguage = New System.Collections.Specialized.StringCollection Select Case Session("setLanguage") Case "da" arrLoginLanguage.Add("Login") '0 arrLoginLanguage.Add("Brugernavn") '1 arrLoginLanguage.Add("Adgangskode") '2 arrLoginLanguage.Add("Du skal udfylde feltet Brugernavn !") '3 arrLoginLanguage.Add("Du skal udfylde feltet Adgangskode !") '4 Case "en" arrLoginLanguage.Add("Login") '0 arrLoginLanguage.Add("Username") '1 arrLoginLanguage.Add("Password") '2 arrLoginLanguage.Add("You must enter your Username !") '3 arrLoginLanguage.Add("You must enter your Password !") '4 End Select
Og til sidst i min page load ligger en Databind(), ja så virker det hele som jeg gerne vil have det til :o)
Jo, men da jeg ikke har arbejdet med .xml før og der er så meget nyt på .net gav jeg faktisk op inden jeg kom så langt. Men hvis du har nogle eksempler er du velkommen til at smide dem her :o)
den nemmeste måde er at lave et dokument der matcher et DataSet Scheme.
<?xml version="1.0" standalone="yes"?> <NewDataSet> <da> <login>Login</login> <username>Brugernavn</username> <password>Adgangskode</password> <fill_username>Du skal udfylde feltet Brugernavn !</fill_username> <fill_password>Du skal udfylde feltet Adgangskode !</fill_password> </da> <en> <login>Login</login> <username>Username</username> <password>Password</password> <fill_username>You must enter your Username !</fill_username> <fill_password>You must enter your Password !</fill_password> </en> </NewDataSet>
På din side kan du så have denne metode der henter en bestemt streng ud fra typen og sproget
public string GetLocalizedString(string type) { DataSet ds = new DataSet(); ds.ReadXml("localized_strings.xml"); return ds.Tables[(string)Session["setLanguage"]][type].ToString(); }
Heyyyy nu fik jegdet til at virke, den [Type] skal ikke med når det er vb.net, men når den så loader tekst på f.eks en button skriver den blot da for dansk eller en for engelsk istedet for at skrive "Login" som er teksten der skal skrives på knappen hvad skyldes det ?
der er plads til lidt optimeringer, f.eks. kan du gemme DataSettet i en Application-variabel så det ikke skal loades hver gang, men det kan du selv få lov at rode med :)
Hey jeg sad lige og legede med det application variable kunne det ikke være noget i denne stil :
Public Function GetLocalizedString(ByVal type As String) As String If Application("LoginLanguage") = "" Then Dim ds As DataSet = New DataSet Dim ses As String ses = Session("setLanguage") ds.ReadXml(Server.MapPath("../Xml/login.xml")) Application("LoginLanguage") = ds.Tables(CStr(ses)).Rows(0)(type).ToString() End If Return Application("LoginLanguage") End Function
Bare for lige at se om ikke jeg har fat i noget af det rigtige ?
jo, det er ikke helt forkert :) dog kan du optimere den lidt mere sådan her:
Public Function GetLocalizedString(ByVal type As String) As String If Application("LoginLanguage") = Nothing Then Dim ds As DataSet = New DataSet() Dim ses As String = Session("setLanguage") ds.ReadXml(Server.MapPath("../Xml/login.xml")) Application("LoginLanguage") = ds End If
Return CType(Application("LoginLangauge"), DataSet).Tables(CStr(ses)).Rows(0)(type).ToString() End Function
her gemmer jeg hele datasettet i Application, istedet for kun en lille del af den. Så hver gang GetLocalizedString bliver kaldt, så henter jeg datasettet ud fra Application og henter den pågældende type der er forespurgt på. Og første gang, hvor Application("LoginLanguage") er tom bliver DataSet'et lavet, så det er klart til alle de næste gange.
Jeg oprette lige et nyt spørgsmål med overskriften "Fortsættelse af http://www.eksperten.dk/spm/610356" da jeg et par spørgsmål til xml filen, hvis det er ok ?
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.