當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。