识别R中的实际消息语言设置
我试图确定R中的语言设置(消息等呈现的语言) 最初的情况如下:识别R中的实际消息语言设置,r,R,我试图确定R中的语言设置(消息等呈现的语言) 最初的情况如下: 我使用的是Windows,因此,Sys.getlocale(category=“LC\u MESSAGES”)不可用 在R控制台(标准编辑器)中,所有消息均为德语;但是,Sys.getenv(“语言”)=” 在R Studio中,所有消息均为英语Sys.getenv(“语言”)=“” 我想做的是:识别实际的R消息语言,即呈现给用户的消息语言(R控制台中为德语,RStudio中为英语),并且独立于所使用的操作系统。 这意味着,理想
- 我使用的是Windows,因此,
不可用Sys.getlocale(category=“LC\u MESSAGES”)
- 在R控制台(标准编辑器)中,所有消息均为德语;但是,
Sys.getenv(“语言”)=”
- 在R Studio中,所有消息均为英语<代码>Sys.getenv(“语言”)=“”
Sys.getlocale()
(例如“de_de.UTF-8”)的字符串
有什么想法吗?非常感谢 我终于想出了一个解决办法。我生成错误并分析错误消息以识别语言 为此,我首先使用以下函数检查错误消息的所有可能语言版本,该函数返回一个带有ISO国家代码的数据帧(我从Wikipedia获取)和相应语言的错误消息:
createmessages <- function() {
countries <- c("AF","EG","AX","AL","DZ","AS","VI","AD","AO","AI","AQ","AG","GQ","AR","AM","AW","AC","AZ","ET","AU","BS","BH","BD","BB","BY","BE","BZ","BJ","BM","BT","BO","BQ","BA","BW","BV","BR","VG","IO","BN","BG","BF","BU","BI","EA","CL","CN","CP","CK","CR","CI","CW","DK","DD","DE","DG","DM","DO","DJ","EC","SV","ER","EE","CE","EU","FK","FO","FJ","FI","FR","FX","GF","PF","TF","GA","GM","GE","GH","GI","GD","GR","GL","GP","GU","GT","GG","GN","GW","GY","HT","HM","HN","HK","IN","ID","IM","IQ","IR","IE","IS","IL","IT","JM","JP","YE","JE","JO","YU","KY","KH","CM","CA","IC","CV","KZ","QA","KE","KG","KI","CC","CO","KM","CD","CG","KP","KR","XK","HR","CU","KW","LA","LS","LV","LB","LR","LY","LI","LT","LU","MO","MG","MW","MY","MV","ML","MT","MA","MH","MQ","MR","MU","YT","MK","MX","FM","MD","MC","MN","ME","MS","MZ","MM","NA","NR","NP","NC","NZ","NT","NI","NL","AN","NE","NG","NU","MP","NF","NO","OM","AT","TL","PK","PS","PW","PA","PG","PY","PE","PH","PN","PL","PT","PR","RE","RW","RO","RU","SB","BL","MF","ZM","WS","SM","ST","SA","SE","CH","SN","RS","CS","SC","SL","ZW","SG","SX","SK","SI","SO","ES","LK","SH","KN","LC","PM","VC","ZA","SD","GS","SS","SR","SJ","SZ","SY","TJ","TW","TZ","TH","TG","TK","TO","TT","TA","TD","CZ","CS","TN","TR","TM","TC","TV","SU","UG","UA","HU","UM","UY","UZ","VU","VA","VE","AE","US","UK","VN","WF","CX","EH","ZR","CF","CY")
e <- c()
for(i in 1:length(countries))
{
Sys.setenv("LANGUAGE"=countries[i])
res <- tryCatch( { xhajakjkula/1 }, error = function(err) { return(err) })
e[i] <- res$message
}
Sys.setenv("LANGUAGE"="DE")
return(data.frame(countries,e))
}
createmessages请重试Sys.setenv(“语言”=“EN”)
,然后再重试Sys.getenv(“语言”)
。@jaySf:问题是,我想找出当前的语言是什么,而不是设置它。因此,我得到了Sys.getenv(“LANGUAGE”)=”
,这在RStudio中表示“英语”,在R控制台中表示“德语”。我想知道是否有办法找出当前使用的实际消息语言。实际上,您得到的是”
,并且每个Rstudio和R都以某种方式使用其默认值,尤其是在某些地方。这是一个好方法!请注意:我已经在Ubuntu14.04上用R3.4.4测试了你的createmessages
函数,但它总是使用在R启动时设置的语言,并且在R运行时语言不能更改。这种方法的一个轻微修改(感谢Uwe-Ligges)是使用如下内容:tryCatch({“abc”/1},error=function(err)){return(err)})生成错误。当您开发R包时,此代码不会失败地通过CRAN的自动检查,而我上面的原始方法(访问不存在的对象)会生成验证错误。
getlanguage <- function() {
res <- tryCatch( { xhajakjkula/1 }, error = function(err) { return(err) })
lang <- "EN"
if(res$message == "Objekt 'xhajakjkula' nicht gefunden") lang <- "DE"
if(res$message == "objet 'xhajakjkula' introuvable") lang <- "FR"
if(res$message == "oggetto \"xhajakjkula\" non trovato") lang <- "IT"
if(res$message == "nie znaleziono obiektu 'xhajakjkula'") lang <- "PL"
if(res$message == "objeto 'xhajakjkula' no encontrado") lang <- "ES"
if(res$message == "'xhajakjkula' nesnesi bulunamadi") lang <- "TR"
return(lang)
}