Я пытаюсь найти надежный способ найти коды локалей для перехода на Sys.setlocale
.
На странице справки ?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. Вызов locale -a
из командной строки Windows завершается с ошибкой, если не установлен 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
, см. рис.) имеет аналогичный, но не идентичный список доступных локалей, но я не знаю, где это заполняется.
Есть несколько связанных вопросов:
1. Люди Mac и Solaris: пожалуйста, вы можете проверить, работает ли мой код для получения локалей под вашей ОС.
2. Индийский/пакистанский/норвежский/эфиопский народ, использующий Windows: Пожалуйста, скажите мне, что Sys.getlocale()
вернется для вас.
3. Другие пользователи Windows: есть ли какая-либо лучшая документация, по которой доступны локали?
Обновление: после нажатия ссылок в вопросе, о котором упомянул Бен Б, я наткнулся на этот лучший список локалей в Windows. Ручным изменением языка с помощью диалогового окна "Регион и язык" и вызова Sys.getlocale()
, я понял, что Нюнорск "норвежский-Nynorsk_Norway". Есть еще много странностей, например
Sys.setlocale(, "Inuktitut (Latin)_Canada")
отлично, но
Sys.setlocale(, "Inuktitut (Syllabics)_Canada")
терпит неудачу (как и большинство индийских языков). Запуск R в любом из этих локалей вызывает предупреждение, а R locale - на C
.
Мне все еще интересно услышать от индейцев и т.д., что относительно того, что у вас есть.