R: Translate Text Messages

gettext {base} | R Documentation

## Translate Text Messages

### Description

If Native Language Support was enabled in this build of R, attempt to translate character vectors or set where the translations are to be found.

### Usage

    gettext(..., domain = NULL)

    ngettext(n, msg1, msg2, domain = NULL)

    bindtextdomain(domain, dirname = NULL)

### Arguments

`...` | One or more character vectors.
`domain` | The ‘domain’ for the translation.
`n` | a non-negative integer.
`msg1` | the message to be used in English for `n = 1`.
`msg2` | the message to be used in English for `n = 0, 2, 3, ...`.
`dirname` | The directory in which to find translated message catalogs for the domain.

### Details

If `domain` is `NULL` or `""`, and `gettext` is called from a function in the namespace of package pkg the domain is set to `"R-pkg"`. Otherwise there is no default domain.

If a suitable domain is found, each character string is offered for translation, and replaced by its translation into the current language if one is found. The value (logical) `NA` suppresses any translation.

Conventionally the domain for R warning/error messages in package pkg is `"R-pkg"`, and that for C-level messages is `"pkg"`.

For `gettext`, leading and trailing whitespace is ignored when looking for the translation.

`ngettext` is used where the message needs to vary by a single integer. Translating such messages is subject to very specific rules for different languages: see the GNU Gettext Manual. The string will often contain a single instance of `%d` to be used in `sprintf`. If English is used, `msg1` is returned if `n == 1` and `msg2` in all other cases.

`bindtextdomain` is a wrapper for the C function of the same name: your system may have a `man` page for it. With a non-`NULL` `dirname` it specifies where to look for message catalogues: with `domain = NULL` it returns the current location.

### Value

For `gettext`, a character vector, one element per string in `...`. If translation is not enabled or no domain is found or no translation is found in that domain, the original strings are returned.

For `ngettext`, a character string.

For `bindtextdomain`, a character string giving the current base directory, or `NULL` if setting it failed.

### See Also

`stop` and `warning` make use of `gettext` to translate messages.

`xgettext` for extracting translatable strings from R source files.

### Examples

    bindtextdomain("R")  # non-null if and only if NLS is enabled

    for(n in 0:3)
        print(sprintf(ngettext(n, "%d variable has missing values",
                                  "%d variables have missing values"),
                      n))

    ## Not run:
    ## for translation, those strings should appear in R-pkg.pot as
    msgid        "%d variable has missing values"
    msgid_plural "%d variables have missing values"
    msgstr[0] ""
    msgstr[1] ""

    ## End(Not run)

    miss <- c("one", "or", "another")
    cat(ngettext(length(miss), "variable", "variables"),
        paste(sQuote(miss), collapse = ", "),
        ngettext(length(miss), "contains", "contain"), "missing values\n")

    ## better for translators would be to use
    cat(sprintf(ngettext(length(miss),
                         "variable %s contains missing values\n",
                         "variables %s contain missing values\n"),
                paste(sQuote(miss), collapse = ", ")))

[Package base version 3.1.2 Index]