08. marts 2005 - 10:44Der 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.
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.
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.
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.
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.
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...
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.
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:
jamen tak så, selvom jeg da er ked af, at det ikke lykkedes :o(
Hils Robert :o)
Synes godt om
Ny brugerNybegynder
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.