После буквальных часов поиска, перелистывания perl-кода и скрежетов головного мозга я пришел к выводу, что Apple терпит неудачу в отделе создания и определения локали.Вот в чем дело: OSX предоставляет вам служебный скрипт (* ehem * ... shoddy), написанный на perl, расположенный по адресу /usr/bin/localedef
, который ПРЕДЛАГАЕТСЯ создавать новую локаль.На странице руководства сказано, что использование должно быть примерно таким (запускать внутри usr/share/locale
):
localedef -i base_file -f UTF-8 new_locale_name
Как указано в OP, эта команда предназначена только для копирования текущей локали.Ну, я даже не мог заставить ЭТО работать!Я не знаю Perl, но я обнаружил, по крайней мере, одну неосторожную ошибку кода в /usr/bin/localedef
(строка 512 ссылается на подпрограмму с именем set_escape_char
, которая на самом деле должна быть set_escape
), и вдобавок к этому я не смог получить localedef
работать на всех, так что это вне.Как утверждает @alombarte, вы можете просто скопировать каталог текущей локали с помощью cp -R src_locale trg_locale
, но он забыл упомянуть, что существуют различия между исходной и целевой локалями, которые вам нужно фактически изменить вручную в текстовых файлах в новой директории локали.
Например, я хотел создать языковой стандарт es_NI.UTF-8
(Никарагуа) с правильным кодом валюты и денежной информацией, поэтому вот что я сделал:
cd /usr/share/locale
sudo cp -R es_MX.UTF-8 es_NI.UTF-8
sudo vim es_NI.UTF-8/LC_MONETARY
# changed MXN to NIO, $ to C$, etc...
# saved LC_MONETARY
Возможно, вам придется изменить другой соответствующийзначения в зависимости от вашего использования новой локали. Здесь - лучшая коллекция информации о локали, которую я смог найти в Интернете.Если бы я был лучшим программистом, я бы создал скрипт, который принимает экспортированный формат этих сайтов "glibc" и переформатирует его для работы с командой localedef
в Mac OSX.
PS приносит извинения @alombarte за начальныйпонизить голос ... хотя его ответ не отвечает на истинный вопрос, я не понимал, что было бы невероятно трудно сделать это любым другим способом.