Vinnaren i pepparkakshustävlingen!
2007-10-10, 22:24
  #1
Medlem
Hej,

Jag kommer inom kort påbörja ett projekt i VB 6.0 där jag ska anpassa en applikation rörande språkmöjligheter (svenska, engelska och tyska). Text på controller och i löptext ska dynamiskt kunna ändras vid uppstart. Min idé var först att använda en dll per språk med ett gäng string konstanter. Nu vet jag att jag ska använda en resursfil istället. Kanske kan någon peka mig till lite info eller till och med i stora drag beskriva hur jag skall gå tillväga?

Vänligen,

Robert
Citera
2007-10-10, 23:31
  #2
Medlem
nkwtms avatar
En resurs-fil med 3 string-tabeller (en för varje språk) vore nog det mest regelrätta sättet att göra det på - men om jag får fråga, varför 6.0 och inte .NET?
Citera
2007-10-11, 18:59
  #3
Medlem
Vb 6.0

Hej,

Och tack för ditt svar. Anledning till VB 6.0 är att det är en stor applikation skriven i VB. Att skriva om den tar för mycket resurser i anspråk samt att den ska snarast möjligt ut på marknaden med flerspråksval.

Robert
Citera
2007-10-11, 20:00
  #4
Medlem
3 string-tabeller?

Hej,

Skapas inte en resursfil .rc enligt följande:

nameID keyword filename

exempelvis:

myPic JPG C:XXX

Var deklarerar jag tabellen du nämner?

//Robert
Citera
2007-10-13, 02:56
  #5
Medlem
nkwtms avatar
Nu var det år och dar sen jag använde VB6 sist, men jag vill minnas att du måste markera Add-in'en Resource Editor.

Googla lite på "VB6 resource string table" eller nåt sånt.

Annars är det iofs lite klumpigt i sig med resursfiler, du kanske skulle göra en liten implementation i stil med:

SetLanguage "sv"
Text1.text = GetLanguageText("test")

eller nåt sånt - resursfilerna tror jag går efter systeminställningar när det gäller språkval (men det kanske är det du är ute efter?)

OK för att det ska ut på marknaden osv, men ett tips är att det finns converters för VB6 -> VB.NET.

VB6 är end of life (du kan inte köpa nya licenser av det och du kan inte få support på det).

Men du kan ju köra på det för att få ut en version och gå över senare?
Citera
2007-10-13, 11:10
  #6
Medlem
Resource file och enum

Hej,

Har inte mycket val. Applicationen är skriven i VB 6.0 och det är det som gäller.Någon som har någon kommentar till fölande upplägg.

Först skapa en resourcefil per språk. Därefter sig av bygga upp ett bibliotek av enumeration (dessa är samtliga public) för tydlighet såsom nedan enkelt exempel:

Public Enum controlCaption

button = 101
Label = 102

End Enum

Public Enum msgBoxMessage

MSGBOXERROR = 1001
ANERROR = 1002

End Enum
osv...
För att sedan i koden ange (exempel):

myButton.Caption = LoadResString(button)
MyLabel.Caption = LoadResString(Label)
msgBox(LoadResString(ANERROR))
Citera
2007-10-13, 16:29
  #7
Medlem
Efter stavningskontroll

Hej,

Har inte mycket val. Applikationen är skriven i VB 6.0. Någon som har någon kommentar till följande upplägg.

Först skapa en resourcefil per språk. Därefter bygga upp en klass av enumerations, dessa är samtliga publika. Se nedan exempel:

Public Enum controlCaption

button = 101
Label = 102

End Enum

Public Enum msgBoxMessage

MSGBOXERROR = 1001
ANERROR = 1002

End Enum
osv...
För att sedan i koden ange (exempel):

myButton.Caption = LoadResString(button)
MyLabel.Caption = LoadResString(Label)
msgBox(LoadResString(ANERROR))
Citera
2007-10-13, 16:37
  #8
Medlem
nkwtms avatar
Du skapar inte en resourcefil per språk, utan en string-table per språk i en resourcefil.

Förstår inte riktigt ditt upplägg med enums,

varför inte göra konstanter för dom olika sakerna istället?

Const LANG_ANERROR = 1001
...

(Kommer inte riktigt ihåg syntaxen fullt ut i VB, men tror att ovanstående funkar)
Citera
2007-10-15, 21:18
  #9
Medlem
Enums

Enligt mig är det bättre att skapa en klass med enumerations, vilket ökar läsbarheten. Varför anända sig av konstanter när det är detta som enumerations är till för? Bättre skapa en enum av typen btn och sedan kunna skriva:

button_close.caption=LoadResString(btn.close)'btn. close fungerar motsvarar button_open.captoin=LoadResString(btn.open)'ett värde i resurstabellens index

Som det är nu har jag varje språk i en activeX komponent och använder mig av late binding för att dynamiskt kunna styra språket efter användarens val.


//Robert
Citera
2007-10-16, 20:01
  #10
Medlem
nkwtms avatar
OK, nu fattar jag ditt tänk med enumerations, och ja - det låter som ett bra sätt att göra det på.

Om jag skulle klanka ner på nåt så får det bli ActiveX-kontrollerna, bättre om du gör språkfiler som du laddar in i dina enums tycker jag...
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback