[R-gui] tcltk internationalization for built-in buttons

Philippe Grosjean phgrosjean at sciviews.org
Tue Nov 11 14:36:53 CET 2008


Hello Ulrike,

I think that the reason why default buttons are not translated is
because they are managed by Windows. You have no control on their text.
Running on a Windows in English, you got those buttons in English,
Windows in German -> buttons in German, etc...
So, three options from there:

1) You just assume that the end-users want the GUI in the same language
as Windows,... or accept to have default buttons in Window's language if
they switch to another internationalisation,

2) Do the same as in R commander: rewrite the dialog boxes so that they
don't use default Windows buttons (almost impossible for file
open/close, dir choose, etc. dialog boxes)!

3) Use AutoIt or AutoHotKey to change the default buttons messages (with
lots of sweat, you can compile a satellite program to do so),... or with
even more time and effort, compile a C function in R that calls the
right API to change default buttons' messages in your dialog boxes.

Sorry that I cannot give you a better solution...

Oh yes, regarding translation of Tcl/Tk messages from within R, I really
believe that translating these messages using the R mechanism instead of
msgcat in Tcl is much better. That way, you centralize all translations
(R functions and GUI elements) in a single translation file. It is the
approach used by R Commander, by the way. So, you got inspiration from
there for your own code.
Best,

Philippe
..............................................<°}))><........
  ) ) ) ) )
( ( ( ( (    Prof. Philippe Grosjean
  ) ) ) ) )
( ( ( ( (    Numerical Ecology of Aquatic Systems
  ) ) ) ) )   Mons-Hainaut University, Belgium
( ( ( ( (
..............................................................

Ulrike Groemping wrote:
> Dear R-SIG-GUIs,
> 
> documentation of getLanguage / setLanguage in tcltk2 pointed me towards the
> msgcat package in Tcl/Tk, and I used it for internationalizing my GUI
> entries - trying to avoid having to write individual tools like
> RcmdrTkmessagebox etc. I am an absolute Tcl/Tk beginner and still looking
> for the final strategy to do a larger GUI project in, currently working on
> Windows with R 2.8.0 or R 2.7.1 (behave identical). And one important aspect
> is internationalization.
> 
> I have now managed to program my draft and not yet functional GUI in English
> and show it in German by using an msg file with msgcat. On my computer,
> everything shows well in German. Then I got the idea that it would be nice
> to show an msgcat example in the help for getLanguage/setLanguage, and I
> prepared a toy example for sending to Philippe (cf. below). However, while
> changing the language does change most messages, it does not work with
> built-in buttons - these remain German on my machine, even if I restart my
> computer after changing system settings for all language aspects I could
> find on my computer from German to English.
> 
> I remember having read something like that from John, when he started
> internationalizing Rcmdr, but I had thought it would be long solved by now.
> Since internationalization appears to work at installation time (otherwise
> my buttons wouldn't be in German), and since there are many tcltk message
> files in the Tcl directory, it looks to me - as a possibly rather naive
> tcltk novice - that one would just have to find a way to reset some
> environment variable or otherwise direct tcltk to look in the right places. 
> 
> Any thoughts on that ?
> 
> Regards, Ulrike
> 
> ####### the toy example follows
> require(tcltk)
> ### the following two lines must be executed BEFORE loading tcltk2
> ### otherwise they do not work !!!
> tcl("::msgcat::mcload","C:/testdirectory")
> ilab <- function(lab)
> tclvalue(tcl("namespace","eval","::tcl::minidummy","::msgcat::mc",.Tcl.args(lab)))
> 
> ## mini example of German tcl message file
> ## has to be saved under name de.msg 
> ## in the testdirectory given above
> ## without the comment character in lines below
> ## (it is important to avoid line breaks within individual mset entries)
> #namespace eval ::tcl::minidummy {
> #   ::msgcat::mcset de "If you choose Yes, all unsaved inputs will be lost."
> "Wenn Sie Ja wählen, gehen alle noch nicht gespeicherten Eingaben verloren."
> #    ::msgcat::mcset de "Really Exit WITHOUT Save ?" "Wirklich OHNE
> Speichern Beenden ?"
> #    ::msgcat::mcset de "Yes pressed" "Ja gedrückt"
> #    ::msgcat::mcset de "No pressed" "Nein gedrückt"
> #}
> 
> imsgboxtest <- function(){
> td <- tclvalue(tkmessageBox(message=ilab("If you choose Yes, all unsaved
> inputs will be lost."),
>              title=ilab("Really Exit WITHOUT Save
> ?"),type="yesno",default="yes",icon="question"))
>        if (td == "yes") cat(paste(ilab("Yes pressed"),"\n")) else
> cat(paste(ilab("No pressed"),"\n"))
> }
> imsgboxtest()
> 
> require(tcltk2)  ## ruins functionality of the load and function definition
> above
>                      ## if loaded too early!
> oldlang <- getLanguage()
> if (oldlang != "") {
>         # Switch to English and test a command that issues a warning
>         if (setLanguage("en_US")) imsgboxtest()
>         # Switch to French and test a command that issues a warning
>         if (setLanguage("fr_FR")) imsgboxtest()
>         # Switch to German and test a command that issues a warning
>         if (setLanguage("de_DE")) imsgboxtest()
>         # Restore previous language
>         setLanguage(oldlang) 
> }
> 


-- 
..............................................<°}))><........
  ) ) ) ) )
( ( ( ( (    Prof. Philippe Grosjean
  ) ) ) ) )
( ( ( ( (    Numerical Ecology of Aquatic Systems
  ) ) ) ) )   Mons-Hainaut University, Belgium
( ( ( ( (
..............................................................



More information about the R-SIG-GUI mailing list