Avatar billede websam Nybegynder
16. april 2005 - 23:03 Der 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 ?

/Websam
Avatar billede burningice Nybegynder
16. april 2005 - 23:20 #1
sagtens.. istedet for at hardcode en besked kan du lave en funktion der returnerer en string på basis af en eller anden variabel

<asp:CustomValidator ErrorMessage='<%# GetErrorMessageForCustomValidator() %>' id="hej" runat="server" />
Avatar billede websam Nybegynder
16. april 2005 - 23:30 #2
Jeg får denne fejl :

Name 'arrLoginLanguage' is not declared

det skal lige siges at det er et array ?

/Websam
Avatar billede burningice Nybegynder
17. april 2005 - 00:31 #3
og?

hvis du vil have af vide hvorfor den siger det, så er det fordi at der ikke er nogen variabel på din side der hedder arrLoginLanguage.
Avatar billede websam Nybegynder
17. april 2005 - 00:41 #4
Jamen når jeg i min page load laver arrayet så har jeg det da på siden
Avatar billede burningice Nybegynder
17. april 2005 - 00:47 #5
nu har du vel ikke oprettet arrayet i din codebehind-klasse og markeret det som private?
Avatar billede websam Nybegynder
17. april 2005 - 00:59 #6
nej det er i en public sub
Avatar billede burningice Nybegynder
17. april 2005 - 09:12 #7
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.

Eks.

Page_Load(objext sender, EventArgs e) {
  string[] arrLoginLanguage = new string[] { "Dansk", "English" };

  enAndenFunktion();
}

public void enAndenFunktion() {
  Response.Write(arrLoginLanguage.Length.ToString()); // Den går ikke.
}
Avatar billede websam Nybegynder
17. april 2005 - 11:44 #8
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)

/Websam
Avatar billede burningice Nybegynder
17. april 2005 - 11:55 #9
ja... det er det som man kalder et Field. Det er en variabel som er tilgængelig i hele klassen.

Har du ovevejet at lægge dine strings ud i en xml-fil, så de ikke står hardcodet i din kode.
Avatar billede websam Nybegynder
17. april 2005 - 12:11 #10
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)

/Websam
Avatar billede burningice Nybegynder
17. april 2005 - 12:28 #11
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();
}


og når du skal hente en string

<asp:CustomValidator ErrorMessage='<%# GetLocalizedString("fill_username") %>' id="hej" runat="server" />
Avatar billede websam Nybegynder
17. april 2005 - 17:39 #12
Ok det kigger jeg lige på efter aftensmaden :o)

/Websam
Avatar billede websam Nybegynder
17. april 2005 - 18:49 #13
Jeg får en fejl der siger :

Class 'System.Data.Datatable' Cannot be indexed because it has no default prroperty.

Og det er på denne linie :

return ds.Tables[(string)Session["setLanguage"]][type].ToString();

Hvad betyder det ?

/Websam
Avatar billede burningice Nybegynder
17. april 2005 - 20:26 #14
det betyder at jeg har rodet i koden

det skal være

return ds.Tables[(string)Session["setLanguage"]].Rows[0][type].ToString();
Avatar billede websam Nybegynder
17. april 2005 - 20:27 #15
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 ?

/Websam
Avatar billede websam Nybegynder
17. april 2005 - 20:28 #16
Cool så virker det takker for hjælpen :o)

/Websam
Avatar billede burningice Nybegynder
17. april 2005 - 20:34 #17
det var så lidt :)

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 :)
Avatar billede websam Nybegynder
17. april 2005 - 20:38 #18
Ja cool nok og måske en variabel i functionen til angivelse af sti til .xml fil så kan den bruges alle vegne ;o)

/Websam
Avatar billede websam Nybegynder
21. april 2005 - 14:19 #19
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 ?

/Websam
Avatar billede burningice Nybegynder
21. april 2005 - 17:24 #20
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.
Avatar billede websam Nybegynder
21. april 2005 - 17:33 #21
Ja se det var smart :o)

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 ?

/Websam
Avatar billede burningice Nybegynder
21. april 2005 - 17:40 #22
det er helt ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester