Avatar billede smith1 Nybegynder
30. marts 2005 - 16:20 Der er 9 kommentarer

Program og Sprog support

Hej

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

button1.caption := //ny sprog
button2.caption := //ny sprog
//osv
end;

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 ?

var
text1, text2, text2 : string;

procedure Language(Input: String);
begin
button1.caption := //nyt sprog
button2.caption := //nyt sprog

//mine strings
text1 := //nyt sprog
text2 := //nyt sprog
text3 := //nyt sprog
end;

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 ?
Avatar billede kammeyer Nybegynder
30. marts 2005 - 17:19 #1
Tjek linket og se om du ikke kan benytte den metode.
http://delphi.about.com/library/weekly/aa011805a.htm
Avatar billede smith1 Nybegynder
30. marts 2005 - 19:55 #2
Tak for linket

Jeg har dog aldrig prøvet det med resources filer før.
Er det med de globale variable en meget dum ide ? hvis ja hvorfor ?
Avatar billede falster Ekspert
31. marts 2005 - 11:52 #3
Der er måske mulighed for at bruge TjanLanguage:

http://jansfreeware.com/jfdelphi.htm

et stykke nede.
Avatar billede pellelil Nybegynder
31. marts 2005 - 18:56 #4
Kender ikke "den indbyggede", men har til et enktelt project brugt DxGetText, som jeg synes er meget god: http://dybdahl.dk/dxgettext/
Avatar billede smith1 Nybegynder
31. marts 2005 - 20:37 #5
tak for linkene :)

Men der er ikke nogen der har svaret på mit spg. Er det totalt forkert at gøre det med globale strings
Avatar billede eht Nybegynder
01. april 2005 - 13:36 #6
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;
Avatar billede smith1 Nybegynder
01. april 2005 - 14:41 #7
eth så skal selve programmet opdateres hvis nye sprog skal tilføjes.
Jeg load sproget fra en lng fil.

stadig ingen der har svaret på mit spg, nå  da der ikke nogle der siger noget til det, så må det vel være en fin måde at gøre det på .
Avatar billede eht Nybegynder
01. april 2005 - 16:21 #8
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.
Avatar billede hatecaps Nybegynder
11. april 2005 - 14:20 #9
Hejsa,

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
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
Kurser inden for grundlæggende programmering

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