Вопрос или проблема
Я использую buildroot для сборки Linux с busybox (без systemd). Как сделать локаль en_US по умолчанию?
Мой конфигурационный файл buildroot похож на qemu_x86_defconfig, но с дополнительными
BR2_ENABLE_LOCALE_WHITELIST="en_US"
BR2_GENERATE_LOCALE="en_US"
После этого я пытаюсь запустить свое приложение hello world на Qt, но получаю шумное предупреждение
Обнаружена локаль "C" с кодировкой символов "ANSI_X3.4-1968", которая не является UTF-8.
Qt зависит от локали UTF-8, но не удалось переключиться на нее.
Если это вызывает проблемы, перенастройте вашу локаль. См. мануал locale(1)
для получения дополнительной информации.
Затем я собираю инструмент локали. Давайте проверим с помощью locale
# locale
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
Но если я сделаю
export LC_ALL=en_US.utf8 && ./myQt_app
То все работает без предупреждений. И locale
также может видеть en_US.utf8… Как экспортировать автоматически?
Ответ или решение
Для установки локали en_US
по умолчанию в окружении Linux, который работает на основе Buildroot и BusyBox (без systemd), необходимо выполнить несколько шагов. Это будет полезно для вашего приложения на Qt, которое требует использования UTF-8 локали. Вот подробное руководство по настройке.
1. Конфигурация Buildroot
Поскольку вы уже внесли изменения в конфигурацию Buildroot, добавив следующие строки:
BR2_ENABLE_LOCALE_WHITELIST="en_US"
BR2_GENERATE_LOCALE="en_US"
это правильное начало. Убедитесь, что в вашем файле конфигурации, скорее всего defconfig
, указаны также следующие параметры:
BR2_PACKAGE_LOCALE
Это позволит включить пакет локализации в сборку. Если вы еще не сделали этого, внесите соответствующее изменение.
2. Проверка доступных локалей
После сборки и загрузки вашего образа системы вы можете проверить доступные локали, используя команду:
locale -a
Убедитесь, что en_US.utf8
отображается в списке доступных локалей.
3. Установка локали по умолчанию
Чтобы задать локаль по умолчанию для системы, вам нужно будет создать файл конфигурации окружения, который будет выполняться при загрузке системы. Попробуйте создать или отредактировать файл /etc/profile
или создать файл в /etc/profile.d/
, например, locale.sh
, и добавьте туда следующие строки:
export LANG=en_US.utf8
export LC_ALL=en_US.utf8
Это позволит установить переменные окружения при каждой загрузке системы. Убедитесь, что у вас есть права на редактирование этих файлов.
4. Проверка конфигурации
После внесения изменений перезагрузите систему и снова выполните команду:
locale
Вы должны увидеть:
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
5. Запуск Qt приложения
Теперь, когда локаль правильно настроена, вы можете запускать ваше Qt приложение без предварительной установки переменных окружения вручную. Предполагается, что предупреждение о некорректной локали больше не появится.
Заключение
Эти шаги обеспечат установку локали en_US
по умолчанию для вашего Linux окружения. Убедитесь, что все изменения внесены корректно и протестируйте вашу конфигурацию после каждой модификации. Следуя вышеописанным инструкциям, вы сможете избежать проблем с совместимостью, возникающих при использовании различных приложений, требующих настроенной локали UTF-8.