
R/setLanguage.R
setLanguage.RdThe function changes dynamically the language used by both R (messages only) and Tcl/Tk, retrieves its current value, and manage string translation in Tcl.
setLanguage(lang)
getLanguage()
tclmclocale(lang)
tclmcset(lang, msg, translation)
tclmc(fmt, ..., domain = NULL)An identification for the targeted language, for instance, \"en\"
for English, \"en_US\" for american English, \"fr\" for French, \"de\" for
German, \"it\" for Italian, etc. Facultative argument for tclmclocale().
A single character string with the message to translate.
The corresponding version in lang. Substitutions markers
like \
base::gettextf()). These translations are added in the Tcl catalog in the
main domain, i.e., you don't need to give a domain name with tclmc() to
retrieve the translation.
A single character vector of format string.
Values to be passed into fmt for the substitution.
The 'domain", i;e., Tcl namespace where the translation is
defined. Use NULL (the default) or "" for the main domain where
translations using tclmcset() are stored.
setLanguage() returns TRUE if language was successfully changed in
Tcl/Tk, FALSE otherwise. getLanguage() returns a string with current
language in use for R, or an empty string if it cannot determinate which is
the language currently used, and a tcl.language attribute with the
different catalogs that are used in priority order (ending with "" for no
translation, i.e., Tcl translations do not return an error, but the initial
string if the item is not found in the catalog).
tclmclocale() allows to change and get language for Tcl only, without
changing anything for R.
The two functions tclmcset() and tclmc() allow to record and retrieve the
translation of strings in the main R domain. Moreover, tclmc() also allows
to retrieve translations of Tcl strings in other Tcl namespaces (a.k.a.,
domains), see the examples.
You need the msgcat Tcl package to use this (but it is provided with all recent distributions of Tcl/Tk by default).
# What is the language used by Tcl?
tclmclocale()
#> [1] "c"
# Define a simple translation in French and German
tclmcset("de", "Yes", "Ja")
tclmcset("fr", "Yes", "Oui")
# Determine which language is currently in use in R
(oldlang <- getLanguage())
#> [1] "en-US"
#> attr(,"tcl.language")
#> [1] "c" ""
if (oldlang != "") {
# Switch to English; test a command that issues a warning and a Tcl string
setLanguage("en_US")
1:3 + 1:2
tclmc("Yes")
# Switch to German and test
setLanguage("de")
1:3 + 1:2
tclmc("Yes")
# Switch to Belgian French and test
setLanguage("fr_BE")
1:3 + 1:2
tclmc("Yes")
# A more complex trnaslation message with a substitution
tclmcset("fr", "Directory contains %d files",
"Le repertoire contient %d fichiers")
tclmc("Directory contains %d files", 9)
# or from a R/Tcl variable...
nfiles <- tclVar(12)
tclmc("Directory contains %d files", tclvalue(nfiles))
# Retrieve a translation defined in the "tk" domain
tclmc("Replace existing file?", domain = "tk")
# Tcl dialog boxes are translated according to the current language
if (FALSE) { # \dontrun{
tkgetOpenFile()
} # }
# Restore previous language
setLanguage(oldlang)
}
#> Warning: longer object length is not a multiple of shorter object length
#> Warning: longer object length is not a multiple of shorter object length
#> Warning: longer object length is not a multiple of shorter object length
#> [1] TRUE