Avatar billede hyber Nybegynder
16. september 2004 - 11:01 Der 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??

Hygge

Esben
Avatar billede joern Nybegynder
16. september 2004 - 11:21 #1
Hej.

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.

M.v.h.  Jørn
Avatar billede hyber Nybegynder
16. september 2004 - 11:24 #2
Kan man lokke dig til at smide en stump kode ind på hvordan du indlæser filen til et array og hvordan du har opbygget txt filen???

--
Esben
Avatar billede joern Nybegynder
16. september 2004 - 12:06 #3
Hej.

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.

M.v.h.  Jørn
Avatar billede slumtiger Nybegynder
27. september 2004 - 20:51 #4
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
Avatar billede joern Nybegynder
04. februar 2005 - 19:03 #5
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
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