dbTalk Databases Forums  

multilingual application

comp.databases.ms-access comp.databases.ms-access


Discuss multilingual application in the comp.databases.ms-access forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Michiel Rapati-Kekkonen
 
Posts: n/a

Default multilingual application - 12-12-2009 , 11:02 AM






Hi,

Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field next
to it.

But
many of the Messages are a combination of text with variables.
e.g.
MsgBox "De " & strNum & " de beste, die " & myrsB("strDing") & " vindt,
krijgt een " & myrsV("strPresent"), vbInformation, "Zondagse opgave"

Is there a way to store such messages
so that the variables will work again locally, when MsgBox reads the message
(or the translation) from a table?
(To store only the text parts and let the variables in loco will not always
produce natural results, since every language has it's own preferences for
word order.)

Asking for miracles, it feels.
Or?

Michiel
Access 2007

Reply With Quote
  #2  
Old   
hbinc
 
Posts: n/a

Default Re: multilingual application - 12-12-2009 , 01:27 PM






On Dec 12, 6:02*pm, "Michiel Rapati-Kekkonen" <no-m... (AT) nonsense (DOT) zz>
wrote:
Quote:
Hi,

Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field next
to it.

But
many of the Messages are a combination of text with variables.
e.g.
MsgBox "De " & strNum & " de beste, die " & myrsB("strDing") & " vindt,
krijgt een " & myrsV("strPresent"), vbInformation, "Zondagse opgave"

Is there a way to store such messages
so that the variables will work again locally, when MsgBox reads the message
(or the translation) from a table?
(To store only the text parts and let the variables in loco will not always
produce natural results, since every language has it's own preferences for
word order.)

Asking for miracles, it feels.
Or?

Michiel
Access 2007
Hi Michiel,

The way I solved this kind of problems a couple of times is by
defining the message string as

"De [strNum] de beste, die [strDing] vindt, krijgt een [strPresent]"),
vbInformation, "Zondagse opgave"

and just before calling the MsgBox substitute the [...]-values by the
current values.


HBInc.

Reply With Quote
  #3  
Old   
Tony Toews [MVP]
 
Posts: n/a

Default Re: multilingual application - 12-12-2009 , 02:25 PM



"Michiel Rapati-Kekkonen" <no-mail (AT) nonsense (DOT) zz> wrote:

Quote:
Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field next
to it.
HBinc has given you a good answer for your exact question.

Other resources include
Microsoft Access Multilingual/Localization Solutions
http://www.granite.ab.ca/access/multilingual.htm

A discusson on this topic I started a while back.
http://groups.google.ca/group/comp.d...6cf8538175f20d

Now a key performance tip is to arrange and read the data from the table/query in to
fill your form report controls with one index read. That is if you have 30 controls
and labels on your form don't do 30 different recordset index "seeks' into the
table/query. Intsead arrange your data so that you do one index "seek" and then read
all the thirty records belonging to your 30 controls one after the other. Now these
don't have to be alphabetical sequence or anything like that. After all it's very
fast changing the control and label caption. But it's relatively slow reading the
data from the tables for each form and report open.

Also you might want to ship your product with the translation tables in a separate
MDB/MDE linked from the FE. This way you can easily update any typos without
reshipping your main program. Also, down the road, it becomes easier to add new
languages and ship just the language MDB.

For performance reasons you probably want that located along side the users FE rather
than being on the server share.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages - http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog - http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
updated see http://www.autofeupdater.com/
Granite Fleet Manager http://www.granitefleet.com/

Reply With Quote
  #4  
Old   
Michiel Rapati-Kekkonen
 
Posts: n/a

Default Re: multilingual application - 12-13-2009 , 06:14 AM



Clever you!
To me it felt like SF: freezing a body to warm it back to life at a later
time.
Maybe you could attend to that problem, too?

Thanks,

Michiel


"hbinc" <j.van.gils (AT) hccnet (DOT) nl> wrote

On Dec 12, 6:02 pm, "Michiel Rapati-Kekkonen" <no-m... (AT) nonsense (DOT) zz>
wrote:
Quote:
Hi,

Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and
distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field
next
to it.

But
many of the Messages are a combination of text with variables.
e.g.
MsgBox "De " & strNum & " de beste, die " & myrsB("strDing") & " vindt,
krijgt een " & myrsV("strPresent"), vbInformation, "Zondagse opgave"

Is there a way to store such messages
so that the variables will work again locally, when MsgBox reads the
message
(or the translation) from a table?
(To store only the text parts and let the variables in loco will not
always
produce natural results, since every language has it's own preferences for
word order.)

Asking for miracles, it feels.
Or?

Michiel
Access 2007
Hi Michiel,

The way I solved this kind of problems a couple of times is by
defining the message string as

"De [strNum] de beste, die [strDing] vindt, krijgt een [strPresent]"),
vbInformation, "Zondagse opgave"

and just before calling the MsgBox substitute the [...]-values by the
current values.


HBInc.

Reply With Quote
  #5  
Old   
Michiel Rapati-Kekkonen
 
Posts: n/a

Default Re: multilingual application - 12-13-2009 , 06:21 AM



Thank you, Tony,

I certainly will take your very sound performance tips to heart.
but typos? me?

Michiel

(btw the first two links plus the fourth on your granite-multilingual page
don't seem to work)



"Tony Toews [MVP]" <ttoews (AT) telusplanet (DOT) net> wrote

Quote:
"Michiel Rapati-Kekkonen" <no-mail (AT) nonsense (DOT) zz> wrote:

Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and
distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field
next
to it.

HBinc has given you a good answer for your exact question.

Other resources include
Microsoft Access Multilingual/Localization Solutions
http://www.granite.ab.ca/access/multilingual.htm

A discusson on this topic I started a while back.
http://groups.google.ca/group/comp.d...6cf8538175f20d

Now a key performance tip is to arrange and read the data from the
table/query in to
fill your form report controls with one index read. That is if you have
30 controls
and labels on your form don't do 30 different recordset index "seeks'
into the
table/query. Intsead arrange your data so that you do one index "seek"
and then read
all the thirty records belonging to your 30 controls one after the other.
Now these
don't have to be alphabetical sequence or anything like that. After all
it's very
fast changing the control and label caption. But it's relatively slow
reading the
data from the tables for each form and report open.

Also you might want to ship your product with the translation tables in a
separate
MDB/MDE linked from the FE. This way you can easily update any typos
without
reshipping your main program. Also, down the road, it becomes easier to
add new
languages and ship just the language MDB.

For performance reasons you probably want that located along side the
users FE rather
than being on the server share.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages - http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog - http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
updated see http://www.autofeupdater.com/
Granite Fleet Manager http://www.granitefleet.com/

Reply With Quote
  #6  
Old   
hbinc
 
Posts: n/a

Default Re: multilingual application - 12-13-2009 , 11:02 AM



On Dec 13, 1:14*pm, "Michiel Rapati-Kekkonen" <no-m... (AT) nonsense (DOT) zz>
wrote:
Quote:
Clever you!
To me it felt like SF: freezing a body to warm it back to life at a later
time.
Maybe you could attend to that problem, too?

Thanks,

Michiel

"hbinc" <j.van.g... (AT) hccnet (DOT) nl> wrote in message

news:1218c2e2-9278-4fad-a027-33dbeb3f09f1 (AT) m3g2000yqf (DOT) googlegroups.com...
On Dec 12, 6:02 pm, "Michiel Rapati-Kekkonen" <no-m... (AT) nonsense (DOT) zz
wrote:





Hi,

Someone from abroad might be interested in my application. Ha, new
perspectives.
The user interface's language, now, is Dutch.
I want to translate all that is Dutch into English.
I made a routine that is able to collect all MsgBoxes in my code and
distill
the Prompt part, Title part, whatever.
So I could store them in a table. And put the translation in the field
next
to it.

But
many of the Messages are a combination of text with variables.
e.g.
MsgBox "De " & strNum & " de beste, die " & myrsB("strDing") & " vindt,
krijgt een " & myrsV("strPresent"), vbInformation, "Zondagse opgave"

Is there a way to store such messages
so that the variables will work again locally, when MsgBox reads the
message
(or the translation) from a table?
(To store only the text parts and let the variables in loco will not
always
produce natural results, since every language has it's own preferences for
word order.)

Asking for miracles, it feels.
Or?

Michiel
Access 2007

Hi Michiel,

The way I solved this kind of problems a couple of times is by
defining the message string as

"De [strNum] de beste, die [strDing] vindt, krijgt een [strPresent]"),
vbInformation, "Zondagse opgave"

and just before calling the MsgBox substitute the [...]-values by the
current values.

HBInc.- Hide quoted text -

- Show quoted text -
Hi Michael,

Can you explain a little more on what you mean with your sentence:

"Maybe you could attend to that problem, too? "

HBInc.

Reply With Quote
  #7  
Old   
Tony Toews [MVP]
 
Posts: n/a

Default Re: multilingual application - 12-14-2009 , 01:29 AM



"Michiel Rapati-Kekkonen" <no-mail (AT) nonsense (DOT) zz> wrote:

Quote:
I certainly will take your very sound performance tips to heart.
but typos? me?
Your tongue better be so far in your cheek it hurts. <smile>

Quote:
(btw the first two links plus the fourth on your granite-multilingual page
don't seem to work)
Hmm, I thought I checked.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages - http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog - http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
updated see http://www.autofeupdater.com/
Granite Fleet Manager http://www.granitefleet.com/

Reply With Quote
  #8  
Old   
Tony Toews [MVP]
 
Posts: n/a

Default Re: multilingual application - 12-14-2009 , 01:38 AM



"Tony Toews [MVP]" <ttoews (AT) telusplanet (DOT) net> wrote:

Quote:
Now a key performance tip is to arrange and read the data from the table/query in to
fill your form report controls with one index read. That is if you have 30 controls
and labels on your form don't do 30 different recordset index "seeks' into the
table/query. Intsead arrange your data so that you do one index "seek" and then read
all the thirty records belonging to your 30 controls one after the other. Now these
don't have to be alphabetical sequence or anything like that. After all it's very
fast changing the control and label caption. But it's relatively slow reading the
data from the tables for each form and report open.
Just to follow up on this one. You might want to go so far as to have a normalized
table with all the unique label text once. For example "Customer". Have the
translation table for that label.

Now you programmatically read all the forms and reports willing in tables with all
the occurances of the various strings. So you probably have at least three tables.
Form/Report name, caption table and junction table with foreign keys pointing to the
two just mentioned table.

(There's also a message table too but we'll ignore that for now.)

To get the maximum performance when opening a complex form with lots of controls you
might want to create a totally denormalized, indexed table from the above three
tables. And do form/report lookups on that single table.

Maybe. Try it on a slow system and see what you think.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages - http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog - http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
updated see http://www.autofeupdater.com/
Granite Fleet Manager http://www.granitefleet.com/

Reply With Quote
  #9  
Old   
Roger
 
Posts: n/a

Default Re: multilingual application - 12-14-2009 , 06:52 AM



On Dec 14, 12:38*am, "Tony Toews [MVP]" <tto... (AT) telusplanet (DOT) net>
wrote:
Quote:
"Tony Toews [MVP]" <tto... (AT) telusplanet (DOT) net> wrote:

Now a key performance tip is to arrange and read the data from the table/query in to
fill your form report controls with one index read. *That is if you have 30 controls
and labels *on your form don't do 30 different recordset index "seeks'into the
table/query. *Intsead arrange your data so that you do one index "seek" and then read
all the thirty records belonging to your 30 controls one after the other.. *Now these
don't have to be alphabetical sequence or anything like that. *After all it's very
fast changing the control and label caption. * But it's relatively slow reading the
data from the tables for each form and report open.

Just to follow up on this one. *You might want to go so far as to have a normalized
table with all the unique label text once. *For example "Customer". *Have the
translation table for that label. *

Now you programmatically read all the forms and reports willing in tableswith all
the occurances of the various strings. *So you probably have at least three tables.
Form/Report name, caption table and junction table with foreign keys pointing to the
two just mentioned table.

(There's also a message table too but we'll ignore that for now.)

To get the maximum performance when opening a complex form with lots of controls you
might want to create a totally denormalized, indexed table from the abovethree
tables. *And do form/report lookups on that single table. * *

Maybe. * Try it on a slow system and see what you think.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages -http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog -http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
* updated seehttp://www.autofeupdater.com/
Granite Fleet Managerhttp://www.granitefleet.com/

Reply With Quote
  #10  
Old   
Roger
 
Posts: n/a

Default Re: multilingual application - 12-14-2009 , 06:53 AM



On Dec 14, 12:38*am, "Tony Toews [MVP]" <tto... (AT) telusplanet (DOT) net>
wrote:
Quote:
"Tony Toews [MVP]" <tto... (AT) telusplanet (DOT) net> wrote:

Now a key performance tip is to arrange and read the data from the table/query in to
fill your form report controls with one index read. *That is if you have 30 controls
and labels *on your form don't do 30 different recordset index "seeks'into the
table/query. *Intsead arrange your data so that you do one index "seek" and then read
all the thirty records belonging to your 30 controls one after the other.. *Now these
don't have to be alphabetical sequence or anything like that. *After all it's very
fast changing the control and label caption. * But it's relatively slow reading the
data from the tables for each form and report open.

Just to follow up on this one. *You might want to go so far as to have a normalized
table with all the unique label text once. *For example "Customer". *Have the
translation table for that label. *

Now you programmatically read all the forms and reports willing in tableswith all
the occurances of the various strings. *So you probably have at least three tables.
Form/Report name, caption table and junction table with foreign keys pointing to the
two just mentioned table.

(There's also a message table too but we'll ignore that for now.)

To get the maximum performance when opening a complex form with lots of controls you
might want to create a totally denormalized, indexed table from the abovethree
tables. *And do form/report lookups on that single table. * *

Maybe. * Try it on a slow system and see what you think.

Tony
--
Tony Toews, Microsoft Access MVP
Tony's Main MS Access pages -http://www.granite.ab.ca/accsmstr.htm
Tony's Microsoft Access Blog -http://msmvps.com/blogs/access/
For a convenient utility to keep your users FEs and other files
* updated seehttp://www.autofeupdater.com/
Granite Fleet Managerhttp://www.granitefleet.com/
or you could set up the tables as outlined by Tony
and do the processing once, per language, creating one FE per language
so that users don't have to pay a performance penalty while you
translate the application

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.