Когда я смотрю на файлы, перечисленные в Nautilus (сортировка по имени), если есть как английские, так и не-ASCII (в моем случае японские) символы, некоторые символы (kana) смешиваются с символами ASCII вне порядка. (Windows разделяет их должным образом.)
Я проверил много связанных вопросов здесь, и похоже, что порядок сортировки жестко запрограммирован в Nautilus, и поэтому не может быть изменен.
Но мой вопрос здесь не в том, как чтобы изменить его, но там, где фактически определен алгоритм сортировки, относящийся к не-ASCII символам. Я использую 18.04, если это важно. Моя локаль - американский английский. Команда
Terminal ls
, похоже, отдает тот же порядок, так что это может быть системная настройка, а не специфическая для Nautilus, но опять же я не знаю, где искать это.
Предварительные требования: Сначала проверьте, что в вашей системе установлена локаль вашего языка (в вашем случае японская локаль), с помощью команды:
$ grep -v '^#' /etc/locale.gen
Если японская локаль ( ja_JP.UTF8
) отсутствует в списке, вы должны добавить его в свою систему, используя:
$ sudo dpkg-reconfigure locales
Как правило, порядок сортировки является системной настройкой и зависит от вашей текущей локали. Вы упомянули, что используете локаль "US-English". Я предполагаю, что это en_US.UTF-8
и, вероятно, именно поэтому вы видите, что имена файлов отсортированы в порядке сортировки США.
Сначала проверьте из командной строки следующее.Перейдите в каталог, содержащий файлы с именами на английском и японском языках, и введите команду:
$ LC_ALL=ja_JP.UTF8 ls
Если эта команда отображает файлы в нужном вам порядке, вы можете попробовать Nautilus также с помощью этой команды:
$ LC_ALL=ja_JP.UTF8 nautilus .
Если вы получили сообщение об ошибке например:
... Локаль не поддерживается библиотекой C. Использование резервной локали «C».
проверьте еще раз:
$ grep -v '^#' /etc/locale.gen
чтобы узнать, какие локали включены в вашей системе. Если японская локаль не включена, вы должны добавить ее в свою систему, используя:
$ sudo dpkg-reconfigure locales
Примечание. В приведенных выше командах (ls
и nautilus
) я поставил префикс среды переменная , которая влияет только на этот вызов команды. Если вы хотите изменить свою локаль навсегда, вам придется изменить «локаль по умолчанию» также с помощью команды sudo dpkg-reconfigure locales
.
Алгоритм сортировки Nautilus/File, похоже, определен в GLib :
GLib — это базовая библиотека низкого уровня, которая служит основой для проектов. такие как GTK и GNOME.
Официальные места загрузки: https://download.gnome.org/sources/glib
А точнее в gunicollate.c и его g_utf8_collate_key_for_filename()
.
Это обсуждается в различных проблемах, таких как
"g_utf8_collate_key_for_filename() угловые случаи с цифрами"
или эта старая ошибка на Launchpad:
"Сортировка по имени не работает не работает хорошо с цифрами или специальными символами"
где комментарий №10 предлагает использовать этот хак для решения проблемы сортировки: