setLanguage: Change or get the language used in R and Tcl/Tk, strings...

View source: R/setLanguage.R

setLanguageR Documentation

Change or get the language used in R and Tcl/Tk, strings translation in Tcl

Description

The function changes dynamically the language used by both R (messages only) and Tcl/Tk, retrieves its current value, and manage string translation in Tcl.

Usage

setLanguage(lang)

getLanguage()

tclmclocale(lang)

tclmcset(lang, msg, translation)

tclmc(fmt, ..., domain = NULL)

Arguments

lang

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().

msg

A single character string with the message to translate.

translation

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.

fmt

A single character vector of format string.

...

Values to be passed into fmt for the substitution.

domain

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.

Value

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.

Note

You need the msgcat Tcl package to use this (but it is provided with all recent distributions of Tcl/Tk by default).

Author(s)

Philippe Grosjean

Examples

# What is the language used by Tcl?
tclmclocale()

# 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())
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
  ## Not run: 
    tkgetOpenFile()
  
## End(Not run)

  # Restore previous language
  setLanguage(oldlang)
}

tcltk2 documentation built on June 8, 2025, 1:04 p.m.