On Wed, Sep 01, 2010 at 05:40:58PM +0400, Alexey I. Froloff wrote: > On Wed, Sep 01, 2010 at 05:34:17PM +0400, Sergey Vlasov wrote: > > Зависят как минимум от порядка байтов, поэтому в %datadir их всё-таки > > класть нельзя. > gettext(3) умеет определять порядок байтов в .mo файлах (поэтому > они лежат в %_datadir). А что с остальными локалечастями? Там всё читается напрямую: заголовок рассматривается как struct с массивом неопределённой длины в конце, из этого массива берутся смещения отдельных элементов (строк, массивов с данными, ...) и преобразуются в указатели, которые рассовываются по внутренним массивам. Причём часть этих элементов на самом деле является тоже массивами из int16_t или int32_t, для которых тоже не выполняются никакие преобразования. http://git.altlinux.org/gears/g/glibc.git?p=glibc.git;a=blob;f=locale/loadlocale.c;h=b91941eae95bdec33a669c72639647254f3eb0b5;hb=HEAD#l64 (там ещё в конце специальный случай - тип word, для него значение типа uint32_t тоже вытаскивается напрямую). Причём когда-то давно о совместимости с другим порядком байтов там заботились - судя по ChangeLog.10, этот код выбросили 1999-09-13, тогда же и перенесли localedir из datadir в libdir. Чуть позже (2000-01-31) для sparc64 перенесли файлы в $exec_prefix/lib/locale с целью использования одной копии для 32-битной и 64-битной библиотеки (так что совместимость 32/64 там должна поддерживаться). Сейчас то же самое по умолчанию делается и для x86_64. Получается, что на x86_64 сейчас файлы glibc-locales зря лежат в /usr/lib64/locale - их место в /usr/lib/locale.