2

我一直在使用 PHP 中的 Gettext MO 文件哈希表。虽然我不确定这个可选表有多重要,但我想确保在生成 MO 文件时尽可能实施完整的规范。

我在 Mac 和 Linux 上"","a","b","c"使用 Gettext编译了一个简单的 PO 文件,其中包含条目。msgfmt哈希表有 5 个字节长,但奇怪的是包含大量空字节,如下所示:01 00 00 00 00

运行从 Gettext 源代码中提取的算法,我生成了表格01 00 02 03 04

这是我的测试代码
https://gist.github.com/timwhitlock/8255619(包括示例 PO 文件)

我自己的哈希表编译很可能是错误的,但要理解为什么我想先了解为什么 msgfmt 生成的 MO 文件的哈希表大多是零?

我很确定我正确地从 MO 文件中提取哈希表。我从规范中概述的第六个字节获取表格的大小和位置。

在我的“abc”示例中,没有使用双重哈希,所以我不明白该表是如何正确的,无论我的表是否正确。

这个“abc”示例的正确哈希表是什么?

4

1 回答 1

1

我已经解决了这个问题。

我愚蠢地使用一个字节来保存哈希表中的每个整数。这是因为在 C 中看到了类似的东西hash_tab[idx],我的 PHP 大脑将$hash_tab{$idx}其翻译成当然是错误的。这将是substr($hash_tab,$idx,$idx+4)

我也没有看到哈希表“大小”是字符串的数量而不是字节长度。

我的示例代码现在可以工作了。我生成的表与从 MO 文件中提取的匹配。

于 2014-01-04T17:39:46.167 回答