【问题标题】:How locale is determined in R在 R 中如何确定语言环境
【发布时间】:2026-01-20 13:30:01
【问题描述】:

在日语语言环境中, 我将 env: LANGUAGE 设置为 'en_US' 以显示英文错误消息。 这对我来说很好。

> Sys.setenv(LANGUAGE = "en_US")
> Sys.
Error: object 'Sys.' not found

但是当我在更改 LANGUAGE 之前更改语言环境:LC_ALL 为 'en_US.UTF-8' 时, 错误消息不会改变并显示在默认语言环境中。

> Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8")
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=ja_JP.UTF-8;LC_PAPER=ja_JP.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.UTF-8;LC_IDENTIFICATION=C"
> Sys.
 エラー:  オブジェクト 'Sys.' がありません 
> Sys.setenv(LANGUAGE = "en_US")
> Sys.
 エラー:  オブジェクト 'Sys.' がありません 

我认为这是因为 LC_ALL 的优先级高于 LANGUAGE 并有一些副作用,但这是错误的。 当我在 LANGUAGE 后更改 LC_ALL 时,错误信息显示为英文。

> Sys.setenv(LANGUAGE = "en_US")
> Sys.
Error: object 'Sys.' not found
> Sys.setlocale(category = "LC_ALL", locale = "en_US.UTF-8")
[1] "LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=en_US.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=en_US.UTF-8;LC_MESSAGES=ja_JP.UTF-8;LC_PAPER=ja_JP.UTF-8;LC_NAME=C;LC_ADDRESS=C;LC_TELEPHONE=C;LC_MEASUREMENT=ja_JP.UTF-8;LC_IDENTIFICATION=C"
> Sys.
Error: object 'Sys.' not found

为什么 LC_ALL 会阻止 LANGUAGE 更改错误消息区域设置?

为什么更改 LC_ALL 和 LANGUAGE 的顺序会导致不同的结果?

默认环境:

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.4 LTS

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=ja_JP.UTF-8       LC_NUMERIC=C               LC_TIME=ja_JP.UTF-8       
 [4] LC_COLLATE=ja_JP.UTF-8     LC_MONETARY=ja_JP.UTF-8    LC_MESSAGES=ja_JP.UTF-8   
 [7] LC_PAPER=ja_JP.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4   


> RStudio.Version()$version
[1] ‘1.1.447’

【问题讨论】:

    标签: r locale


    【解决方案1】:

    我不确定您要达到的目标。但是,您应该注意,如帮助文件中所述:

    请注意,设置类别“LC_ALL”仅设置类别“LC_COLLATE”, “LC_CTYPE”、“LC_MONETARY”和“LC_TIME”

    所以LC_ALL 没有设置LC_MESSAGES,正如您上面的输出所示。

    后来:

    请注意,LANGUAGE 环境变量优先于 “LC_MESSAGES”在选择消息翻译的语言开启 大多数 R 平台

    了解更多:?Sys.setlocale()

    【讨论】: