Har lige et spørgsmål. Har lige tilføjet sprog support til mit program og er lidt tvivl om en ting.
Jeg har en sprog skifter procedure som bliver kørt når man klikker på det ønsket sprog og når man starter programmet så man får det sprog man brugte sidst.
procedure Language(Input: String); begin //finder ud af hvilket sprog man har valg og sørge for den //rigtige sprog fil bliver loadet
Der er nogle strings som har noget tekst som også skal ændres. Da jeg ikke kan ændre string værdien fra min procedure som med knapper så jeg bliver nød til at gøre det på denne måde
procedure TForm1.Button1Click(Sender: TObject); var lang : string; begin //checker hvilket sprog der skal bruges lang := //teksten på det ønsket sprog showmessage(lang); end;
Men hvis jeg nu laver alle de strings som globale variabler ?
procedure TForm1.Button1Click(Sender: TObject); begin showmessage(text1); end;
Er det ikke smartere at gøre det på den måde ? det nemmere for mig :) men er det den rigtig måde at gøre det på ? fordi hva så når man har 50 strings defineret globalt ? bruger programmet ikke mere ram ?
Mød en af Nordens fremmeste eksperter i adfærdsdesign – Morten Münster, der bl.a. har skrevet ” Jytte fra marketing er desværre gået for i dag” – på Computerworld Cloud & AI Festival.
Jeg har gjort det på denne måde. På en unit har jeg placeret funktioner og procedure som disse, for at have alt vedr. sprog samlet et sted. Så er det nemmere at tilføje et nyt sprog. Man kunne også have ”sprogene” liggende som tekstfiler.
//Denne procedure kaldes når man skifter sprog, så alle captions bliver ændret.
procedure Form1Captions; begin if Sprog = Danish then begin Form1. Button1.Caption := 'Åben mappe'; Form1.Label1.Caption := 'Et eller andet'; Form1.MenuPunkt1.caption := ’Noget andet’; end; if Sprog = English then begin Form1.Button1.Caption := ’Open directory; Form1.Label1.Caption := ’Something; Form1.MenuPunkt1.caption := Somtthing else’ end; end;
//Denne funktion kaldes f.eks. i en showmessage, en messagebox mv. //Den sender teksten tilbage i oversat form.
Function LanguageReturnString(input:string):string; begin if Sprog = Danish then result := input;
if Sprog = English then begin
if input = 'Vil du gemme? ' then Result := Save the document: '; if input = 'Et eller andet' then Result := 'Something'; if input = Noget andte' then Result := ‘Something else’; end;
procedure Tform1.Button1Click(Sender: TObject); begin showmessage(LanguageReturnString('Vil du gemme?’)); end;
Du har ret i at min løsning kræver at programmet opdateres når nye sprog skal tilføjes. Det kan løses ved at have sproget liggende som tekstfiler.
Du beder om en kommentar til dit oplæg.
Det er som du antyder selv nok ikke smart med alle de globale variable. Det er bedre at indlæse værdierne efterhånden som du skal bruge dem. Altså alle captions ved programstart eller sprogskift. Ellers løbende ved showmessages mv.
vi har i lang tid haft stor succes med at indlæse alle tekster brugeren ser fra registereringsdatabasen, under HKEY_CURRENT_USER. Under vores hovednøgle har vi en nøgle for hver form, hvor i hvert komponent har to værdier, én for caption (eller lign) og én for hint. Hver gang en form åbnes læser den alle disse værdier og sætter caption og hint. Vi har så et lille program der indlæser valgte sprogfiler i registreringsdatabasen. Ved at læse fra HKEY_CURRENT_USER kan vi nøjes med én applikationsfil der kan køres mange steder fra i mange forskellige sprog.
håber det kan give dig lidt inspiration.
ha' det godt hatecaps
Synes godt om
Ny brugerNybegynder
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.