Я играл с хэш-таблицами Gettext MO в PHP. Хотя я не уверен, насколько важна эта дополнительная таблица, я бы хотел убедиться, что при создании файлов MO я реализую полную спецификацию.Как составить таблицу хешей MO?
Я скомпилировал простой файл PO с записями "","a","b","c"
с использованием Gettext msgfmt
на моем Mac, а также в Linux. Хэш-таблица имеет длину 5 байтов, но странно содержит в основном нулевые байты: 01 00 00 00 00
Запуск алгоритма, извлеченного из исходного кода Gettext. Вместо этого создаю таблицу 01 00 02 03 04
.
Вот мой тестовый код:
https://gist.github.com/timwhitlock/8255619 (в том числе, например, файл PO)
Я не пишу C, но путает свой путь через исходный код GNU Gettext к порту функций, показанных.
Моя собственная сборка хэш-таблицы может быть неправильной, но для того, чтобы понять, почему я хотел бы сначала понять, почему MOG-файл, созданный с помощью msgfmt, имеет хэш-таблицу, в основном, нули?
Я уверен, что правильно вынимаю хэш-таблицу из файла MO. Я получаю размер и положение таблицы с шестого байта как outlined in the spec.
В моем примере «abc» не используется двойное хеширование, поэтому я не понимаю, как эта таблица правильная, независимо от того, правильна ли моя таблица.
Какова правильная таблица хэшей для примера «abc»?