Avatar billede peter_svendsen Nybegynder
08. marts 2005 - 10:44 Der er 17 kommentarer og
1 løsning

VBA: Oversættelse af MsgBox

Er ved at oversætte mine MsgBox, så de har variabelt sprog. Teksten ligger i en tabel, og hentes op vha. en funktion.

Den simple oversættelse, hvor der kun er tekst i msgbox'en ser sådan ud:
MsgBox (GetTextsMsgbox(Me.Name, 200))

Nogle af de lidt mere avancerede oversættelser løses med at gemme f.eks. msg("I dag er det: " & date()) i tabellen.
I VBA skrives noget i den her retning:
eval(GetTextsMsgbox(Me.Name, 200))
Denne løsning kan også bruges til henvisninger til felter i form osv.

Mit problem er:
Hvordan oversættes de msgbox der har msgbox settings som vbYesNo, vbCritical osv. Den ovenstående løsning virker ikke. Jeg vil helst undgå at opdele teksten i flere bidder, da ordstillingen i andre sprog kan være så anderledes at man gerne vil bytte rundt på rækkefølgen af de forskellige elementer.
08. marts 2005 - 10:49 #1
Mener du, at du f.eks. vil udskifte vbyesno med vbokcancel?
Avatar billede peter_svendsen Nybegynder
08. marts 2005 - 11:12 #2
Nej

Jeg vil kun oversætte sproget. f.eks. Dansk & Engelsk

Her er et kode eksempel:
If Msgbox("tekst" & variabel & " tekst" & [felt i min form] & "tekst", vbQuestion + vbYesNo) = vbYes Then
    'do something
End If

Problemet er:
Jeg vil gerne oversætte lave en samlet oversættelse, da ordstillingen i nogle sprog måske vil have form feltet før variablen for at have et normalt sprog.

Jeg har ikke læst noget om oversættelse i VBA, så det kan godt være jeg overser en nem og meget simpel løsning.
08. marts 2005 - 11:22 #3
hmm, jeg kan godt se problemet....har selv bakset med det tidligere, men endte med at vælge at splitte op, som du selv var inde på i indledningen.

Den skal der tænkes lidt over...men der er nok andre, som har et bud...!?
Avatar billede terry Ekspert
08. marts 2005 - 12:44 #4
If I understand the problem correctly then what you need is data in English and Danish (in the tables)! Access has no way of knowing what langauge the text field contains.

There are a couple of ways you can do this. One is to have two fields in the tables where you need to have text in Danish or English. Then you will need to select the text appropriate for the langaue in use.
Another way is to have records for Englsih and records for Danish. Then it will be necessary to have a field indicatin the which language you are using. Then all of your selects need to take this into account.
Avatar billede terry Ekspert
08. marts 2005 - 12:46 #5
Having records in Danish and n English would be used when for example you actually have different sets of data depending on the language. If the data is the same and only the texts need changing then the first method (two fields) would be best.
08. marts 2005 - 12:49 #6
Terry, som jeg forstår det, så er den del allerede på plads.
Problemet er at få felt-referencerne indlejret i teksterne.

tabellen skal kunne håndtere denne type tekst:

"tekst" & variabel & " tekst" & [felt i min form] & "tekst"
Avatar billede peter_svendsen Nybegynder
08. marts 2005 - 13:14 #7
Hi Terry

I allready have a table with multible languages and a function that handle it.

It allready work with the simple msgboxes where I only have to translate text.

I even figured out how to translate some complex msgboxes through the use of the eval function

I would have something like this in the table:
id: 200
form: mainform
Danish: msgbox("Datoen er " & date() & " i dag") 'can not remember if I used some trick with the " chars
English: msgbox("The date today is " & date())

In VBA that would be used like this:
Eval(GetTextsMsgbox(Me.Name, 200)), vbCritical


The problem is:
If you have a msgbox with return values the vbCritical or vbYesNo will have to be inside the parantheses of the messagebox thus putting it inside the table and for some reason the eval work fine with some functions, form pointers but it can not understand the msgbox settings.
Avatar billede terry Ekspert
08. marts 2005 - 14:11 #8
Hi Peter
I havent tried what you are doing but cant you use something like this?
Or even make a general function putting the message box together

If Msgbox(Eval(GetTextsMsgbox(Me.Name, 200)), vbYesNo) = vbYes Then ...
Avatar billede peter_svendsen Nybegynder
08. marts 2005 - 14:17 #9
Can remember trying something like that in an early state of my experiments. Can not remember what vent wrong and it might be woth it to test some more...
08. marts 2005 - 14:44 #10
Eller denne:

If Eval("MsgBox(""" & GetTextsMsgbox(Me.Name, 200) & """, " & Buttons & ", """ & Title & """)") = vbYes Then

Hvor Buttons kan være vbyesno og Title er overskriften
Avatar billede peter_svendsen Nybegynder
08. marts 2005 - 16:10 #11
Terry:
Eval virker ikke på en string. Det skal være en funktion.

Thomas:
I tabellen har jeg skrevet:
"The date today is " & date()

Messageboxen opfatter det hele som tekst... Nogen forslag til hvordan det kan komme til at virke?
Avatar billede terry Ekspert
08. marts 2005 - 17:57 #12
I'm still not sure why you need eval()

If Msgbox(GetTextsMsgbox(Me.Name, 200), vbYesNo) = vbYes Then ...
Avatar billede peter_svendsen Nybegynder
09. marts 2005 - 11:02 #13
There might be other solutions than eval but eval is the only way I have been able to get the messagebox to understand a variable value from the table as anything than text.



Example 1:
If Msgbox(GetTextsMsgbox(Me.Name, 200), vbYesNo) = vbYes Then ...

With this in my table:
"The date is " & date()

The messagebox will write the following:
The date is & date()



Example 2:
eval(GetTextsMsgbox(Me.Name, 200))

With this in my table:
msgbox("The date is " & date())

The messagebox will write the following:
The date is 09-03-2005


Note 1:
Example 2 works fine for everything but the cases where I need to transfer the vbYesNo or similiar to the table.

Note 2:
Eval can not be used from inside the messagebox because it need a function and the table will return text when it does not start with 'msgbox('

Note 3:
I have tried cheating the eval by creating fake functions as a middle part but that did not work either.
Avatar billede terry Ekspert
09. marts 2005 - 11:26 #14
I think I'm getting lost in all these examples :o)

Are you saying that this is what you have in a field in the databse

msgbox("The date is " & date())

WHY do you need
msgbox
in the table if this is waht is giving the problem?
Cant you have a function where ou get the text and then put this in

msgbox(.....
Avatar billede terry Ekspert
09. marts 2005 - 12:11 #15
constants such as vbYesNo and vbCritical have a numeric value, you could try using these instead of the text constant

you can find the value using the debug window (Ctrl+G)

?vbYesNo
09. marts 2005 - 12:12 #16
Jeg vil umiddelbart sige, at det IKKE kan lade sig gøre, da GetTextsMsgbox returnerer ren tekst. Så et udtryk som "The date is " & date() læses som:
"'The date is ' & date()"

Hvis I i stedet kunne skrive GetTextsMsgbox om, så det er den, som fortolker teksten og hvis I samtidig sætter en seperator ind i teksten (i tabellen), således at den kan adskille funktioner og udtryk og fortolke dem hver for sig:

Dvs at "The date is " & date() skulle gemmes som f.eks.:

The date is |date()
hvor | er valgt som seperator.

Derved kunne jeres GetTextsMsgbox gennemløbe hele teksten og behandle hver delstreng med Eval. Den simple måde, hvis man VED, at der kun er 2 dele:

GetTextsMsgbox = Eval(Left(Prompt, InStr(1, Prompt, "|") - 1)) & Eval(Mid(Prompt, InStr(1, Prompt, "|") + 1))

Det skal selvfølgelig gøres dynamisk hvilket kan gøres med f.eks. Split-kommandoen.
Avatar billede peter_svendsen Nybegynder
11. maj 2005 - 09:33 #17
Jeg har droppet at finde en løsning. Det er måske muligt, men vil ikke hænge sammen med problemets omfang.

Thomas skal dog alligevel have point for de mange gode bud på måder at løse det på.
11. maj 2005 - 16:58 #18
jamen tak så, selvom jeg da er ked af, at det ikke lykkedes :o(

Hils Robert :o)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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