php中的.po到.mo转换?

时间:2009-07-25 09:08:48

标签: php internationalization gettext

我想要一个可以将 .po (可移植对象)转换为 .mo (机器对象)文件的PHP脚本? 是PHP中的任何脚本吗?

             byte
              +------------------------------------------+
           0  | magic number = 0x950412de                |
              |                                          |
           4  | file format revision = 0                 |
              |                                          |
           8  | number of strings                        |  == N
              |                                          |
          12  | offset of table with original strings    |  == O
              |                                          |
          16  | offset of table with translation strings |  == T
              |                                          |
          20  | size of hashing table                    |  == S
              |                                          |
          24  | offset of hashing table                  |  == H
              |                                          |
              .                                          .
              .    (possibly more entries later)         .
              .                                          .
              |                                          |
           O  | length & offset 0th string  ----------------.
       O + 8  | length & offset 1st string  ------------------.
               ...                                    ...   | |
 O + ((N-1)*8)| length & offset (N-1)th string           |  | |
              |                                          |  | |
           T  | length & offset 0th translation  ---------------.
       T + 8  | length & offset 1st translation  -----------------.
               ...                                    ...   | | | |
 T + ((N-1)*8)| length & offset (N-1)th translation      |  | | | |
              |                                          |  | | | |
           H  | start hash table                         |  | | | |
               ...                                    ...   | | | |
   H + S * 4  | end hash table                           |  | | | |
              |                                          |  | | | |
              | NUL terminated 0th string  <----------------' | | |
              |                                          |    | | |
              | NUL terminated 1st string  <------------------' | |
              |                                          |      | |
               ...                                    ...       | |
              |                                          |      | |
              | NUL terminated 0th translation  <---------------' |
              |                                          |        |
              | NUL terminated 1st translation  <-----------------'
              |                                          |
               ...                                    ...
              |                                          |
              +------------------------------------------+

我可以根据这些信息制作一个mo文件吗?

2 个答案:

答案 0 :(得分:4)

您可以使用exec()或类似名称运行msgfmt。我不知道是否有以PHP为单位的方法。

答案 1 :(得分:2)

我没有尝试过,但看起来PEAR package可能会对您有所帮助。它没有维护,但也许你可以成为新的维护者?

如果您可以阅读Python,那么您可以尝试将their msgfmt.py脚本转换为PHP。它只有200行左右。