Вопрос или проблема
Я использую Arch и хочу установить локаль всей моей системы на C
(и только C
). C
не упомянута в /etc/locale.gen
(и только en_US.UTF-8 UTF-8
не закомментирована), но C
находится в /usr/share/i18n/locales/
.
Я выполнил команду localectl set-locale C
и вышел/вошел в систему, команда locale
показывает C
для всего — отлично.
Мои вопросы:
-
Нужно ли мне закомментировать строку
en_US.UTF-8 UTF-8
в файлеlocale.gen
и выполнить командуlocale-gen
, чтобы удалить другие нежелательные остатки локалей из системы? -
Перед выполнением команды
locale-gen
следует ли добавитьC
в файлlocale.gen
, и если да, то какой<charmap>
является стандартным для него?
Я заглядываю в каталог /usr/share/i18n/charmaps/
, но не вижу там ничего похожего на C.gz
. Верно ли использовать UTF-8.gz
, ANSI_X3.110-1983.gz
или какой-либо из ISO-*
/ISO_*
?
Я выполняю команду localectl list-locales
и вижу:
C.UTF-8
en_US.UTF-8
Означает ли это, что моя локаль не полностью и только C
, и у меня есть нежелательные остатки других?
Ответ или решение
Настройка системной локали на C в Arch Linux – важная задача, учитывая, что локаль C играет особую роль в компьютерных системах. Локаль C (иногда называемая "POSIX") предоставляет минимальный набор языковых параметров и предназначена для стандартизированной работы приложений, особенно если требуется избегать локальных особенностей и настроек, таких как форматы даты и времени, сортировка строк и пр.
Теория
Локаль C традиционно используется как "базовая" или "стандартная" локаль в Unix-подобных системах. Она реализует упрощенный и независимый от языка подход, который часто используется для обеспечения стабильной работы программного обеспечения и тестирования. В этой локали имеется минимальный набор символьных данных, что подходит для сценариев, где требуется гарантированная предсказуемость поведения системных и пользовательских приложений.
Локаль C сама по себе не требует указания charmap, поскольку она не ориентирована на поддержку ОК чаров, не выходящих за пределы ASCII-символов. Это также объясняет, почему C не требует специальных настроек в /etc/locale.gen
.
Пример
Ваш сценарий описывает систему Arch, для которой вы хотите установить локаль C. Вы правильно отметили, что локаль C не представлена в /etc/locale.gen
, так как она считается встроенной в системы и не требует явной генерации. Локаль C доступна по умолчанию, и может быть установлена командой localectl set-locale C
.
Вы задали довольно резонный вопрос относительно остальных комментариев в файле locale.gen
и возможного наличия следов других локалей, таких как en_US.UTF-8. Поскольку локаль C минималистична, вы не обязаны комментировать другие записи в locale.gen
, если система корректно использует C по умолчанию, как это подтверждается командой locale
, показывающей C для всех настроек.
Применение
-
Комментарий en_US.UTF-8 UTF-8: Теоретически, вам не нужно комментировать строку с en_US.UTF-8 в файле
locale.gen
, если вы не используетеlocale-gen
для генерации новых локалей. Если ваша система уже настроена на использование C и работает должным образом, эта строка более не имеет значения, за исключением случаев, если вы хотите освободить место на диске, занимаемое сгенерированными локальными данными. -
Добавление C в locale.gen: Добавление C в файл
locale.gen
технически не оправдано, поскольку C не требует генерации файла локали как таковой. Она встроена на уровне ядра системы. -
Charmap для C: Как локаль основанная на ASCII, C не использует расширенные чарты, такие как UTF-8 или ISO-*. Ваши поиски чармапы для C не принесут результатов, поскольку C по природе своей не поддерживает многобайтовые символы, а ограничивается стандартными кодировками ASCII.
-
Вывод
localectl list-locales
: Появление C.UTF-8 в списке поддерживаемых локалей говорит о том, что ваша система поддерживает не только стандарт C, но и напряженно расширенный дилект C.UTF-8. Тем не менее, еслиlocale
команда указывает, что все настройки локали находятся в C, система должным образом использует C.
В итоге, ваша система настроена на локаль C, и если команда locale
возвращает C для каждой настройки, это свидетельствует о том, что ваша система работает в режиме C. Вы можете игнорировать любое оставшееся упоминание о других локалях как нежелательных остаток без значительных последствий.
Рекомендуется лишь периодически следить за состоянием вашей системы и периодически проверять, поддерживается ли желаемая работа в контексте изменений системного ПО или установок.