16. september 2004 - 11:01Der er
3 kommentarer og 2 løsninger
Flersproget program
Jeg står og skal til at oversætte et at mine programmer, og ville derfor gerne give brugeren mulighed for selv at kunne vælge sproget og derved on the fly skifte fra f.eks. eng. til dansk.
Jeg ved der er brugere rundt i verdenen der gerne vil oversætte det til deres lokale sprog uden at de har nogen programmerings erfaringer. Derfor tænkte jeg på at måske smide det hele i en tekst fil, hvor den originale streng stod først efter fulgt af den oversatte.
Jeg har også overvejet at smide det i et XML dokument, men jeg syntes måske der er at skyde lidt over mål… eller er det??
Er der ikke nogen af jer der har en god ide til hvordan det kan gøres nemt??
Jeg har selv i et af mine programmer givet den mulighed, men det bør være forberedt ved at flest mulig kontroller er kontrol-arrays. Det gør tildelingen nemmere.
Jeg opbevarer knap-, label- og tooltip-tekster i hver sin tekstfil efter sprog. Men også for meddelelses-bokse (hvis du har sådan nogle) skal indholdet jo komme fra variable, så der er ikke nogen LET løsning.
Når først programmet får alle tekster ved indlæsning fra tekstfil, er det til gengæld let at tilføje nye sprog, når blot det er et med det latinske alfabet.
Jeg indlæser ikke alene tekstfilen i et array, også kontrollerne der er kontrol-arrays.
Når du opretter f.eks. en label og kalder den labfordata, så kan du i formen markere den og trykke CTRL+C. Når du derpå indsætter i formen med CTRL+V spørger VB om du vil oprette et kontrol-array. Det betyder at alle dine labels kan hedder 'labfordata' men at de adskiller sig ved deres indeks: labfordata(1) labfordata(2) osv. Det samme kan gøres med knapper og andre kontroller. Da dit program velsagtens ER færdigt hedder dine kontroller jo alle mulige navne (systematisk selvfølgelig).
Tekstfilen DANSK.SPR indeholder linier med hver sin label- og knaptekst, her er et uddrag:
Journal nr. Beskrivelse Dokum. dato Afs. reference 4 Disp. 5 Disp. 6 Disp. 7 Disp. URL Dok. format Fremtages Tekst til hovedgruppe Tekst til undergruppe Sags-benævnelse
Dim lab(90) as string, a as Integer
For at indlæse filen og tildele indholdet til kontroller udføres under FormLoad:
On Error GoTo fejllab Open labsti & "dansk.spr" For Input As #2 Do While EOF(2) = False Line Input #2, lab(a) Select Case a Case 0 To 18 Label1(a).Caption = lab(a) Case 19 ramini.Caption = lab(a) Case 20 ramred.Caption = lab(a) Case 21 ramstam.Caption = lab(a) Case 21 To 39 Label1(a).Caption = lab(a) Case 40 To 58 knap(a - 40).Caption = lab(a) Case 60 To 71 Label1(a - 20).Caption = lab(a) End Select a = a + 1 Loop Close #2
fejllab: X = MsgBox("Filen der indeholder label-tekster er beskadiget eller findes ikke på " & labsti, 48, "Medd. fra start af JkfSoft Journal.") Exit Sub Resume Next
Når dine kontroller har hver sit navn må du jo bruge
if a = 17 then command17.caption = lab(a)
Jeg må tilføje at sprogskift ikke er fuldt gennemført, men forberedt. Til dette program har jeg ikke haft forespørgsler fra andre lande, men til andre programmer har jeg haft forespørgsler fra Norge og Sverige.
Jeg har anvendt en nem og effektiv metode, hvor jeg gør brug af objekternes tag. I programmet indsætter du følgende funktion.
Function LoadLanguage(frm As Form, LanguageFile As String) As Boolean Dim Ctrl As Control Dim LanArr(200) As String Dim Indeks As Integer Dim Indeks1 As Long Dim BeskedIndx As Integer
Open App.Path & "\" & LanguageFile For Input As #1 Indeks = 0 Do Line Input #1, LanArr(Indeks) Indeks = Indeks + 1 Loop Until EOF(1) Close #1
For Each Ctrl In frm.Controls For Indeks = 0 To 200 If Len(LanArr(Indeks)) > 0 Then Select Case TypeName(Ctrl) Case "StatusBar" Case "Label", "OptionButton", "CheckBox", "Frame", "CommandButton" If Ctrl.Tag = Left(LanArr(Indeks), 5) Then Ctrl.Caption = Mid$(LanArr(Indeks), 7) End If End Select End If Next Next End Function
I en tekstfil (App.Path & "\" & LanguageFile) har jeg følgende stående:
11100 HEJ 11101 MED 11102 DIG 11103 HELD OG 11104 LYKKE
I det objekt.tag der er lig 11102 kommer der til at stå 'DIG'.
Hvis du laver en tekstfil med engelske tekster, kan oversætterne kopiere filen og lave deres oversættelse der
Tak for point. Det var en lang indløbstid! Eller har du været på 'oprydning' i uafsluttede spørgsmål?
M.v.h. Jørn
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.