2014-01-06 22 views
17

我試圖找到一種可靠的方式來查找區域代碼傳遞給Sys.setlocale在R中獲取允許的語言環境名稱的可靠方法是什麼?

?Sys.setlocale幫助頁面剛指出允許值是依賴於操作系統的,並給出了一些例子:

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 

在Linux下,可能可以使用檢索

locales <- system("locale -a", intern = TRUE) 
## [1] "C"     "C.utf8"    "POSIX"    
## [4] "af_ZA"    "af_ZA.utf8"   "am_ET" 
## ... 

我不有Solaris或Mac的機器,但我想那個輸出可以使用類似的東西生成:

library(stringr) 
unique(str_split_fixed(locales, "_", 2)[, 1]) #Solaris 
unique(str_split_fixed(locales, "\\.", 2)[, 1]) #Mac 
在Windows種

語言環境更成問題:他們需要的形式是「LANGUAGE_COUNTRY」的長文件名,例如:

Sys.setlocale("LC_ALL", "German_Germany") 

我找不到語言環境的Windows下的列表中選擇一個可靠的參考依據。從Windows命令行調用locale -a失敗,除非安裝了cygwin,然後返回與Linux下相同的值(我猜它正在訪問標準C庫中的值)。

似乎沒有與R打包的語言環境列表(我認爲可能類似於包含時區詳細信息的share/zoneinfo/zone.tab)。

我目前的最佳策略是從Microsoft瀏覽此網頁,並通過操作表的SUBLANG列來形成名稱。

http://msdn.microsoft.com/en-us/library/dd318693.aspx

一些猜測是必要的,例如有關SUBLANG_ENGLISH_UK語言環境English_United Kingdom

Sys.setlocale("LC_ALL", "English_United Kingdom") 

如果存在不同字母的變體,則需要括號。

Sys.setlocale("LC_ALL", "Uzbek (Latin)_Uzbekistan") 
Sys.setlocale("LC_ALL", "Uzbek (Cyrillic)_Uzbekistan") 

這個猜測不會太糟糕,但許多語言環境根本不起作用,包括大多數印度語言環境。

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

在Windows區域和語言選項對話框(Windows\System32\intl.cpl,見PIC)具有相似但不相同的可用區域設置列表中,但我不知道是從填充。

enter image description here

有幾個相關問題:
1. Mac版本和Solaris的人:請您可以檢查,看看我的用於獲取區域設置代碼的操作系統下工作。
2.使用Windows的印度/巴基斯坦/挪威/埃塞俄比亞人:請你告訴我什麼Sys.getlocale()爲你回報。
3.其他Windows用戶:有哪些語言環境可用的更好的文檔?

更新:在點擊Ben B提到的問題中的鏈接後,我在Windows中偶然發現了這個better list of locales。通過使用「區域和語言」對話框手動更改區域設置並致電Sys.getlocale(),我推斷Nynorsk是「Norwegian-Nynorsk_Norway」。還有很多古怪,例如

Sys.setlocale(, "Inuktitut (Latin)_Canada") 

是好的,但

Sys.setlocale(, "Inuktitut (Syllabics)_Canada") 

失敗(如大多數的印第安人的語言)。在任何這些語言環境中啓動R會導致警告,R的語言環境將恢復爲C

我仍然有興趣聽到任何印度人等,你有什麼地方。

+2

http://stackoverflow.com/questions/5152866/list-of-locales-in-windows,http://superuser.com/questions/166089/where-is-the-list-of-available- windows-locales(但後面的問題是你的!)...谷歌搜索「Windows列表可用區域設置」顯示你在其他地方問過的問題(我無法分辨你是否爲得到了你問,或者這些答案是否沒有任何作用 - 它似乎是一個相當混亂) –

+2

@BenBolker似乎老年癡呆症是設置英寸我以前有地方的問題,但我完全忘記了問這個問題。感謝您的提醒。 –

+0

另請參閱http://stackoverflow.com/q/26603564/134830 –

回答

6

在回答你的第一個問題,這裏是我的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" 

我不知道什麼,我期待看到與Sys.setlocale()但它不會引發任何錯誤:

> 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" 
+0

好吧,很好,那些看起來似乎合理。你有沒有嘗試'Sys.setlocale()'的任何值,看看他們的工作? –

+0

我已經更新了答案,它似乎工作 –

相關問題