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