Я не знаю жодного місцеположення, яке за замовчуванням сортується в тому порядку. Рішення полягає в створенні нестандартного локального місця з індивідуальним порядком сортування. Якщо хтось, через чотири роки, захоче розібратися на замовлення, ось ось фокус.
Переважна більшість локалів не вказує власний порядок сортування, а скопіює порядок сортування, визначений у /usr/share/i18n/locales/iso14651_t1_common
такому, що саме ви хочете редагувати. Замість того, щоб змінювати порядок сортування майже для кожного локального регіону, змінюючи оригінал iso14651_t1_common
, пропоную зробити копію. Деталі про те, як працює порядок сортування та як створити користувальницьку локаль у вашій $HOME
каталозі без доступу до кореневих файлів, ви знайдете у цій відповіді на подібне запитання .
Ознайомтеся з тим, як a
і A
впорядковуються виходячи з їх записів у iso14651_t1_common
:
<U0061> <a>;<BAS>;<MIN>;IGNORE # 198 a
<U0041> <a>;<BAS>;<CAP>;IGNORE # 517 A
b
і B
подібні:
<U0062> <b>;<BAS>;<MIN>;IGNORE # 233 b
<U0042> <b>;<BAS>;<CAP>;IGNORE # 550 B
Ми бачимо, що на першому проході обидва a
і A
мають символ згортання <a>
, а в обох b
і B
є символ згортання <b>
. Оскільки <a>
з'являється раніше <b>
в iso14651_t1_common
, a
і A
пов'язані перед b
і B
. Другий прохід не розриває зв’язки, оскільки всі чотири символи мають символ згортання <BAS>
, але під час третього проходу зв'язки вирішуються, оскільки символ <MIN>
рядка для малих літер з’являється у рядку 3467 перед символом згортання великих літер <CAP>
(рядок 3488) . Таким чином, порядок сортування закінчується як a
, A
, b
, B
.
Заміна першого та третього символів, що складаються, сортує букви спочатку в регістрі (нижній та верхній), потім по наголосу ( <BAS>
означає, що не є наголосом), потім за алфавітом. Однак і те, <MIN>
і інше <CAP>
ставиться до числових цифр, тож це призведе до небажаного ефекту введення цифр після букв.
Найпростіший спосіб зберегти цифри першими, роблячи всі малі літери перед усіма великими літерами, - змусити всі літери зв'язати під час першого порівняння, встановивши їх усі рівні <a>
. Щоб переконатися, що вони в алфавітному порядку сортуються за регістром, змініть останній символ згортання IGNORE
на поточний перший збірний символ. Дотримуючись цієї закономірності, a
стане:
<U0061> <a>;<BAS>;<MIN>;<a> # 198 a
A
стане:
<U0041> <a>;<BAS>;<CAP>;<a> # 517 A
b
стане:
<U0062> <a>;<BAS>;<MIN>;<b> # 233 b
B
стане:
<U0042> <a>;<BAS>;<CAP>;<b> # 550 B
і так далі для решти листів.
Після створення спеціалізованої версії iso14651_t1_common
дотримуйтесь інструкцій у відповіді, зв'язаній вище, щоб скласти власну власну мову.