2 votes

Identifier les paramètres réels de la langue du message dans R

J'essayais d'identifier le paramètre de langue (la langue dans laquelle les messages, etc., sont présentés) dans R.

La situation initiale est la suivante :

  • J'utilise Windows, donc Sys.getlocale(category="LC_MESSAGES") n'est pas disponible
  • Dans la console R (éditeur standard), tous les messages sont en allemand ; cependant, Sys.getenv("LANGUAGE")=""
  • Dans R Studio, tous les messages sont en anglais ; Sys.getenv("LANGUAGE")="" également.

Ce que je veux faire est le suivant : Identifier le réel la langue des messages R, c'est-à-dire la langue des messages présentés à l'utilisateur (allemand dans la console R, anglais dans RStudio), et ce indépendamment du système d'exploitation utilisé. En d'autres termes, l'idéal serait d'éviter de traiter des chaînes de résultats comme celles de Sys.getlocale() (par exemple, "de_DE.UTF-8") qui dépendent du système d'exploitation.

Des idées ? Merci beaucoup !

2voto

JoachimMun Points 71

J'ai finalement trouvé une solution. Je génère des erreurs et j'analyse les messages d'erreur pour identifier la langue.

Pour ce faire, je vérifie d'abord toutes les versions linguistiques possibles du message d'erreur à l'aide de la fonction suivante qui renvoie un cadre de données avec le code pays ISO (que j'ai repris de Wikipedia) et un message d'erreur dans la langue correspondante :

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))
}

Après avoir analysé la trame de données résultante, j'ai constaté que seuls six des codes pays ISO produisent des messages d'erreur dans une langue différente de l'anglais (à savoir le polonais, le français, l'espagnol, l'allemand, le turc et l'italien). J'utilise le message d'erreur pour créer une fonction qui renvoie la langue (avec l'anglais comme valeur de retour par défaut :

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)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X