Skip to content

restoring LANGUAGE env variable within an R session

6 messages · Dirk Eddelbuettel, Eric Berger, Sebastian Meyer +1 more

#
I was playing around with the setting of the LANGUAGE variable and am 
wondering whether I'm missing something obvious about resetting the 
value to its original state once it's been set.  I seem to be able to 
reset the language for warnings/errors once, but not to change it a 
second time (or reset it) once it's been set ... ??

## default (no LANGUAGE set, English locale)
 > sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
## no complaints, doesn't change (as expected)
 > Sys.setenv(LANGUAGE = "en")
 > sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced

## change to German
 > Sys.setenv(LANGUAGE = "de")
 > sqrt(-1)
[1] NaN
Warnmeldung:
In sqrt(-1) : NaNs wurden erzeugt

## try to change to Spanish - no luck
## (this does work in a clean session)

 > Sys.setenv(LANGUAGE = "es")
 > sqrt(-1)
[1] NaN
Warnmeldung:
In sqrt(-1) : NaNs wurden erzeugt

## try resetting to blank
 > Sys.setenv(LANGUAGE = "")
 > sqrt(-1)
[1] NaN
Warnmeldung:
In sqrt(-1) : NaNs wurden erzeugt

## or back to English explicitly?
 > Sys.setenv(LANGUAGE = "en")
 > sqrt(-1)
[1] NaN
Warnmeldung:
In sqrt(-1) : NaNs wurden erzeugt
 >
#
Ben,

POSIX level / glibc level variables are set at process start and AGAIK cannot
really be altered after start.  They clearly work when set _before_ calling sqrt(-1):

    $ LANGUAGE=es Rscript -e 'sqrt(-1)'
    [1] NaN
    Warning message:
    In sqrt(-1) : Se han producido NaNs
    $ LANGUAGE=de Rscript -e 'sqrt(-1)'
    [1] NaN
    Warnmeldung:
    In sqrt(-1) : NaNs wurden erzeugt
    $ 

I think the `callr` package can help you with this use from with R by
effectively spawning a new process for you. Or, lower-level, you can call
`system()` or `system2()` yourself and take care of the setup.

Cheers, Dirk
#
There is also some inconsistency.
Even though sqrt(-1) returns the warning/error about NaNs in German
after setting the language to Spanish, if you give the command
it will respond in Spanish.
On Mon, Jun 26, 2023 at 4:39?PM Dirk Eddelbuettel <edd at debian.org> wrote:
#
That's reasonable, but I'm wondering why it works the *first* time 
it's called in a session. Is this just undefined behaviour (so I 
shouldn't be surprised whatever happens)?  Again,

$ Rscript -e 'sqrt(-1); Sys.setenv(LANGUAGE="es"); sqrt(-1)'
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
[1] NaN
Warning message:
In sqrt(-1) : Se han producido NaNs

   I should clarify that this really isn't that important for my 
workflow, it just seemed like an odd loose end.

Weirdly, I just discovered that Sys.setLanguage().  Don't know how it 
differs, but there's a bindtextdomain(NULL) call  there which may be the 
magic sauce ... ???

  sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
 > Sys.setLanguage("de")
 > sqrt(-1)
[1] NaN
Warnmeldung:
In sqrt(-1) : NaNs wurden erzeugt
 > Sys.setLanguage("en")
 > sqrt(-1)
[1] NaN
Warning message:
In sqrt(-1) : NaNs produced
On 2023-06-26 9:38 a.m., Dirk Eddelbuettel wrote:

  
    
#
Translated strings are cached.
I'd recommend to use the

     ? New partly experimental Sys.setLanguage() utility, solving the
       main problem of PR#18055.

introduced in R 4.2.0.

Best,

	Sebastian Meyer


Am 26.06.23 um 15:15 schrieb Ben Bolker:
#
Thanks, this is exactly PR#18055. Should have looked (but assumed I 
was probably just overlooking something ...)
On 2023-06-26 10:02 a.m., Sebastian Meyer wrote: