On Sat, Dec 09, 2000 at 12:08:51AM +0300, Dmitry V. Levin wrote: > Greetings! > > On Thu, Dec 07, 2000 at 10:25:49AM +0000, AB wrote: > > Стал ставить subj и в ответ получил: пакет Система/Библиотеки не внесен в group index. > > Что бы это значило? > > Это значит, что Вы установили и пользуетесь rpm-3.0.6-ipl11mdk, > отличительной особенностью которого является наличие перевода стандартных > названий групп пакетов на русский язык. > > К моему ужасу, в процессе эксплуатации выяснилось, что rpm в принципе не > рассчитан на использование более чем одной локали при > установке/обновлении/удалении пакетов. > Другими словами, если Вы сперва устанавливаете пакет (с переведенным > именем группы) в среде с локалью C, а потом удаляете этот пакет с локалью > ru_RU.KOI8-R, то Вы со 100% вероятностью получите сообщение: > пакет <переведенное имя группы> не внесен в group index. > > Я сам никогда бы не увидел этой ошибки, ибо всю > установку/обновление/удаление пакетов произвожу в локали C. > Огромная благодарность автору вопроса за то, что он невольно пролил свет > на эту дикую ситуацию. > > Важно, что проблема носит принципиальный характер, ибо наименование группы вне > зависимости от ее дальнейшего использования в программе (будь то внесение > в базу данных или показ пользователю) проходит через одну и ту же функцию: > int headerGetEntry(Header h, int_32 tag, int_32 * type, void **p, int_32 *c) > с входным значением tag == RPMTAG_GROUP. > Проблема касается не только групп, но и всех переведенных тэгов. > > Эта проблема существовала всегда, начиная с момента, как rpm стал > поддерживать локализацию имен групп. Просто ввиду отсутствия переводов эта > ошибка была очень большой редкостью (не забудьте, что надо еще локаль > менять!). > > В rpm-current (из cvs) интерфейс работы с базой данных изменился > значительно, но headerGetEntry остался неизменным, и этой проблемой никто > не озабочен. > > Какие будут предложения? > Если клонировать интерфейс, то как именно? > Взвешенные идеи приветствуются. > Очевидно, я буду поднимать этот вопрос в rpm-list, но этого нет смысла > делать, пока у нас не появится работающее решение. Первое решение -- разделить операции внутреннего взаимодействия с БД и отображения пользователю на две различные функции. headerGetEntry оставить для первой операции, а для второй добавить headerGetEntryDisplay, тем более, что headerGetEntry это всего лишь вызов intGetEntry. Второе решение -- разобраться с вызовами в headerSprintf, которая является интерфейсом верхнего уровня к данным функциям. Здесь также можно повторить клонирование и мне кажется, что здесь оно будет необходимо и, возможно, более удобно. -- Sincerely yours, Alexander Bokovoy The Midgard Project | www.midgard-project.org | Aurora R&D team Minsk Linux Users Group | www.minsk-lug.net | www.aurora-linux.com IPLabs Linux Team | linux.iplabs.ru | Architecte Open Source -- "One lawyer can steal more than a hundred men with guns." -- The Godfather