Hejsan > Valet ska antingen göras vid installationen eller i mainmenu-inställningar el liknande. > Valet ska antingen göras vid installationen eller i mainmenu-inställningar el liknande. Jag (eller egentligen vi, här där jag jobbar) använder den enkla vägen att göra en textfil för varje språk, med en text för varje rad såhär: Ett exempel är ju Opera som gör just så! Här kommer vår (jag och mina kollegors) lösning på detta problem. Tack för all hjälp.Recource files?
Jag jobbar med ett ganska omfattande program.
Ett VB gränssnitt kopplat mot en SQL-databas.
'
Nu har önskemål från kund kommit om möjligheten att välja språk i programmet. Valet ska antingen göras vid installationen eller i mainmenu-inställningar el liknande.
Nån som gjort detta tidigare?? Resource files, hur använder man dem?
Eller är det enklare att använda databasen?
NettanSv: Recource files?
Jag kan tyvärr inte hjälpa dig med själva programeringen utan kommer med ett "administratörs-inlägg".
Vilket språk en användare vill använda sig av ska denna bara behöva välja en gång. Och det gör hon i "Regional Options" i "Control Panel". Alla applikationer ska sedan läsa av den inställningen och följa den. För utvecklaren kan jag tänka mig att detta lätt blir lite kinkigt. I en normal Win2000 installation så har man ju valet "Your locale (location)". Om man lägger på ett paket som heter "Multilanguage Pack" så får man en ny inställning som heter "Language". Det är igentligen denna man ska läsa av men efter som att den inte alltid finns brukar man få nöja sig med "Locale".
Man ska alltså inte ha ett språkval i varje applikaton!Sv: Recource files?
Hur valet sker är egentligen inte problemet. Men jag ska ta dina råd.
Det är implementationen av resultatet som är problemet.Sv: Recource files?
nyckel=text
Nyckeln kan vara just den avsedda texten på svenska eller engelska eller kan det vara en lämplig förkortning. En fil görs för varje språk.
Fördelen med detta är att ombuden (eller användarna) i de olika länderna kan göra sin egen översättning utan andra hjälpmedel än Notepad, och det är lätt att lägga till ytterligare språk. Nackdelen är att det blir ytterligare några filer som skall ingå i distributionen, och som skall uppdateras när ändringar görs.
-HansSv: Recource files?
<URL:http://www.opera.com/>
<URL:http://www.opera.com/download/modules.html>
<URL:http://www.opera.com/download/lnginstall.html>Sv: Recource files?
>>Eller är det enklare att använda databasen?
Jag tycker att det är bättre att använda resource filen för Du får hjälptexten (om Du också har knutit fel texterna) till resource filen istället för till databasen. Du skulle inte få mycket hjälp om felet var att det inte går att ansluta mot databasen. ;-)
>>Nån som gjort detta tidigare?? Resource files, hur använder man dem?
Antingen kan man använda den språkförberedda delen,dvs ID nummren är lika oavsett vilket språk som används och den aktuella språk kolumnen i Resource filen läses av beroende på vilket språk som väljs under regional settings.
Annars kan man också använda offset värden i ID kolumnen och köra alla språk i samma kolumn, dvs tex ID-värde 1000 för Engelska, 3000 för Svenska, 5000 för Tyska osv. Detta sättet tycker jag är att föredra för då kan man själv bestämma när språket skall ändras och få det att ändras utan att övriga applikationer påverkas.
För att ändra språken på applikationer brukar jag använda mig av registret och en egenskapad dll-fil.
När man vill ändra språket skriver jag helt sonika ner till en skapad plats i registret och anger vilket offset värde som skall gälla, tex 5000 ( i mitt fall betyder detta tyska).
Sedan har alla ActiveX kontrollrar och själva applikationen en instans av dll-filen som talar om när en språkförändring är gjord. Detta har jag löst genom att använda mig av en timer i ett dummy form inlagt i dll'en, se nedan:
Event LanguageChange(ByVal Language As Integer)
Private Sub Class_Initialize()
Set frmServer = New lsfrmMain '-lsfrmMAin är mitt dummy form
Load frmServer
Set Timer = frmServer.TimerLanguage '-I form'et har jag en timer inlaggd med en cykeltid på en sekund
End Sub
Private Sub Timer_Timer()
intLanguage = zReg.RegString("Language")'-Läs av offsetvärdet i registret
If intOldLanguage <> intLanguage Then'-Kolla om språket har förändrats
RaiseEvent LanguageChange(zReg.RegString("Language"))'-Kör ut händelsen med det nya offset värdet
intOldLanguage = intLanguage
End If
End Sub
Det som händer är att händelsen 'LanguageChange' körs överallt där en instans av dll'en är gjord.
//UJSv: Recource files?
Jag ska förkovra mig i hur man använder recourcefiles. Verkar vara det som gäller.
Nettan