当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R locales 查询或设置区域设置的各个方面


R语言 locales 位于 base 包(package)。

说明

获取区域设置的详细信息或设置区域设置的各个方面R过程。

用法

Sys.getlocale (category = "LC_ALL")
Sys.setlocale (category = "LC_ALL", locale = "")
.LC.categories

参数

category

字符串。应始终支持以下类别: "LC_ALL""LC_COLLATE""LC_CTYPE""LC_MONETARY""LC_NUMERIC""LC_TIME" 。某些系统(非 Windows)还将支持 "LC_MESSAGES""LC_PAPER""LC_MEASUREMENT" 。这些类别名称可在 .LC.categories 中找到;即使不支持, Sys.getlocale(.) 也会返回 "" ,例如,对于 Windows 上的 "LC_PAPER" 示例。

locale

字符串。正在使用的系统上的有效区域设置名称。通常""(默认)将选择系统的默认区域设置。

细节

语言环境说明了程序国际化的各个方面。最初,语言环境的大部分方面R被设置为"C"(这是 C 语言的默认设置,反映了 North-American 用法 - 也称为"POSIX")。R"LC_CTYPE""LC_COLLATE",它允许使用不同的字符集和该字符集中的字母比较(包括使用sort),"LC_MONETARY"(供使用Sys.localeconv) 和"LC_TIME"可能会影响行为as.POSIXltstrptime以及使用它们的函数(但不是date)。

这里说明的前七个类别是 POSIX 指定的类别。"LC_MESSAGES"将会"C"在不支持消息翻译的系统上,并且在 Windows 上不受支持,您可以在其中必须使用LANGUAGE消息翻译的环境变量,见下文Sys.setLanguage()公用事业。尝试使用不受支持的类别是一个错误Sys.setlocale.

请注意,设置类别 "LC_ALL" 仅设置类别 "LC_COLLATE""LC_CTYPE""LC_MONETARY""LC_TIME"

设置无效区域设置的尝试将被忽略。可能有也可能没有警告,具体取决于操作系统。

在会话期间尝试更改字符集(通过 Sys.setlocale("LC_CTYPE", ) ,如果这意味着不同的字符集)可能不起作用,并且可能会导致一些混乱。

请注意,LANGUAGE环境变量优先于"LC_MESSAGES"在大多数情况下选择消息翻译语言R平台。

在使用 ICU 进行排序规则的平台上,可以通过 icuSetCollate 重置用于排序规则的区域设置。除 Windows 外,初始设置取自 "LC_COLLATE" 类别,并且当通过调用 Sys.setlocale 更改该类别时,该设置将被重置。

长度为 1 的字符串,说明正在使用的区域设置(在设置 Sys.setlocale 之后),如果当前区域设置无效,则为空字符串;如果区域设置信息不可用,则为 NULL

对于 category = "LC_ALL",字符串的详细信息是特定于系统的:它可能是单个区域设置名称或由 "/" (macOS) 或 ";"(Windows、Linux)分隔的一组区域设置名称。为了可移植性,最好单独查询类别:foo <- Sys.getlocale() 的结果不一定可以在 Sys.setlocale("LC_ALL", locale = foo) 中使用。

可用区域设置

在大多数 Unix 类似系统上,POSIX shell 命令 locale -a 将列出“可用的公共”区域设置。这意味着依赖于平台。在最近的 Linuxen 上,这可能意味着“可以安装”,因为在某些基于 RPM 的系统上,区域设置数据位于单独的 RPM 中。在 Debian/Ubuntu 上,可用区域设置集由特定于操作系统的工具管理,例如 locale-genlocale -a 列出当前启用的区域设置。

对于 Windows,Microsoft 经常移动其文档,因此 Web 搜索是查找当前信息的最佳方式。从R4.2、应使用UCRT语言环境名称。字符集应与系统/ANSI 代码页匹配(l10n_info()$codepagel10n_info()$system.codepage)。将其设置为任何其他值都会导致警告并可能导致编码问题。来自R4.2 在最新的 Windows 上,系统代码页为 65001,并且应始终使用以以下结尾的区域设置名称".UTF-8"(除了"C"""),否则 Windows 可能会添加不同的字符集。

警告

环境"LC_NUMERIC"为除"C"可能会导致R函数异常,因此发出警告。输入转换为R本身不受影响,但ASCII的读写save文件将如此,也可能有自己的输入/输出的包。

在类似 Unix 的系统上临时设置它以生成图形或文本输出可能效果很好,但 options(OutDec) 通常更可取。

几乎所有的输出例程都使用RWindows下本身忽略设置"LC_NUMERIC"因为他们使用的是非国际化的 Trio 库。

注意

更改区域设置类别的值,同时R正在运行应该被操作系统服务注意到,并且通常是,但已经看到异常(通常在整理服务中)。

请勿使用以下值Sys.getlocale("LC_CTYPE")尝试查找字符集 - 例如 UTF-8 语言环境可以有后缀“⁠.UTF-8⁠' 或者 '⁠.utf8⁠’(在 Linux 上比‘更常见⁠UTF-8⁠’) 或无(如在 macOS 上),Latin-9 语言环境可以有后缀 ‘⁠ISO8859-15⁠', '⁠iso885915⁠', '⁠iso885915@euro⁠' 或者 '⁠ISO8859-15@euro⁠’。使用l10n_info反而。

例子

Sys.getlocale()

## Date-time  related :
Sys.getlocale("LC_TIME") -> olcT
then <- as.POSIXlt("2001-01-01 01:01:01", tz = "UTC+1")
## Not run: 
c(m = months(then), wd = weekdays(then)) # locale specific
Sys.setlocale("LC_TIME", "de")     # Solaris: details are OS-dependent
Sys.setlocale("LC_TIME", "de_DE")  # Many Unix-alikes
Sys.setlocale("LC_TIME", "de_DE.UTF-8")  # Linux, macOS, other Unix-alikes
Sys.setlocale("LC_TIME", "de_DE.utf8")   # some Linux versions
Sys.setlocale("LC_TIME", "German.UTF-8") # Windows
Sys.getlocale("LC_TIME") # the last one successfully set above
c(m = months(then), wd = weekdays(then)) # in C_TIME locale 'cT' ; typically German

## End(Not run)
Sys.setlocale("LC_TIME", "C")
c(m = months(then), wd = weekdays(then)) # "standard" (still platform specific ?)
Sys.setlocale("LC_TIME", olcT)           # reset to previous

## Other locales
Sys.getlocale("LC_PAPER")          # may or may not be set
.LC.categories # of length 9 on all platforms

## Not run: Sys.setlocale("LC_COLLATE", "C")   # turn off locale-specific sorting,
                                   # usually (but not on all platforms)
Sys.setenv("LANGUAGE" = "es") # set the language for error/warning messages

## End(Not run)
## some nice formatting; should work on most platforms:
 sys <- Sys.info()[["sysname"]]
 sep <- switch(sys,
               "Darwin"=, "SunOS" = "/",
               "Linux" =, "Windows" = ";")
 ##' show a "full" Sys.getlocale() nicely:
 showL <- function(loc) {
     sl <- strsplit(strsplit(loc, sep)[[1L]], "=")
     setNames(sapply(sl, `[[`, 2L), sapply(sl, `[[`, 1L))
 }
 print.Dlist(lloc <- showL(Sys.getlocale()))
 ## R-supported ones (but LC_ALL):
 lloc[.LC.categories[-1]]

也可以看看

strptime 用于 category = "LC_TIME" 的使用。 Sys.localeconv 了解数字和货币表示的详细信息。

l10n_info 提供了有关区域设置及其编码(包括是否为 UTF-8)的一些摘要事实。

“R 安装和管理”手册,了解语言环境背景以及如何查找系统上的语言环境名称。

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Query or Set Aspects of the Locale。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。