windows - titulo - ¿Cuál es una forma confiable de obtener nombres de locale permitidos en R?
r grafica (2)
Estoy tratando de encontrar una manera confiable de encontrar códigos de configuración regional para pasar a Sys.setlocale
.
La página de ayuda ?Sys.setlocale
simplemente indica que los valores permitidos dependen del sistema operativo, y da estos ejemplos:
Sys.setlocale("LC_TIME", "de") # Solaris: details are OS-dependent
Sys.setlocale("LC_TIME", "de_DE.utf8") # Modern Linux etc.
Sys.setlocale("LC_TIME", "de_DE.UTF-8") # ditto
Sys.setlocale("LC_TIME", "de_DE") # Mac OS X, in UTF-8
Sys.setlocale("LC_TIME", "German") # Windows
Bajo Linux, las posibilidades se pueden recuperar usando
locales <- system("locale -a", intern = TRUE)
## [1] "C" "C.utf8" "POSIX"
## [4] "af_ZA" "af_ZA.utf8" "am_ET"
## ...
No tengo máquinas Solaris o Mac a mano, pero supongo que esa salida puede generarse a partir de eso usando algo como:
library(stringr)
unique(str_split_fixed(locales, "_", 2)[, 1]) #Solaris
unique(str_split_fixed(locales, "//.", 2)[, 1]) #Mac
Las ubicaciones en Windows son mucho más problemáticas: requieren nombres largos con el formato "language_country", por ejemplo:
Sys.setlocale("LC_ALL", "German_Germany")
No puedo encontrar una referencia confiable para la lista de locales en Windows. La llamada al locale -a
desde la línea de comando de Windows falla a menos que se instale cygwin, y luego devuelve los mismos valores que en Linux (supongo que está accediendo a los valores en una biblioteca C estándar).
No parece haber una lista de configuraciones regionales empaquetadas con R (pensé que podría haber algo similar para share/zoneinfo/zone.tab
que contiene detalles de la zona horaria).
Mi mejor estrategia actual es navegar esta página web desde Microsoft y formar el nombre mediante la manipulación de la columna SUBLANG
de la tabla.
http://msdn.microsoft.com/en-us/library/dd318693.aspx
Se necesitan algunas conjeturas, por ejemplo, la configuración regional relacionada con SUBLANG_ENGLISH_UK
es English_United Kingdom
.
Sys.setlocale("LC_ALL", "English_United Kingdom")
Donde hay variantes en diferentes alfabetos, se necesitan paréntesis.
Sys.setlocale("LC_ALL", "Uzbek (Latin)_Uzbekistan")
Sys.setlocale("LC_ALL", "Uzbek (Cyrillic)_Uzbekistan")
Esta conjetura no sería tan mala, pero muchas ubicaciones no funcionan en absoluto, incluida la mayoría de las localidades indias.
Sys.setlocale("LC_ALL", "Hindi_India")
Sys.setlocale("LC_ALL", "Tamil_India")
Sys.setlocale("LC_ALL", "Sindhi_Pakistan")
Sys.setlocale("LC_ALL", "Nynorsk_Norway")
Sys.setlocale("LC_ALL", "Amharic_Ethiopia")
El cuadro de diálogo Región e idioma de Windows/System32/intl.cpl
( Windows/System32/intl.cpl
, ver foto) tiene una lista similar pero no idéntica de locales disponibles, pero no sé de dónde se rellena.
Hay varias preguntas relacionadas:
1. Personal de Mac y Solaris: por favor, puede verificar si mi código para obtener configuraciones locales funciona en su sistema operativo.
2. Personas indias / paquistaníes / noruegas / etíopes que usan Windows: Por favor, ¿puede decirme qué Sys.getlocale()
?
3. Otras personas de Windows: ¿Existe alguna mejor documentación sobre qué locales están disponibles?
Actualización: Después de hacer clic en los enlaces en la pregunta que Ben B mencionó, me topé con esta mejor lista de locales en Windows. Cambiando manualmente la configuración regional mediante el cuadro de diálogo Región e Idioma y llamando a Sys.getlocale()
, Sys.getlocale()
que Nynorsk es "Norwegian-Nynorsk_Norway". Todavía hay muchas rarezas, por ejemplo.
Sys.setlocale(, "Inuktitut (Latin)_Canada")
esta bien pero
Sys.setlocale(, "Inuktitut (Syllabics)_Canada")
falla (como la mayoría de las lenguas indias). El inicio de R en cualquiera de estas configuraciones regionales provoca una advertencia, y la configuración regional de R vuelve a C
Todavía estoy interesado en saber de cualquier indio, etc., en cuanto a la ubicación que tiene.
En respuesta a tu primera pregunta, aquí está la salida en mi Mac:
> locales <- system("locale -a", intern = TRUE)
> library(stringr)
> unique(str_split_fixed(locales, "//.", 2)[, 1])
[1] "af_ZA" "am_ET" "be_BY" "bg_BG" "ca_ES" "cs_CZ" "da_DK" "de_AT" "de_CH"
[10] "de_DE" "el_GR" "en_AU" "en_CA" "en_GB" "en_IE" "en_NZ" "en_US" "es_ES"
[19] "et_EE" "eu_ES" "fi_FI" "fr_BE" "fr_CA" "fr_CH" "fr_FR" "he_IL" "hi_IN"
[28] "hr_HR" "hu_HU" "hy_AM" "is_IS" "it_CH" "it_IT" "ja_JP" "kk_KZ" "ko_KR"
[37] "lt_LT" "nl_BE" "nl_NL" "no_NO" "pl_PL" "pt_BR" "pt_PT" "ro_RO" "ru_RU"
[46] "sk_SK" "sl_SI" "sr_YU" "sv_SE" "tr_TR" "uk_UA" "zh_CN" "zh_HK" "zh_TW"
[55] "C" "POSIX"
No estoy seguro de lo que espero ver con Sys.setlocale()
pero no produce ningún error:
> Sys.setlocale(locale="he_IL")
[1] "he_IL/he_IL/he_IL/C/he_IL/en_AU.UTF-8"
> Sys.getlocale()
[1] "he_IL/he_IL/he_IL/C/he_IL/en_AU.UTF-8"
Gracias a todos. Fui a la URL que Richie sugirió, http://msdn.microsoft.com/en-us/library/dd318693.aspx , y probé LANG_BELARUSIAN en Windows. Eso no funcionó, así que corté el "LANG_" e incluí "BELARUSIAN" por sí mismo. Funcionaba bien.
> bk.date1
[1] "Ma 2012 14 de agosto 11:28:30"
ymd_hms (bk.date1, locale = "BELARUSIAN") [1] "2012-08-14 11:28:30 UTC"