Gå til innhold

lage flerspråklig program


Anbefalte innlegg

Er det noen enkel måte å programmere så brukeren kan velge språk ( i et oppsett vindu eller no ) og da endres alle menyer, textbokser osv til valgte språk?

 

Skal lage en engelsk versjon av et program jeg har laget på norsk her nå, og slik jeg har begynt nå ender jeg opp med 2 kildekoder jeg må vedlikeholde... Noe tungvindt i lengden.

 

Har sett verktøy som dette: http://www.whippleware.com/oldindex.htm men det koster jo en del. Noen som har noe tilsvarende addon gratis noe sted?

Endret av [space]
Lenke til kommentar
Videoannonse
Annonse

Det enkle er å holde ord / språk separat fra selve programmet, altså å lese og sette alle captions fra x eller y alt ettersom. Med enkelt menes ikke "lite jobb" for det er et veldig ekstraarbeid. Og helst skal oversettelsene være av en annen klasse enn "all your base are belong to us".

 

Det vanskelige fra et utviklersynspunkt er at ting har svært forskjellig lengde i forskjellige språk. En kollega som har forsøkt dette droppet knappetekster helt og baserte seg på ikoner, det er umulig å lage knapper som passer flere språk. Eksempelvis er den engelske excelfunksjonen

=FLOOR

på norsk

=AVRUND.GJELDENDE.MULTIPLUM.NED

så knappen skal være hvor bred, eller skal den skaleres etter språk ?

 

Beste hilsen Harald

Lenke til kommentar

I mine applikasjoner benytter jeg som regel en selvskrevet klassemodul til dette formålet. Modulen laster inn informasjonen i en tekstfil (avhenging av de nåværende språkinnstillingene) lokalisert i samme mappe, evt. undermape, som applikasjonen. Hver gang en form initialiseres eller tesktstreng skal vises til brukeren, kaller programmet denne klassemodulen for å få den riktige språkversjonen av teksten.

 

For å laste inn og oppdatere en språkfil, her ut fra registerverdier, kan en da gjøre noe som følgende:

Public Sub ReloadLanguage()

 

    Dim Form As Form

   

    ' Last inn språkfil ut fra innstillingene

    Language.LoadFile App.Path & "\" & _

                      GetSetting("DinApp", "Settings", "LanguagePack", "English.lpk")

   

    ' Oppdater alle former

    For Each Form In Forms

        Language.UseLanguage Form

    Next

 

End Sub

 

I tillegg bør en inkludere følgende kodesnutt i Form_Load-hendelsen i hver eneste form i applikasjonen:

Language.UseLanguage Me

 

En kan dessuten ekstraktere egendefinerte strenger, eller konstanter, via ConstantValue-egenskapen (der Index er navnet på undervariabelen).

 

Oppsettet på en slik språkfil ses nedenunder:

[frmAbout]

Caption = "Formoverskrift"

cmdOK.Caption = "&OK"

cmbFilterType.Clear

cmbOperation.Clear

cmbFilterType.AddItem "Verdi1"

cmbFilterType.AddItem "Verdi2"

cmbOperation.AddItem "Verdi1"

lblDisclaimer.Caption = "This is a test."

 

[frmMain]

(osv.)

 

[Constants]

Variabel1 = "verdi"

Variabel2 = 8

 

Som du ser kan du både sette egenskaper og eksekvere prosedyrer, alt etter hva som behøves. Clear er nødvendig ettersom språkinitialiseringen kan kalles flere ganger, eksempelvis dersom brukeren endrer språk under kjøring.

Lenke til kommentar

Hmm, noe omfattende det programmet ditt der :)

 

Får kompileringsfeil.

 

Ser jeg må endre litt i clsLanguage for å få det til å fungere...

Refererer bl.a. til ChatApp.

 

For å ta mitt program (i tillegg til din clsLanguage):

 

frmHoved:

Private Sub cmdAvslutt_Click()
   Unload Me
End Sub

Private Sub Form_Load()
   Language.UseLanguage Me
End Sub

 

modLang:

' The class containing the current language
Public Language As New clsLanguage

Public Sub ReloadLanguage()

   Dim Form As Form
  
   ' Last inn språkfil ut fra innstillingene
   Language.LoadFile ".\English.lpk"
  
   ' Oppdater alle former
   For Each Form In Forms
       Language.UseLanguage Form
   Next

End Sub

 

English.lpk:

[frmHoved]
Caption = "Formoverskrift"
cmdOK.Caption = "&OKtest"
cmdAvslutt.Caption = "testAvslutt"
cmbFilterType.Clear
cmbOperation.Clear
cmbFilterType.AddItem "Verdi1"
cmbFilterType.AddItem "Verdi2"
cmbOperation.AddItem "Verdi1"
lblDisclaimer.Caption = "This is a test."

 

Tanken er å bare hente labels fra fil, ikke kunne endre. (i første omgang...)

Endret av [space]
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...